什么是以编程方式模拟用户输入的简单方法?

ros*_*mcm 4 delphi keypress screensaver delphi-2006 mouseevent

我有一个由于错误条件而弹出的对话框.我希望对话框保持打开状态至少30秒,并在收到最后一个用户输入(鼠标或键盘)后关闭30秒.

我可以通过检查GetLastInputInfo返回的值并在超过30秒之前关闭对话框来实现这一点,但是如果当用户没有使用鼠标或键盘30秒时弹出对话框,则GetLastInputInfo测试通过立即,对话框立即再次关闭.我可以用另一个计时器做到这一点,但我认为在对话框打开之前模拟鼠标移动或者发出一个(无害的)按键要简单得多.它也可能具有将系统从屏幕保护程序中踢出的优点.

什么是最简单的1行Delphi代码片段来实现这一目标?

RRU*_*RUZ 6

最简单的是使用keybd_event函数(一行代码)

keybd_event(Ord('A'), 0, 0, 0);
Run Code Online (Sandbox Code Playgroud)

您也可以使用该SendInput功能,但需要多行:)

Var
  pInputs : TInput;
begin
    pInputs.Itype := INPUT_KEYBOARD;
    pInputs.ki.wVk := Ord('A');
    pInputs.ki.dwFlags := KEYEVENTF_KEYUP;
    SendInput(1, pInputs, SizeOf(pInputs));
end;
Run Code Online (Sandbox Code Playgroud)