Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2013, 09:59   #1
Kazik
Форумчанин
 
Регистрация: 27.05.2009
Сообщений: 192
Сообщение Эмуляция клавиатуры

Доброго времени суток. Помогите разобраться с проблемой.
Есть код:
Код:
procedure TForm1.Timer2Timer(Sender: TObject);
var
    h:hwnd;
begin
    h:=FindWindow(nil, 'Заголовок окна');
    if h<>0 then
    begin
      PostMessage(h, WM_KEYDOWN, VK_F6, $00000001);
      sleep(100);
      PostMessage(h, WM_KEYUP, VK_F6, $C0000001);
      sleep(100);
      PostMessage(h, WM_KEYDOWN, VK_CONTROL, $00000001);
      sleep(100);
      PostMessage(h, WM_KEYDOWN, Ord('V'), $00000001);
      sleep(100);
      PostMessage(h, WM_KEYUP, Ord('V'), $C0000001);
      sleep(100);
      PostMessage(h, WM_KEYUP, VK_CONTROL, $C0000001);
      sleep(100);
      PostMessage(h, WM_KEYDOWN, VK_RETURN, $00000001);
      sleep(100);
      PostMessage(h, WM_KEYUP, VK_RETURN, $C0000001);
end;
Клавиша F6 передается правильно. Но дальше почему-то не срабатывает комбинация Ctrl+V. По сути ведь последовательность правильная - нажимаю Ctrl, нажимаю V, отжимаю V, отжимаюCtrl. Но в итоге в стороннее приложение передается только нажатие клавиши V.
Kazik вне форума Ответить с цитированием
Старый 26.11.2013, 11:51   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Delphi7 Help Windows SDK СПРАВКА по WM_KEYDOWN
Цитата:
WM_KEYDOWN
nVirtKey = (int) wParam; // virtual-key code
lKeyData = lParam; // key data


Parameters

nVirtKey

Value of wParam. Specifies the virtual-key code of the nonsystem key.

lKeyData

Value of lParam. Specifies the repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag, as shown in the following table:

Value Description
0-15 Specifies the repeat count. The value is the number of times the keystroke is repeated as a result of the user holding down the key.
16-23 Specifies the scan code. The value depends on the original equipment manufacturer (OEM).
24 Specifies whether the key is an extended key, such as the right-hand ALT and CTRL keys that appear on an enhanced 101- or 102-key keyboard. The value is 1 if it is an extended key; otherwise, it is 0.
25-28 Reserved; do not use.
29 Specifies the context code. The value is always 0 for a WM_KEYDOWN message.
30 Specifies the previous key state. The value is 1 if the key is down before the message is sent, or it is 0 if the key is up.
31 Specifies the transition state. The value is always 0 for a WM_KEYDOWN message.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 26.11.2013 в 11:55.
evg_m на форуме Ответить с цитированием
Старый 16.01.2014, 23:42   #3
tred
чайник
Пользователь
 
Аватар для tred
 
Регистрация: 24.06.2010
Сообщений: 44
По умолчанию

тебе надо не просто нажать 2 клавиши а создать горячие клавиши вродебы
Код:
procedure TForm1.WM_HotKeyHandler (var Message: TMessage);
  var
    idHotKey: integer; //идентификатор, но об этом - позже
    fuModifiers: word; //модификатор MOD_XX
    uVirtKey: word; //код виртуальной клавиши VK_XX
begin
  // параметры сообщения получаем так:
  idHotkey:= Message.wParam;
  fuModifiers:= LOWORD(Message.lParam);
  uVirtKey:= HIWORD(Message.lParam);

  //теперь - небольшая проверочка:
  if (fuModifiers = MOD_ALT) AND (uVirtKey = VK_F10) then
    caption:='Alt-F10 нажата';
  inherited;
end;
tred вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Эмуляция БД на С++ RioRina Помощь студентам 0 27.12.2011 02:06
Эмуляция JS kardinal94 Работа с сетью в Delphi 5 21.03.2011 09:29
Эмуляция нажатия мыши, клавиатуры xmur Помощь студентам 2 08.04.2009 17:45
принадлежит ли число, введённое с клавиатуры отрезку (а;в). Границы отрезка вводятся с клавиатуры Maria, Russia Помощь студентам 3 17.02.2009 22:01
Эмуляция клавиатуры, вопрос seti Общие вопросы C/C++ 0 22.10.2008 04:58