有一个程序,不支持重定向输入输出,我想发送一个按键Q或Ctrl + C给对方,该如何做?
// By Kingron, 2011
首先运行子程序,然后通过AttachConsole,绑定子程序的控制台到本程序,然后通过WriteConsoleInput向子程序写入按键即可。
function AttachConsole(dwProcessId: DWORD): Boolean; stdcall external kernel32;
下面是示例代码
var
IR: INPUT_RECORD;
r : Cardinal;
h : THandle;
begin
// 运行子程序后,务必保存子程序的进程 ID
AttachConsole(子程序的.ProcessInfo.dwProcessId);
h := GetStdHandle(STD_INPUT_HANDLE);
// 发送Q按下事件
FillChar(IR, sizeof(IR), 0);
IR.EventType :=KEY_EVENT;
IR.Reserved :=0;
with IR.Event.KeyEvent do
begin
bKeyDown :=True;
wRepeatCount := 1;
wVirtualKeyCode := Ord('q');
wVirtualScanCode := MapVirtualKey(Ord('q'), 0);
AsciiChar :='q';
dwControlKeyState := 0;
end;
WriteConsoleInput(h, IR, 1, R);
sleep(10);
// 发送 Q 弹起事件,形成完整的一个Q的按键事件,对方接收后就会退出了
with IR.Event.KeyEvent do
begin
bKeyDown :=False;
wRepeatCount := 1;
wVirtualKeyCode := Ord('q');
wVirtualScanCode := MapVirtualKey(Ord('q'), 0);
AsciiChar :='q';
dwControlKeyState := 0;
end;
WriteConsoleInput(h, IR, 1, R);
end;