Dopiero co uporałem się z jedynym problemem odnośnie hook na klawisz ALT to teraz mam problem z symulowaniem klawisza od momentu zajścia zdarzenia OnKeyDown i wykonywania go aż do OnKeyUp.
Mam zapisaną w gridzie instrukcję w taki sposób:
Lp | Nazwa | Czekaj [ms]
1 | [BACKSPACE DOWN] | 0
2 | [BACKSPACE UP] | 1591
To znaczy: wykonuj pozycję numer 1 aż przez 1591 ms
Mam taką oto ciekawą funkcję w której sprawdzam powyższe ustawienie:
// dane podstawiłem specjalnie dla forum
while not dataset.eof do
begin
Action_SpecialKey: // Klawisze specjalne
begin
SendSpecialKey(dataset.fieldbyname('nazwa').value); // podstawiam nazwę pozycji
end;
dataset.next;
end;
no i magiczna procedurka, która niestety wykonuje się tylko raz:
procedure SendSpecialKey(Key: string);
begin
if Key = '[ENTER DOWN]' then
keybd_event(Ord(VK_RETURN),0,0,0);
if Key = '[ENTER UP]' then
keybd_event(Ord(VK_RETURN),0,KEYEVENTF_KEYUP,0);
if Key = '[BACKSPACE DOWN]' then
keybd_event(Ord(VK_BACK),0,0,0);
if Key = '[BACKSPACE UP]' then
keybd_event(Ord(VK_BACK),0,KEYEVENTF_KEYUP,0);
if Key = '[ESC DOWN]' then
keybd_event(Ord(VK_ESCAPE),0,0,0);
if Key = '[ESC UP]' then
keybd_event(Ord(VK_ESCAPE),0,KEYEVENTF_KEYUP,0);
if Key = '[TAB DOWN]' then
keybd_event(Ord(VK_TAB),0,0,0);
if Key = '[TAB UP]' then
keybd_event(Ord(VK_TAB),0,KEYEVENTF_KEYUP,0);
end;
Nie wiem czy dobrze kombinuję, ale wydaje mi się, że powinienem wykonać procedurę SendSpecialKey w pętli WHILE korzystając wewnątrz z funkcji GetTickCount i sprawdzać:
wynik := 0;
start := GetTickCount;
while wynik < 1591 do
begin
stop := GetTickCount;
wynik := stop - start;
/// instrukcje wciskania klawiszy
end;
Dobrze kombinuję?