Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 420

/ вопрос открыт /

Приветствую, уважаемые эксперты!
Как симулировать нажатие кнопки Enter, и стрелочки вверх?? именно эти кнопки по отельности,огромное спасибо.

KilkaMS Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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!
Вот вам ещё примерчики. Для различных ситуаций.

Приложение:
  1.  
  2.  
  3. procedure EmulateKey(Wnd: HWND; VKey: Integer);
  4. asm
  5. push 0
  6. push edx
  7. push 0101H //WM_KEYUP
  8. push eax
  9. push 0
  10. push edx
  11. push 0100H //WM_KEYDOWN
  12. push eax
  13. call PostMessage
  14. call PostMessage
  15. end;
  16.  
  17.  
  18. EmulateKey(Edit1.Handle, VK_RETURN);
  19.  
  20.  
  21. procedure PressKey(VKey: Byte);
  22. begin
  23. keybd_event(VKey, 0, 0, 0);
  24. keybd_event(VKey, 0, KEYEVENTF_KEYUP, 0);
  25. end;
  26.  
  27.  
  28. procedure TfmAbProps.edNameKeyDown(Sender: TObject; var Key: Word;
  29. Shift: TShiftState);
  30. begin
  31. if (Key = vk_down) and
  32. not (ssAlt in Shift)
  33.  
  34. begin
  35. Key := 0;
  36. SelectNext(Sender as TWinControl, true, true);
  37. end
  38. else if Key = vk_up then
  39. begin
  40. Key := 0;
  41. SelectNext(Sender as TWinControl, false, true);
  42. end;
  43. end;
  44.  
  45.  
  46.  
  47. OnKeyDown:=edNameKeyDown
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57. procedure SimulateKeyDown(Key : byte);
  58. begin
  59. keybd_event(Key, 0, 0, 0);
  60. end;
  61.  
  62. procedure SimulateKeyUp(Key : byte);
  63. begin
  64. keybd_event(Key, 0, KEYEVENTF_KEYUP, 0);
  65. end;
  66.  
  67. procedure SimulateKeystroke(Key : byte; extra : DWORD);
  68. begin
  69. keybd_event(Key,extra,0,0);
  70. keybd_event(Key,extra,KEYEVENTF_KEYUP,0);
  71. end;
  72.  
  73. procedure SendKeys(s : string);
  74. var
  75. i : integer;
  76. flag : bool;
  77. w : word;
  78. begin
  79. {Get the state of the caps lock key}
  80. flag := not GetKeyState(VK_CAPITAL) and 1 = 0;
  81. {If the caps lock key is on then turn it off}
  82. if flag then
  83. SimulateKeystroke(VK_CAPITAL, 0);
  84. for i := 1 to Length(s) do
  85. begin
  86. w := VkKeyScan(s[i]);
  87. {If there is not an error in the key translation}
  88. if ((HiByte(w) <> $FF) and (LoByte(w) <> $FF)) then
  89. begin
  90. {If the key requires the shift key down - hold it down}
  91. if HiByte(w) and 1 = 1 then
  92. SimulateKeyDown(VK_SHIFT);
  93. {Send the VK_KEY}
  94. SimulateKeystroke(LoByte(w), 0);
  95. {If the key required the shift key down - release it}
  96. if HiByte(w) and 1 = 1 then
  97. SimulateKeyUp(VK_SHIFT);
  98. end;
  99. end;
  100. {if the caps lock key was on at start, turn it back on}
  101. if flag then
  102. SimulateKeystroke(VK_CAPITAL, 0);
  103. end;
  104.  
  105. procedure TForm1.Button1Click(Sender: TObject);
  106. begin
  107. {Toggle the cap lock}
  108. SimulateKeystroke(VK_CAPITAL, 0);
  109. end;
  110.  
  111. procedure TForm1.Button2Click(Sender: TObject);
  112. begin
  113. {Capture the entire screen to the clipboard}
  114. {by simulating pressing the PrintScreen key}
  115. SimulateKeystroke(VK_SNAPSHOT, 0);
  116. end;
  117.  
  118. procedure TForm1.Button3Click(Sender: TObject);
  119. begin
  120. {Capture the active window to the clipboard}
  121. {by simulating pressing the PrintScreen key}
  122. SimulateKeystroke(VK_SNAPSHOT, 1);
  123. end;
  124.  
  125. procedure TForm1.Button4Click(Sender: TObject);
  126. begin
  127. {Set the focus to a window (edit control) and send it a string}
  128. Application.ProcessMessages;
  129. Edit1.SetFocus;
  130. SendKeys('Delphi Is RAD!');
  131. end;
  132.  


Ответ отправил: Drozdov D.V. (статус: 4-ый класс)
Время отправки: 16 марта 2008, 11:13


Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:43
Выполнено за 0.02 сек.