Postmessage specjalne znaki

0

Witam,
Jak poprzez Postmessage lub inną funkcję wysłać specjalne znaki do programu (np. !@#$%^&*()_ ) ?
Oczywiście chodzi o wysyłanie do nieaktywnego okna bez foregroundwindow, czyli aby okienko nadal było nieaktywne i wysłać znaki specjalne ?

Jak robię z DOWN shift i np 1 to wpisuje 1 bo postmessage automatycznie odciska klawisz poprzedni i wychodzi shift a potem 1

Czy ktoś ma jakiś pomysł ?

Z góry dziękuje

0

Tak samo jak znaki zwykłe.

0

Twoja wypowiedź nie wnosi nic nowego, jeśli piszę że jak wysyłam tak samo jak zwykłe znaki to dostaję np 1 zamiast ! ,
tak u mnie wygląda wysłanie SendKey do programu

[code]
PostMessage(eClassHandle, Win32.WM_KEYDOWN, (IntPtr)Keys.V, (IntPtr)0x00140001);
[/code]

i jak zamiast Keys.V dać @,!,$ lub inny znak specjalny

0

Spróbuj użyć WM_CHAR.

0

Czym innym jest wysłanie znaku (WM_CHAR), a czym innym wysłanie klawisza (WM_KEYDOWN).

0

I co z tego? Autor chce wysłać znaki, a nie klawisze.

0

Te które podałeś to nie są znaki specjalne.

0

dobrze to żeby pewniej osobie dogodzić, chodzi o znaki które można uzyskać poprzez kombinację dwóch klawiszy shift + klawisz

Muszę wysłać klawisz a nie znak WM_CHAR odpada całkowicie.

0

Jeżeli docelowa aplikacja korzysta z TranslateMessage to WM_CHAR wystarczy.

W każdym razie: wyślij down shift, down docelowy klawisz, up docelowy klawisz, up shift.

0
Rev napisał(a):

W każdym razie: wyślij down shift, down docelowy klawisz, up docelowy klawisz, up shift.

A czytałeś co pisałem wcześniej ?
jak robię postmessage down shift a potem down klawisz to pojawi się klawisz sam (jakbym tylko nacisnął klawisz a nie z shiftem)

0

Ah. Bummer.

Zrewersuj docelową aplikację i sprawdź w jaki sposób pobiera te znaki. Będzie to chyba szybsze rozwiązanie niż próbowanie każdej możliwości po kolei. Te proste i tak się chyba skończyły.

0

To w końcu chcesz wysłać kombinację klawiszy shift+1 czy jednak znak wykrzyknika (!) ma tu jakieś znaczenie?

Jeśli chodzi o shift to aplikacja może sprawdzać jego stan przez GetAsyncKeyState, wtedy chyba dupa z tego wszystkiego.

0

zrobiłem sobie testy:
Notatnik poprawnie odczytuje wysłany mu znak np @
Program o który chodzi nie, albo wpisze 2 albo nic

Więc wynika z tego że muszę całkowicie odwzorować prawdziwe naciśniecie kalawisza czy też w tym wypadku dwóch klawiszy

Program sprawdza
Lparam oraz Wparam

Muszą być one poprawne, próbowałem już np
[code]
Win32.PostMessage(child, Win32.WM_KEYDOWN, (IntPtr)('@'), (IntPtr)0x290001);
Win32.PostMessage(child, Win32.WM_CHAR, (IntPtr)(0x00000000 + (Int32)'@'), (IntPtr)0x290001);
[/code]

Ale niestety nie działa poprawnie, albo nic nie wyświetla albo inny znak pokazuje (tutaj na sztywno próbuje dodać @)

Z tego co sprawdziłem także przez spy++ to inny program który np odpowiednio dodanie w tym wypadku cyfry naciska shift +F9, wysyła komunikaty poprawne
czyli
keydown shift
keydown klawisz
keyup shift
keyup klawisz

Jak wysyłam postmessage
tak samo to albo zatrzymuje się na keydow WM_CHAR (chodź char nie wysyłam) i nie idzie dalej wykonuje tylko keydown i wm_char znaku why?

1 użytkowników online, w tym zalogowanych: 0, gości: 1