如何在不使用键盘的情况下按下键盘上的按键?

问题描述:

我希望我的程序按下键盘上的某些按键,而无需进行物理上的操作。如何在不使用键盘的情况下按下键盘上的按键?

我该怎么做?

编辑:找到了这个keybd_event()函数。似乎工作 http://www.codeproject.com/KB/cpp/sendkeys_cpp_Article.aspx

发送Key Events

+0

没有找到C++代码出现,但给了我很好的关键字为谷歌 – Newbie 2010-04-17 20:38:32

使用SendMessageWM_KEYDOWN

例子:

SendMessage(hwnd, WM_KEYDOWN, VK_T, NULL); 
+0

我想这只有我自己的应用程序窗口内? – Newbie 2010-04-17 20:38:10

+0

@Newbie:不,你可以发送消息到你的Windows会话中的任何窗口 – 2010-04-17 22:32:02

+0

是的,但要做到这一点,我将不得不单独选择聚焦的窗口,还是有一些简单的方法来选择当前聚焦的窗口? – Newbie 2010-04-17 23:19:28

SendInput功能,可以生成击键和其他类型的输入。我曾经创建类似于虚拟键盘的应用程序。

示例使用Unicode:

// This may be needed 
// #define _WIN32_WINNT 0x0501 

#include <windows.h> 
#include <winuser.h> 

void pressKey(WORD a_unicode)  
{  
     KEYBDINPUT kbinput; 
     ZeroMemory(&kbinput, sizeof(kbinput)); 
     kbinput.wScan = a_unicode; 
     kbinput.dwFlags = KEYEVENTF_UNICODE; 
     kbinput.time = 0; 

     INPUT input; 
     ZeroMemory(&input, sizeof(input)); 
     input.type = INPUT_KEYBOARD; 
     input.ki = kbinput; 

     SendInput(1, &input, sizeof(input)); 
} 
+0

似乎没有工作,至少不是VK_TAB等。 – Newbie 2010-04-17 20:37:42

+2

正确的做法,错误的代码。它应该分配vVk成员。并且也生成KEYUP事件。 – 2010-04-17 21:46:03

+0

是的。也许有点误导性的例子。这种和平来自编写国际字符的代码,如日文汉字等。这就是为什么它使用扫描代码而不是虚拟键。对于标签等需要vVk和KEYUP。 – Virne 2010-05-13 21:14:39