Witam. Mam problem z procedurą. Proszę o pomoc.
Wygląda ona tak:
var
KeybState: array [0..1] of TKeyboardState;
Key1, Key2: Word;
lParam: Longint;
FAppThreadID : Cardinal;
Value : DWORD;
begin
hook;
FAppThreadID := GetWindowThreadProcessId(H, nil);
AttachThreadInput(GetCurrentThreadId, FAppThreadID, True);
FillChar(KeybState[0], SizeOf(TKeyboardState), 0); //wyzerowac pamiec
GetKeyboardState(KeybState[1]); //zapamietac stary stan klawiatury
KeybState[0][VK_CONTROL]:= $80; // CTRL
begin
Key1:= VK_DOWN;
Key2:= VK_UP;
SetKeyboardState(KeybState[0]); //wcisniety CTRL
lParam:= MakeLong(500, MapVirtualKey(Key1, 500));
SendMessage(H, WM_KEYDOWN, Key1, lParam); //wyslanie klawisza
SendMessage(H, WM_KEYUP, Key1, lParam);
sleep(100);
SendMessage(H, WM_KEYDOWN, Key2, lParam); //wyslanie klawisza
SendMessage(H, WM_KEYUP, Key2, lParam);
sleep(200);
Application.ProcessMessages; //WAŻNE program musi przetworzyc kolejkę a jak do innej apki to można dac troche czasu (np Sleep(200));
SetKeyboardState(KeybState[1]); //przywrócenie starego stanu klawiatury
end
Chodzi o to, że bardzo często po prostu ona nie działa. Idzie ją jakoś poprawić by działała jak należy? Dzięki.