|
Вопрос # 1 420/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Как симулировать нажатие кнопки Enter, и стрелочки вверх?? именно эти кнопки по отельности,огромное спасибо.
 |
Вопрос задал: KilkaMS (статус: Посетитель)
Вопрос отправлен: 16 марта 2008, 02:20
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: Николай Рубан
Здравствуйте, KilkaMS!
Эмуляция нажатия клавиши Enter:
keybd_event(VK_RETURN,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
keybd_event(VK_RETURN,0,KEYEVENTF_EXTENDEDKEY,0);
keybd_event(VK_RETURN,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
Клавиши вверх:
keybd_event(VK_UP,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
keybd_event(VK_UP,0,KEYEVENTF_EXTENDEDKEY,0);
keybd_event(VK_UP,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
Думаю этих строк вполне достаточно, конечно желательно написать свою процедуру, например такую:
procedure Vkey(key:byte);
keybd_event(key,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
keybd_event(key,0,KEYEVENTF_EXTENDEDKEY,0);
keybd_event(key,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
end;
Пример вызова:
Vkey(VK_UP);
Good Luck!!!
 |
Ответ отправил: Николай Рубан (статус: 10-ый класс)
Время отправки: 16 марта 2008, 02:53
|
Ответ #2. Отвечает эксперт: Drozdov D.V.
Здравствуйте, KilkaMS!
Вот вам ещё примерчики. Для различных ситуаций.
Приложение: Переключить в обычный режим-
-
- procedure EmulateKey(Wnd: HWND; VKey: Integer);
- asm
- push 0
- push edx
- push 0101H //WM_KEYUP
- push eax
- push 0
- push edx
- push 0100H //WM_KEYDOWN
- push eax
- call PostMessage
- call PostMessage
- end;
-
-
- EmulateKey(Edit1.Handle, VK_RETURN);
-
-
- procedure PressKey(VKey: Byte);
- begin
- keybd_event(VKey, 0, 0, 0);
- keybd_event(VKey, 0, KEYEVENTF_KEYUP, 0);
- end;
-
-
- procedure TfmAbProps.edNameKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- begin
- if (Key = vk_down) and
- not (ssAlt in Shift)
-
- begin
- Key := 0;
- SelectNext(Sender as TWinControl, true, true);
- end
- else if Key = vk_up then
- begin
- Key := 0;
- SelectNext(Sender as TWinControl, false, true);
- end;
- end;
-
-
-
- OnKeyDown:=edNameKeyDown
-
-
-
-
-
-
-
-
-
- procedure SimulateKeyDown(Key : byte);
- begin
- keybd_event(Key, 0, 0, 0);
- end;
-
- procedure SimulateKeyUp(Key : byte);
- begin
- keybd_event(Key, 0, KEYEVENTF_KEYUP, 0);
- end;
-
- procedure SimulateKeystroke(Key : byte; extra : DWORD);
- begin
- keybd_event(Key,extra,0,0);
- keybd_event(Key,extra,KEYEVENTF_KEYUP,0);
- end;
-
- procedure SendKeys(s : string);
- var
- i : integer;
- flag : bool;
- w : word;
- begin
- {Get the state of the caps lock key}
- flag := not GetKeyState(VK_CAPITAL) and 1 = 0;
- {If the caps lock key is on then turn it off}
- if flag then
- SimulateKeystroke(VK_CAPITAL, 0);
- for i := 1 to Length(s) do
- begin
- w := VkKeyScan(s[i]);
- {If there is not an error in the key translation}
- if ((HiByte(w) <> $FF) and (LoByte(w) <> $FF)) then
- begin
- {If the key requires the shift key down - hold it down}
- if HiByte(w) and 1 = 1 then
- SimulateKeyDown(VK_SHIFT);
- {Send the VK_KEY}
- SimulateKeystroke(LoByte(w), 0);
- {If the key required the shift key down - release it}
- if HiByte(w) and 1 = 1 then
- SimulateKeyUp(VK_SHIFT);
- end;
- end;
- {if the caps lock key was on at start, turn it back on}
- if flag then
- SimulateKeystroke(VK_CAPITAL, 0);
- end;
-
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- {Toggle the cap lock}
- SimulateKeystroke(VK_CAPITAL, 0);
- end;
-
- procedure TForm1.Button2Click(Sender: TObject);
- begin
- {Capture the entire screen to the clipboard}
- {by simulating pressing the PrintScreen key}
- SimulateKeystroke(VK_SNAPSHOT, 0);
- end;
-
- procedure TForm1.Button3Click(Sender: TObject);
- begin
- {Capture the active window to the clipboard}
- {by simulating pressing the PrintScreen key}
- SimulateKeystroke(VK_SNAPSHOT, 1);
- end;
-
- procedure TForm1.Button4Click(Sender: TObject);
- begin
- {Set the focus to a window (edit control) and send it a string}
- Application.ProcessMessages;
- Edit1.SetFocus;
- SendKeys('Delphi Is RAD!');
- end;
-
 |
Ответ отправил: Drozdov D.V. (статус: 4-ый класс)
Время отправки: 16 марта 2008, 11:13
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|