用 win32 API 模拟按键

最近要对一个 Windows 程序写 UI 测试,才发现写 UI 测试是多么的麻烦。发消息倒可以用 PostMessage ,但模拟按键就另当别论了,用 PostMessage 根本不起作用。

 

后来找到了这篇文章:You can't simulate keyboard input with PostMessage:http://blogs.msdn.com/b/oldnewthing/archive/2005/05/30/423202.aspx 。得出的结论是使用 SendInput() 函数。

 

下面是我的代码:

 

// 两个宏,用于初始化和发送按键 #define SENDKEY(key) {(key).ki.time = ::GetTickCount();SendInput(1, &(key), sizeof(INPUT));Sleep(100);} #define INITKEY(key, v) {ZeroMemory(&(key), sizeof(INPUT));(key).type = INPUT_KEYBOARD;(key).ki.wVk = v;} // 然后是样例代码 INPUT altKey, spKey, rightKey, upKey, enterKey; INITKEY(altKey, VK_MENU); INITKEY(spKey, VK_SPACE); INITKEY(rightKey, VK_RIGHT); INITKEY(upKey, VK_UP); INITKEY(enterKey, VK_RETURN); SENDKEY(altKey); SENDKEY(enterKey);

 

PS. 又想起 AutoHotKey 里的 SendInput ,原来这名字是这么来的!

你可能感兴趣的:(用 win32 API 模拟按键)