模拟鼠标产生鼠标事件、键盘事件有时候非常有用,比如在自动化测试中。源程序在:http://download.youkuaiyun.com/detail/dijkstar/4035890
关键程序:
比如一个应用:自动关闭弹出的Messagox对话框(http://blog.youkuaiyun.com/dijkstar/article/details/8761481)(2013-04-05编辑)
void CSimulateMouseView::OnLdbclick()
{
//将鼠标的位置放在窗口的标题条上
POINT lpPoint;
CRect rc;
CWnd* pParent = AfxGetApp()->GetMainWnd();
pParent->GetWindowRect(&rc);
lpPoint.x = rc.left+50;
lpPoint.y = rc.top+10;
SetCursorPos(lpPoint.x, lpPoint.y);
//双击该标题条
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
}
void CSimulateMouseView::OnLclick()
{
//将鼠标的位置放在窗口的关闭按钮上
POINT lpPoint;
CRect rc;
CWnd* pParent = AfxGetApp()->GetMainWnd();
pParent->GetWindowRect(&rc);
lpPoint.x = rc.right-5;
lpPoint.y = rc.top +5;
SetCursorPos(lpPoint.x, lpPoint.y);
//单击
mouse_event(MOUSEEVENTF_LEFTDOWN |MOUSEEVENTF_ABSOLUTE,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP|MOUSEEVENTF_ABSOLUTE,0,0,0,0);
}
BOOL CSimulateMouseView::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if (pMsg->message==WM_KEYDOWN && pMsg->wParam==0x41)
{
::MessageBox(NULL, "A 键按下", "提示", MB_ICONQUESTION);
return FALSE; //不翻译消息,直接将消息传递下去。具体可查MSDN。
}
if (pMsg->message==WM_KEYUP && pMsg->wParam==0x41)
{
::MessageBox(NULL, "A 键提起", "提示", MB_ICONQUESTION);
return FALSE; //不翻译消息,直接将消息传递下去。具体可查MSDN。
}
return CFormView::PreTranslateMessage(pMsg);
}
//模拟键盘事件
void CSimulateMouseView::OnLclick2()
{
//【A】键按下
keybd_event(0x41, 0, 0, 0);
//【A】键抬起
keybd_event(0x41, 0, KEYEVENTF_KEYUP, 0);
}
顺便把虚拟键值表列出:
Virtual-Key Codes
The following table shows the symbolic constant names, hexadecimal values, and mouse or keyboard equivalents for the virtual-key codes used by the system. The codes are listed in numeric order.
| Symbolic constant name | Value (hexadecimal) | Mouse or keyboard equivalent |
|---|---|---|
| VK_LBUTTON | 01 | Left mouse button |
| VK_RBUTTON | 02 | Right mouse button |
| VK_CANCEL | 03 | Control-break processing |
| VK_MBUTTON | 04 | Middle mouse button (three-button mouse) |
| VK_XBUTTON1 | 05 | Windows 2000/XP: X1 mouse button |
| VK_XBUTTON2 | 06 | Windows 2000/XP: X2 mouse button |
| — | 07 | Undefined |
| VK_BACK | 08 | BACKSPACE key |
| VK_TAB | 09 | TAB key |
| — | 0A–0B | Reserved |
| VK_CLEAR | 0C | CLEAR key |
| VK_RETURN | 0D | ENTER key |
| — | 0E–0F | Undefined |
| VK_SHIFT | 10 | SHIFT key |
| VK_CONTROL | 11 | CTRL key |
| VK_MENU | 12 | ALT key |
| VK_PAUSE | 13 | PAUSE key |
| VK_CAPITAL | 14 | CAPS LOCK key |
| VK_KANA | 15 | IME Kana mode |
| VK_HANGUEL | 15 | IME Hanguel mode (maintained for compatibility; use VK_HANGUL) |
| VK_HANGUL | 15 | IME Hangul mode |
| — | 16 | Undefined |
| VK_JUNJA | 17 | IME Junja mode |
| VK_FINAL | 18 | IME final mode |
| VK_HANJA | 19 | IME Hanja mode |
| VK_KANJI | 19 | IME Kanji mode |
| — | 1A | Undefined |
| VK_ESCAPE | 1B | ESC key |
| VK_CONVERT | 1C | IME convert |
| VK_NONCONVERT | 1D | IME nonconvert |
| VK_ACCEPT | 1E | IME accept |
| VK_MODECHANGE | 1F | IME mode change request |
| VK_SPACE | 20 | SPACEBAR |
| VK_PRIOR | 21 | PAGE UP key |
| VK_NEXT | 22 | PAGE DOWN key |
| VK_END | 23 | END key |
| VK_HOME | 24 | HOME key |
| VK_LEFT | 25 | LEFT ARROW key |
| VK_UP | 26 | UP ARROW key |
| VK_RIGHT | 27 | RIGHT ARROW key |
| VK_DOWN | 28 | DOWN ARROW key |
| VK_SELECT | 29 | SELECT key |
| VK_PRINT | 2A | PRINT key |
| VK_EXECUTE | 2B | EXECUTE key |
| VK_SNAPSHOT | 2C | PRINT SCREEN key |
| VK_INSERT | 2D | INS key |
| VK_DELETE | 2E | DEL key |
| VK_HELP | 2F | HELP key |
| 30 | 0 key | |
| 31 | 1 key | |
| 32 | 2 key | |
| 33 | 3 key | |
| 34 | 4 key | |
| 35 | 5 key | |
| 36 | 6 key | |
| 37 | 7 key | |
| 38 | 8 key | |
| 39 | 9 key | |
| — | 3A–40 | Undefined |
| 41 | A key | |
| 42 | B key | |
| 43 | C key | |
| 44 | D key | |
| 45 | E key | |
| 46 | F key | |
| 47 | G key | |
| 48 | H key | |
| 49 | I key | |
| 4A | J key | |
| 4B | K key | |
| 4C | L key | |
| 4D | M key | |
| 4E | N key | |
| 4F | O key | |
| 50 | P key | |
| 51 | Q key | |
| 52 | R key | |
| 53 | S key | |
| 54 | T key | |
| 55 | U key | |
| 56 | V key | |
| 57 | W key | |
| 58 | X key | |
| 59 | Y key | |
| 5A | Z key | |
| VK_LWIN | 5B | Left Windows key (Microsoft® Natural® keyboard) |
| VK_RWIN | 5C | Right Windows key (Natural keyboard) |
| VK_APPS | 5D | Applications key (Natural keyboard) |
| — | 5E | Reserved |
| VK_SLEEP | 5F | Computer Sleep key |
| VK_NUMPAD0 | 60 | Numeric keypad 0 key |
| VK_NUMPAD1 | 61 | Numeric keypad 1 key |
| VK_NUMPAD2 | 62 | Numeric keypad 2 key |
| VK_NUMPAD3 | 63 | Numeric keypad 3 key |
| VK_NUMPAD4 | 64 | Numeric keypad 4 key |
| VK_NUMPAD5 | 65 | Numeric keypad 5 key |
| VK_NUMPAD6 | 66 | Numeric keypad 6 key |
| VK_NUMPAD7 | 67 | Numeric keypad 7 key |
| VK_NUMPAD8 | 68 | Numeric keypad 8 key |
| VK_NUMPAD9 | 69 | Numeric keypad 9 key |
| VK_MULTIPLY | 6A | Multiply key |
| VK_ADD | 6B | Add key |
| VK_SEPARATOR | 6C | Separator key |
| VK_SUBTRACT | 6D | Subtract key |
| VK_DECIMAL | 6E | Decimal key |
| VK_DIVIDE | 6F | Divide key |
| VK_F1 | 70 | F1 key |
| VK_F2 | 71 | F2 key |
| VK_F3 | 72 | F3 key |
| VK_F4 | 73 | F4 key |
| VK_F5 | 74 | F5 key |
| VK_F6 | 75 | F6 key |
| VK_F7 | 76 | F7 key |
| VK_F8 | 77 | F8 key |
| VK_F9 | 78 | F9 key |
| VK_F10 | 79 | F10 key |
| VK_F11 | 7A | F11 key |
| VK_F12 | 7B | F12 key |
| VK_F13 | 7C | F13 key |
| VK_F14 | 7D | F14 key |
| VK_F15 | 7E | F15 key |
| VK_F16 | 7F | F16 key |
| VK_F17 | 80H | F17 key |
| VK_F18 | 81H | F18 key |
| VK_F19 | 82H | F19 key |
| VK_F20 | 83H | F20 key |
| VK_F21 | 84H | F21 key |
| VK_F22 | 85H | F22 key |
| VK_F23 | 86H | F23 key |
| VK_F24 | 87H | F24 key |
| — | 88–8F | Unassigned |
| VK_NUMLOCK | 90 | NUM LOCK key |
| VK_SCROLL | 91 | SCROLL LOCK key |
| 92–96 | OEM specific | |
| — | 97–9F | Unassigned |
| VK_LSHIFT | A0 | Left SHIFT key |
| VK_RSHIFT | A1 | Right SHIFT key |
| VK_LCONTROL | A2 | Left CONTROL key |
| VK_RCONTROL | A3 | Right CONTROL key |
| VK_LMENU | A4 | Left MENU key |
| VK_RMENU | A5 | Right MENU key |
| VK_BROWSER_BACK | A6 | Windows 2000/XP: Browser Back key |
| VK_BROWSER_FORWARD | A7 | Windows 2000/XP: Browser Forward key |
| VK_BROWSER_REFRESH | A8 | Windows 2000/XP: Browser Refresh key |
| VK_BROWSER_STOP | A9 | Windows 2000/XP: Browser Stop key |
| VK_BROWSER_SEARCH | AA | Windows 2000/XP: Browser Search key |
| VK_BROWSER_FAVORITES | AB | Windows 2000/XP: Browser Favorites key |
| VK_BROWSER_HOME | AC | Windows 2000/XP: Browser Start and Home key |
| VK_VOLUME_MUTE | AD | Windows 2000/XP: Volume Mute key |
| VK_VOLUME_DOWN | AE | Windows 2000/XP: Volume Down key |
| VK_VOLUME_UP | AF | Windows 2000/XP: Volume Up key |
| VK_MEDIA_NEXT_TRACK | B0 | Windows 2000/XP: Next Track key |
| VK_MEDIA_PREV_TRACK | B1 | Windows 2000/XP: Previous Track key |
| VK_MEDIA_STOP | B2 | Windows 2000/XP: Stop Media key |
| VK_MEDIA_PLAY_PAUSE | B3 | Windows 2000/XP: Play/Pause Media key |
| VK_LAUNCH_MAIL | B4 | Windows 2000/XP: Start Mail key |
| VK_LAUNCH_MEDIA_SELECT | B5 | Windows 2000/XP: Select Media key |
| VK_LAUNCH_APP1 | B6 | Windows 2000/XP: Start Application 1 key |
| VK_LAUNCH_APP2 | B7 | Windows 2000/XP: Start Application 2 key |
| — | B8-B9 | Reserved |
| VK_OEM_1 | BA | Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the ';:' key |
| VK_OEM_PLUS | BB | Windows 2000/XP: For any country/region, the '+' key |
| VK_OEM_COMMA | BC | Windows 2000/XP: For any country/region, the ',' key |
| VK_OEM_MINUS | BD | Windows 2000/XP: For any country/region, the '-' key |
| VK_OEM_PERIOD | BE | Windows 2000/XP: For any country/region, the '.' key |
| VK_OEM_2 | BF | Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '/?' key |
| VK_OEM_3 | C0 | Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '`~' key |
| — | C1–D7 | Reserved |
| — | D8–DA | Unassigned |
| VK_OEM_4 | DB | Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '[{' key |
| VK_OEM_5 | DC | Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '\|' key |
| VK_OEM_6 | DD | Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the ']}' key |
| VK_OEM_7 | DE | Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the 'single-quote/double-quote' key |
| VK_OEM_8 | DF | Used for miscellaneous characters; it can vary by keyboard. |
| — | E0 | Reserved |
| E1 | OEM specific | |
| VK_OEM_102 | E2 | Windows 2000/XP: Either the angle bracket key or the backslash key on the RT 102-key keyboard |
| E3–E4 | OEM specific | |
| VK_PROCESSKEY | E5 | Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP: IME PROCESS key |
| E6 | OEM specific | |
| VK_PACKET | E7 | Windows 2000/XP: Used to pass Unicode characters as if they were keystrokes. The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, see Remark inKEYBDINPUT, SendInput,WM_KEYDOWN, and WM_KEYUP |
| — | E8 | Unassigned |
| E9–F5 | OEM specific | |
| VK_ATTN | F6 | Attn key |
| VK_CRSEL | F7 | CrSel key |
| VK_EXSEL | F8 | ExSel key |
| VK_EREOF | F9 | Erase EOF key |
| VK_PLAY | FA | Play key |
| VK_ZOOM | FB | Zoom key |
| VK_NONAME | FC | Reserved for future use |
| VK_PA1 | FD | PA1 key |
| VK_OEM_CLEAR | FE | Clear key |
本文介绍了一种通过编程方式模拟鼠标点击及键盘输入的方法,并提供了一个具体的示例:自动关闭弹出的消息框。此外,还列出了虚拟键值表,帮助读者理解如何模拟不同的按键。
1149

被折叠的 条评论
为什么被折叠?



