使用WinAPI在Delphi中模拟键盘输入

时间:2012-10-18 09:04:06

标签: delphi winapi delphi-2009

我需要以编程方式将一个字符输入Delphi网格的单元格(在其他应用程序中)。

要手动执行此操作,需要执行以下步骤:

  1. 按F3按钮。
  2. 按右箭头键3次。
  3. 按空格键。
  4. 键盘上输入字母'E'。
  5. 按右箭头键。

     // Press F3 button         
     keybd_event(VK_F3, 0, 0, 0);         
     // Press right arrow key 3 times
     keybd_event(VK_RIGHT, 0, 0, 0);
     keybd_event(VK_RIGHT, 0, 0, 0);
     keybd_event(VK_RIGHT, 0, 0, 0);
    
     // Press the space button
     keybd_event(VK_SPACE, 0, 0, 0);
    
     // Type letter E
     keybd_event(Ord('E'), 0, 0, 0);
    
     // Move to the right
     keybd_event(VK_RIGHT, 0, 0, 0);
    
  6. 但它不起作用。当我运行此代码时,似乎没有任何事情发生。

    我应该如何修改此代码,以便它实际模拟用户输入?

1 个答案:

答案 0 :(得分:13)

每次按键都是按键,然后是按键。因此,每按一次键,您需要拨打keybd_event两次电话。例如,按F3:

keybd_event(VK_F3, 0, KEYEVENTF_KEYDOWN, 0);
keybd_event(VK_F3, 0, KEYEVENTF_KEYUP, 0);

请注意,KEYEVENTF_KEYDOWN实际上并不是由Windows头文件或Delphi转换定义的。将其定义为0。它使代码更清晰明确地写出来。

当然,您不会通过与keybd_event的配对调用来破坏您的代码。但相反,你会将配对的调用包装成一个辅助函数。

在某些情况下,您可能需要指定第二个参数,即扫描代码。但通常没有必要。