[ 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. |
[ Milan Milosevic @ 13.08.2007. 15:17 ] @
[ 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! Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|