Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 什么';这是一种通过编程模拟用户输入的简单方法吗?_Delphi_Mouseevent_Keypress_Screensaver_Delphi 2006 - Fatal编程技术网

Delphi 什么';这是一种通过编程模拟用户输入的简单方法吗?

Delphi 什么';这是一种通过编程模拟用户输入的简单方法吗?,delphi,mouseevent,keypress,screensaver,delphi-2006,Delphi,Mouseevent,Keypress,Screensaver,Delphi 2006,我有一个对话框,作为错误条件的结果弹出。我希望对话框保持打开状态至少30秒,并在收到最后一次用户输入(鼠标或键盘)后关闭30秒 我可以通过检查GetLastInputInfo返回的值并在30秒前关闭对话框来实现这一点,但如果在用户30秒未使用鼠标或键盘时弹出对话框,GetLastInputInfo测试将立即通过,对话框将立即再次关闭。我可以用另一个计时器来完成这项工作,但我认为在对话框打开之前,模拟鼠标移动一点,或者发出一个(无害的)按键会简单得多。它还可能具有将系统从屏幕保护程序中踢出的优点

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

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


最简单的一行Delphi代码片段是什么?最简单的是使用函数(一行代码)

也可以使用该函数,但需要多行:)


使用keybd_事件输入多字节字符:

procedure InsertText(text:string);
var i:integer;
    j:integer;
    ch:byte;
    str:string;
begin
  i:=1;
  while i<=Length(text) do
  begin
    ch:=byte(text[i]);
    if Windows.IsDBCSLeadByte(ch) then
       begin
         Inc(i);
         str:=inttostr(MakeWord(byte(text[i]), ch));
         keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), 0, 0);
         j:=1;
         while j<=Length(str) do
         begin
               keybd_event(96+strtoint(str[j]), MapVirtualKey(96+strtoint(str[j]), 0), 0, 0);
               keybd_event(96+strtoint(str[j]), MapVirtualKey(96+strtoint(str[j]), 0), 2, 0);
               j:=j+1;
         end;
         keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), KEYEVENTF_KEYUP, 0);
       end
    else begin
           keybd_event(VkKeyScan(text[i]),0,0,0);
           keybd_event(VkKeyScan(text[i]),0,2,0);
         end;
    Inc(i);
  end;
end;
过程插入文本(文本:字符串);
varⅠ:整数;
j:整数;
ch:字节;
str:字符串;
开始
i:=1;

而我建议你应该坚持简单。使用计时器,显示倒计时,关闭对话框。不要弄乱鼠标-我有一个系统,从早上9点到下午5点显示,屏幕在几个小时后自动关闭。如果你“抖动”鼠标,你就打败了我的工具。为什么要为这么简单的任务干扰其他系统?(只是我的想法-可以随意拒绝!)
Var
  pInputs : TInput;
begin
    pInputs.Itype := INPUT_KEYBOARD;
    pInputs.ki.wVk := Ord('A');
    pInputs.ki.dwFlags := KEYEVENTF_KEYUP;
    SendInput(1, pInputs, SizeOf(pInputs));
end;
procedure InsertText(text:string);
var i:integer;
    j:integer;
    ch:byte;
    str:string;
begin
  i:=1;
  while i<=Length(text) do
  begin
    ch:=byte(text[i]);
    if Windows.IsDBCSLeadByte(ch) then
       begin
         Inc(i);
         str:=inttostr(MakeWord(byte(text[i]), ch));
         keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), 0, 0);
         j:=1;
         while j<=Length(str) do
         begin
               keybd_event(96+strtoint(str[j]), MapVirtualKey(96+strtoint(str[j]), 0), 0, 0);
               keybd_event(96+strtoint(str[j]), MapVirtualKey(96+strtoint(str[j]), 0), 2, 0);
               j:=j+1;
         end;
         keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), KEYEVENTF_KEYUP, 0);
       end
    else begin
           keybd_event(VkKeyScan(text[i]),0,0,0);
           keybd_event(VkKeyScan(text[i]),0,2,0);
         end;
    Inc(i);
  end;
end;