Komunikaty - Ctr+A dla Okna O dowolnym Handl'e

0

Witam
Mam Następujący problem , chce przesłać do Okna o dowolnym Handl'e Kombinacje Klawiszy Ctr+C Ctr+A :)
do przesyłki zwykłego "textu " zakończonego Enter'em używam

Procedure SetText(WindowHandle: hwnd;Text:String);
begin
 SendMessage (WindowHandle,wm_settext, 0, longint(@Text[1]));

PostMessage(WindowHandle, WM_KeyDown, Windows.VK_RETURN , $00020001);
PostMessage(WindowHandle, WM_KeyUp, Windows.VK_RETURN, $C0020001);
 end;

var 
H:THandle:

Do przesyłania pojedyńczych klawiszy:

PostMessage(H, WM_KeyDown, Integer('A'), $00020001);
PostMessage(H, WM_KeyUP, Integer('A'), $00020001);

i wszystko działa , Ale potrzebuje obsługi Kombinacji klawiszy np (Ctr+A) (Ctrl+V)

a sztuczka z "przytrzymaniem Klawisza" Ctrl i wciśnięciem A nie zadzała:

PostMessage(H, WM_KeyDown, VK_CONTROL, $00020001);
PostMessage(H, WM_KeyDown, Integer('A'), $00020001);
PostMessage(H, WM_KeyUP, Integer('A'), $00020001);
PostMessage(H, WM_KeyUP, VK_CONTROL, $00020001);

Tymczasowo rozwiązalem problem tak :

Windows.SetFocus(H);
keybd_event(VK_CONTROL ,0,0,0);
PostMessage(H, WM_KeyDown, 65 , $00020001);
PostMessage(H, WM_KeyUP, 65 , $00020001);
keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0) ;

Jednak Jest to "Wciśnięcie Klawisza" klawiatury i przez to "Wciśnięcie" blokuje Klawisz Ctrl Na chwilę "Wciśnięcia".

A więc jak wysłać Kombinację Ctr+A (lub np Ctr+U :) ) do dowolnego okna o podanym Handle ?
(nie mogę oprogramować odbioru Własnego Message'a ) po stronie okienka
odbierającego komunikat , bo jak mówiłem kontrolka ma być dowolna (np. dowolny edit w systemie).

0
Windows.SetFocus(Edit1.Handle);
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event(ord('A'), 0, 0, 0);
keybd_event(ord('A'), 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);

System Windows nie umożliwia przesyłania z wejścia (klawiatura, mysz) do nieaktywnego okna, trzeba je na chwilę uaktywnić.

0
Szczawik napisał(a)
Windows.SetFocus(Edit1.Handle);
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event(ord('A'), 0, 0, 0);
keybd_event(ord('A'), 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);

System Windows nie umożliwia przesyłania z wejścia (klawiatura, mysz) do nieaktywnego okna, trzeba je na chwilę uaktywnić.

To jest dokładnie to Moje powyżej (no prawie bo mam post message żeby ominąc keybd event tan gdzie sie da ) - tylko zamiast ord('a') mam Od razu cyfre :)) - i to dzała ale blokuje Klawisz ctr Na chwilkę Bo jest Keybd_event
(Zamiast Edit1.Handle jest H) ale mniejsza o to - szukam właśnie innego sposobu ;-P
bez "wciskania" Klawisza Keybrd eventem.
(prawdopodobnie coś sie dzieje z buforem klawiatury bo pisząc w innym oknie "z klawiatury" przy jednoczesnym dzałaniu keybdEvent w powyższym kodzie dostaje '?' zamiast '_'. i = zamiast ;
(ogólnie znaki z zuzyciem shift i ctr pomieszane)
Natomiast Przy PostMessage takich "warjacji" nie ma .

Plusem PostMessage jest to , że mogę wysłać text czy znak bez ustawienia focus'a
a więc bez przełączania aktywności między oknami , niestety nie wiem jak zrobić take właśnie PostMsg dla 2 znaków jednoczesnie tak aby wyszła owa kombinacja [glowa]

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