Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Send Ctrl+Key to a 3rd Party Application

Im using a 3rd Party Application that exports a file. The application uses a hot key (Ctrl + E) as a shortcut for this function.

How can I send this key combination from my Delphi XE application to the 3rd Party one?

like image 520
cmuller_za Avatar asked Feb 22 '23 04:02

cmuller_za


2 Answers

Here is an example which shows how to send Ctrl+E to the foreground application using 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;

I also use a slightly modified version of SendKeys.pas from Steve Seymour. It had some problems with different keyboard layouts and is from 1999. Couldn't find it anywhere in the net.

like image 54
Heinrich Ulbricht Avatar answered Feb 24 '23 22:02

Heinrich Ulbricht


See question: Send keys to a twebbrowser? There is an answer there (Matt Handel) that links to an article with an example of using the SendKeys unit, and obtaining the handle of the target window.

like image 34
Chris Thornton Avatar answered Feb 24 '23 23:02

Chris Thornton