Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Эмуляция нажатия клавиш 2

Delphi , ОС и Железо , Клавиши

Эмуляция нажатия клавиш 2


 

  Два программера в дупель пьяные из кабака выходят, один дpугому говоpит:
- Hу что, включай автопилот.
- А у меня его нету.
- Hу тогда включай эмулятоp автопилота.

 

Есть ли в Delphi эквивалент функции SendKeys Visual Basic'а?

Ниже приведена процедура, позволяющаю отправлять нажатия в любой элемент управления (window control), способный принимать ввод с клавиатуры. Вы можете использовать эту технику чтобы включать клавиши NumLock, CapsLock и ScrollLock под Windows NT. Та же техника работает и под Windows 95 для CapsLock и ScrollLock, но не работает для клавиши NumLock. Обратите внимание, что приведены четыре поцедуры:

SimulateKeyDown() - эмулировать нажатие клавиши (без отпускания)
SimulateKeyUp() - эмулировать отпускание клавиши
SimulateKeystroke() - эмулировать удар по клавише (нажатие и отпускание) и
SendKeys(), позволяющие Вам гибко контролировать посылаемые сообщения клавиатуры.

SimulateKeyDown(), SimulateKeyUp() и SimulateKeystroke() получают коды виртуальных клавиш (virtural key) (вроде VK_F1). Процедура SimulateKeystroke() получает дополнительный параметр, полезный при эмуляции нажатия PrintScreen. Когда этот параметр равен нулю весь экран будет скопирован в буфер обмена (clipboard). Если дополнительный параметр равен 1 будет скопированно только активное окно.

Четыре метода "button click" демонстрируют использование:

ButtonClick1 - включает capslock
ButtonClick2 - перехватывает весь экран в буфер обмена (clipboard).
ButtonClick3 - перехватывает активное окно в буфер обмена (clipboard).
ButtonClick4 - устанавливает фокус в Edit и отправляет в него строку.

Пример:


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;

Статья Эмуляция нажатия клавиш 2 раздела ОС и Железо Клавиши может быть полезна для разработчиков на Delphi и FreePascal.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Клавиши ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100
18.04.2024 03:34:45/0.061990976333618/2