Отправить Ctrl+Key в стороннее приложение

Я использую стороннее приложение, которое экспортирует файл. Приложение использует горячую клавишу (Ctrl + E) в качестве ярлыка для этой функции.

Как я могу отправить эту комбинацию клавиш из моего приложения Delphi XE в стороннее приложение?


person cmuller_za    schedule 08.12.2011    source источник
comment
Вы говорите о WinAPI здесь? Соответствующий тег был бы хорош.   -  person Kromster    schedule 08.12.2011


Ответы (2)


Вот пример, который показывает, как отправить Ctrl+E приложению переднего плана, используя SendInput:

var
  Inputs: array [0..3] of TInput;
begin
  // press
  Inputs[0].Itype := INPUT_KEYBOARD;
  Inputs[0].ki.wVk := VK_CONTROL;
  Inputs[0].ki.dwFlags := 0;

  Inputs[1].Itype := INPUT_KEYBOARD;
  Inputs[1].ki.wVk := Ord('E');
  Inputs[1].ki.dwFlags := 0;

  // release
  Inputs[2].Itype := INPUT_KEYBOARD;
  Inputs[2].ki.wVk := Ord('E');
  Inputs[2].ki.dwFlags := KEYEVENTF_KEYUP;

  Inputs[3].Itype := INPUT_KEYBOARD;
  Inputs[3].ki.wVk := VK_CONTROL;
  Inputs[3].ki.dwFlags := KEYEVENTF_KEYUP;

  SendInput(Length(Inputs), Inputs[0], SizeOf(TInput));
end;

Я также использую слегка модифицированную версию SendKeys.pas от Стива Сеймура. У него были проблемы с разными раскладками клавиатуры, он 1999 года выпуска. В сети не нашел.

person Heinrich Ulbricht    schedule 08.12.2011
comment
Потрясающий! Большое Вам спасибо. Это решило мою проблему за пару секунд. ;) - person cmuller_za; 09.12.2011

См. вопрос: Отправить ключи в twebbrowser? Там есть ответ (Мэтт Хэндел) который ссылается на статью с примером использования модуля SendKeys и получением дескриптора целевого окна.

person Chris Thornton    schedule 08.12.2011