Ĺadny brzuch
Chciałem napisać program ,który po wciśnięciu pewnej kombinacji klawiszy w innym programie (nie napisanym przeze mnie) ,wyśle mu ciąg komunikatów symulujących naciśnięcia klawiszy.
Niestety nie wiem jak przechwicić klawiaturę z innego programu ,a co do symulacji to chyba funkcja SendInput jest niewystarczająca (nie można określić jej do ,którego okna ma "wysłać" klaisze).
przechwycenie klawiatury: hotkey
aktywne okno: GetForegroundWindow()
wysłanie "klawiatury" do okna: http://forum.ks-eksp...ndpost&p=411331 http://forum.ks-eksp...showtopic=52875
Użytkownik Cyrkiel edytował ten post 30 październik 2005, 21:24
przechwycenie klawiatury: hotkey(...)
hotkey ?!
Ustawiasz kombinację klawiszy (np. CTRL+F4), kiedy naciśniej kombinację, do Twojego programu (okna) zostaje wysłany komunikat WM_HOTKEY. Wtedy przechodzi do punktu 2 i 3 :P
A jak napisać tego HotKeya (pierwszy raz o tym czytam ,serio)?
A jak napisać tego HotKeya (pierwszy raz o tym czytam ,serio)?
Można jeszcze założyć hook'a na komunikaty klawiatury :)
A czy ten HotKey bedzie działał globalnie?
//Cyrkiel: Zamiast GetForegroundWindow() moze być GetFocus() ?
//Kikiz: Hooki obciążają system (program-adresat jest cokolwiek zasobożerny)
Zamiast GetForegroundWindow() moze być GetFocus() ? Nie może :P
Hotkey jest po to, by działać globalnie :)
Jeszcze tylko mała podpowiedź:
Jak w Delphi robiło się procedury reagujące na komunikaty (zapomniałem)?
Jeszcze tylko mała podpowiedź:
Jak w Delphi robiło się procedury reagujące na komunikaty (zapomniałem)? private procedure hotkey(var msg:tmessage); message wm_hotkey;ustawianie hotkey-a (przykład dla CTRL+F4, handle = Form1.Handle, 1 = nr hotkey-a; można dać ich więcej):RegisterHotKey(handle,1,MOD_CONTROL,VK_F4);
Użytkownik Cyrkiel edytował ten post 31 październik 2005, 11:02
Chyba źle wysyłam komunikaty:
if msg.WParam <> id then exit; uchwyt := GetForegroundWindow(); for i:=0 to 10 do begin SendMessage(uchwyt,WM_KEYDOWN,Ord('x'),0); SendMessage(uchwyt,WM_KEYUP,Ord('x'),0); end;
Uruchomiłem Notatnik wcisnąłem w nim Ctrl+F4 i nic się nie stało...
(rejestracja odbyła się bezproblemowo)
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Niestety nie wiem jak przechwicić klawiaturę z innego programu ,a co do symulacji to chyba funkcja SendInput jest niewystarczająca (nie można określić jej do ,którego okna ma "wysłać" klaisze).
przechwycenie klawiatury: hotkey
aktywne okno: GetForegroundWindow()
wysłanie "klawiatury" do okna: http://forum.ks-eksp...ndpost&p=411331 http://forum.ks-eksp...showtopic=52875
Użytkownik Cyrkiel edytował ten post 30 październik 2005, 21:24
przechwycenie klawiatury: hotkey(...)

hotkey ?!
Ustawiasz kombinację klawiszy (np. CTRL+F4), kiedy naciśniej kombinację, do Twojego programu (okna) zostaje wysłany komunikat WM_HOTKEY. Wtedy przechodzi do punktu 2 i 3 :P
A jak napisać tego HotKeya (pierwszy raz o tym czytam ,serio)?
A jak napisać tego HotKeya (pierwszy raz o tym czytam ,serio)?

Można jeszcze założyć hook'a na komunikaty klawiatury :)
A czy ten HotKey bedzie działał globalnie?
//Cyrkiel: Zamiast GetForegroundWindow() moze być GetFocus() ?
//Kikiz: Hooki obciążają system (program-adresat jest cokolwiek zasobożerny)
Zamiast GetForegroundWindow() moze być GetFocus() ? Nie może :P
Hotkey jest po to, by działać globalnie :)
Jeszcze tylko mała podpowiedź:
Jak w Delphi robiło się procedury reagujące na komunikaty (zapomniałem)?
Jeszcze tylko mała podpowiedź:
Jak w Delphi robiło się procedury reagujące na komunikaty (zapomniałem)? private procedure hotkey(var msg:tmessage); message wm_hotkey;ustawianie hotkey-a (przykład dla CTRL+F4, handle = Form1.Handle, 1 = nr hotkey-a; można dać ich więcej):RegisterHotKey(handle,1,MOD_CONTROL,VK_F4);
Użytkownik Cyrkiel edytował ten post 31 październik 2005, 11:02
Chyba źle wysyłam komunikaty:
if msg.WParam <> id then exit; uchwyt := GetForegroundWindow(); for i:=0 to 10 do begin SendMessage(uchwyt,WM_KEYDOWN,Ord('x'),0); SendMessage(uchwyt,WM_KEYUP,Ord('x'),0); end;
Uruchomiłem Notatnik wcisnąłem w nim Ctrl+F4 i nic się nie stało...
(rejestracja odbyła się bezproblemowo)