10

我需要以编程方式将一个字符输入到 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);
    

但它不起作用。当我运行这段代码时,似乎什么都没有发生。

我应该如何修改此代码以使其真正模拟用户输入?

4

1 回答 1

16

每次按键都是一个按键向下然后一个按键向上。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。但相反,您会将配对调用包装到一个辅助函数中。

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

于 2012-10-18T09:10:54.927 回答