Отправить Ctrl+Key в стороннее приложение
Я использую Стороннее приложение, которое экспортирует файл. Приложение использует горячую клавишу (Ctrl + E) в качестве ярлыка для этой функции.
Как я могу отправить эту комбинацию клавиш из моего приложения Delphi XE стороннему приложению?
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 года. Не удалось найти его нигде в сети.
Смотрите вопрос: отправлять ключи на твиброузер? Там есть ответ (Matt Handel), который ссылается на статью с примером использования модуля SendKeys и получения дескриптора целевого окна.