[ Milan Milosevic @ 13.08.2007. 15:17 ] @
Zelim odredenom prozoru da posaljem preko SendMessage poruke da sam pretisnuo istovremeno ctrl i neko slovo recimo G.
[ bojan21 @ 14.08.2007. 19:40 ] @
Ne znam kako to tacno da posaljes, posto ne znam sta treba da se prosledi za parametar kad saljes WM_CHAR poruku! Ako imas Spy++, nadji handle nekog edit polja i loguj njegove poruke, tj. sta salje kad pritisnes Ctrl+ (nesto)! Napisacu ti kasnije sta meni prikazuje, mada to ne znam da "prevedem" za delphi! Pozzz
[ Milan Milosevic @ 14.08.2007. 22:57 ] @
U redu ja cu da prevedem. Trenutne kombinacije mi nisu dale zeljeni rezultat.
[ savkic @ 15.08.2007. 01:01 ] @
> Zelim odredenom prozoru da posaljem preko SendMessage poruke da sam pretisnuo istovremeno ctrl i neko slovo recimo G.

Da li je taj prozor u drugom procesu ili u istom? Ako ima fokus onda jednostavno koristi keybd_event funkciju. Ako nema fokus onda šalješ WM_KEYDOWN i WM_KEYUP pomoću PostMessage funkcije. Redosled je:
Ctrl KeyDown
G KeyDown
G KeyUP
Ctrl KeyUp
Ako je prozor u drugom procesu, zavisno od toga šta se u njemu dalje dešava sa tim porukama, možda su potrebne i dodatne mere.
[ Milan Milosevic @ 15.08.2007. 08:00 ] @
Probao sam tu kombinaciju poruka i ne funkcionise. Prosto ta kombinacija tastera pokrece neki proces u drugoj aplikaciji. Zelim napraviti da preko moje aplikacije automatizujem niz dogadaja koje izvrsavam sa doticnom aplikacijom. Fali mi samo taj deo sa kobinacijama tastera.
[ savkic @ 15.08.2007. 08:53 ] @
> Probao sam tu kombinaciju poruka i ne funkcionise. Prosto ta kombinacija tastera pokrece neki proces u drugoj aplikaciji.

Pokaži kod, verovatno ne vodiš računa o scancodu. Bitno je kako se okidaju komande u tom programu, da li direktno na WM_KEYxx ili se one transliraju u WM_CHAR (u kom slučaju ima još posla).
[ Milan Milosevic @ 15.08.2007. 09:50 ] @
SendMessage (Edit2.Handle, WM_KEYDOWN, VK_CONTROL, 0);
SendMessage (Edit2.Handle, WM_KEYDOWN, ord('G'), 0);
SendMessage (Edit2.Handle, WM_KEYUP, ord('G'), 0);
SendMessage (Edit2.Handle, WM_KEYUP, VK_CONTROL, 0);

ode sam uzeo probnu Edit komponentu na kojoj sam napravio proveru na dogadaj OnKEYDown. I ne radi preko slanja kobinacije. Dok direktno radi kad probam preko tastature. Takode i ne radi kad posaljem prozoru za koji i pravim aplikaciju.
Razmisljam se da je mozda to i odgovor na neki drugi dogadaj recimo KEYPRESS ali misim da ne treba da postoji razlika koliko ja znam nema odvojena windows poruka za taj dogadaj.
[ savkic @ 15.08.2007. 12:44 ] @
> SendMessage (Edit2.Handle, WM_KEYDOWN, VK_CONTROL, 0);

Dve greške imaš, mora se koristiti PostMessage i mora se navesti ScanCode (lParam). ScanCode možeš generisati pomoću MapVirtualKey ili videti koju vrednost dobija kada se pritisne tastatura (bilo handlovanjem WM_KEYxxx poruke ili iz WinSight32 ili Spy++).

Imam nekoliko pitanja od kojih zavisi kako treba prići problemu.

1) Da li je taj prozor u drugom procesu (programu) ili u istom?
2) Kako taj prozor okida operacije, na WM_KEYxx ili na WM_CHAR poruke?
3) Koji objekat se tačno okida u tom drugom prozoru, meni, button, shortcut..?
4) Da li se ta operacija može odabrati i pritiskom na neko dugme?
5) Da li ti imaš kontrolu nad tim drugim programom (možeš menjati kod)?

Bilo bi dobro da preko WinSight32 ili Spy++ pogledaš koje sve poruke stižu kada se pritisne kombinacija tastera, često se tako može otkriti i lakši put za realizaciju od simuliranja pritisaka na tastaturu.
[ bojan21 @ 15.08.2007. 17:04 ] @
Evo napravio sam jednu aplikaciju, stavio na formu samo jedno Edit polje i pritisnuo zatim Ctrl+A (dok je fokus bio na edit polju)! Logovao sam poruke preko Spy++, i evo sta sam dobio:

Code:

<00001> 002100E4 P WM_KEYDOWN nVirtKey:VK_CONTROL cRepeat:1 ScanCode:1D fExtended:0 fAltDown:0  fRepeat:0 fUp:0
<00002> 002100E4 P WM_KEYDOWN nVirtKey:'A' cRepeat:1 ScanCode:1E fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<00003> 002100E4 P WM_CHAR chCharCode:'' (1) cRepeat:1 ScanCode:1E fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<00004> 002100E4 P WM_KEYUP nVirtKey:VK_CONTROL cRepeat:1 ScanCode:1D fExtended:0 fAltDown:0 fRepeat:1 fUp:1
<00005> 002100E4 P WM_KEYUP nVirtKey:'A' cRepeat:1 ScanCode:1E fExtended:0 fAltDown:0 fRepeat:1 fUp:1


Znaci, ti samo treba da provalis kako da dobijes ovo: chCharCode:'', za Ctrl+ neki taster! Ako me ne bude mrzelo pokusacu da provalim! Pozdrav
[ Milan Milosevic @ 15.08.2007. 21:37 ] @
Vidim ali ne razumem u potpunosti. Dakle treba provaliti samo onaj deo za poruku WM_CHAR
Kockicu ti prijavi kad pretisnes ctrl. Odnosno kad stavimo u obradi dogadaja onkeydown
ShowMessage(char(Key));

lKeyData
evo neke specifikacije za lParam.
Value of lParam. Specifies the repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag, as shown in the following table:

Value Description
0-15 Specifies the repeat count. The value is the number of times the keystroke is repeated as a result of the user holding down the key.
16-23 Specifies the scan code. The value depends on the original equipment manufacturer (OEM).
24 Specifies whether the key is an extended key, such as the right-hand ALT and CTRL keys that appear on an enhanced 101- or 102-key keyboard. The value is 1 if it is an extended key; otherwise, it is 0.
25-28 Reserved; do not use.
29 Specifies the context code. The value is 1 if the ALT key is held down while the key is pressed; otherwise, the value is 0.
30 Specifies the previous key state. The value is 1 if the key is down before the message is sent, or it is 0 if the key is up.
31 Specifies the transition state. The value is 1 if the key is being released, or it is 0 if the key is being pressed.

Probao sam nesto ali nije islo.
probacu da napravim nesto.
[ bojan21 @ 15.08.2007. 21:46 ] @
Video sam to, sve sam pokusao al nece! Fora je da samo provalis kako je on dosao do tog parametra u SendMessage(handle, WK_CHAR, xxx, 0); Videcu da nadjem na netu neko dobro objasnjenje za Scancode i MapVirtualChars...

edit: ne razumem sto stavljas u obradu dogadaja onkeydown
ShowMessage(char(Key)); ja sam do onih poruka dosao preko drugog programa, nisam pisao nikakve obrade dogadjaja u programu na kome se nalazi edit ciji handle saljes kao parametar!