| 
| 
 | Вопрос # 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 PostMessageend;  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
 
 |  
 Мини-форум вопросаМини-форум пуст. Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |