MFC中热键&模拟键盘&模拟鼠标的使用

来源:互联网 发布:淘宝已买到的宝贝 编辑:程序博客网 时间:2024/05/22 11:55

本文转载自http://my.oschina.net/871120/blog/288145 


1. 热键的使用

热键不用了的话一定要卸载,否则下次启动时会被占用。

函数原型

注册函数

BOOL RegisterHotKey(HWND hWnd, // handle to windowint id, // hot key identifierUINT fsModifiers, // key-modifier optionsUINT vk // virtual-key code);


hWnd------窗口句柄;

id------热键的标识;(如果是exe 这个标识的范围就在0-49151之间,如果是DLL 的话,就在49151-65535之间

fsModifiers-------热键附加选项。(如要设定热键Alt+F5,则Alt在该参数中设置,F5在下面的参数vk中设置)该参数对应四个值:MOD_ALT(Alt)MOD_CONTROL(Ctrl)MOD_SHIFT(Shift)MOD_WIN(Win)。四个参数可自由组合,如:Alt+Ctrl,可设置为:MOD_ALT|MOD_CONTROL

vk------虚拟键码。如:F5对应值为VK_F5Home对应值为VK_HOME

鼠标和键盘虚拟键码值如下:

Symbolic constant name

Valuehexadeclmal

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: X1 mouse button

VK_XBUTTON2

06

Windows 2000: X2 mouse button

VK_BACK

8

BACKSPACE key

VK_TAB

9

TAB key

VK_CLEAR

0C

CLEAR key

VK_RETURN

0D

ENTER key

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

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

卸载函数

BOOL UnregisterHotKey(HWND hWnd,   // handle to windowint id  // hot key identifier);

应用实例:

1.  新建MFC工程,创建一个对话框,并添加两个按钮,分别设置Caption为:RegisterHotKeyUnRegisterHotKey

2.        双击[RegisterHotKey]按钮,添加回调函数;

void CMfcDialogDlg::OnBnClickedBntRegister(){     RegisterHotKey(this->m_hWnd,100,MOD_CONTROL,VK_HOME);  //注册热键,设置热键为:Ctrl+Home}

3.        双击[UnRegisterHotKey] 按钮,添加回调函数;

void CMfcDialogDlg::OnBnClickedBntUnregister(){     UnregisterHotKey(this->m_hWnd,100);   //卸载热键}

4.        响应对话框WM_HOTKEY消息;

void CMfcDialogDlg::OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2){     AfxMessageBox("HotKey:Ctrl+Home");     CDialogEx::OnHotKey(nHotKeyId, nKey1, nKey2);}

5.        运行程序,点击[RegisterHotKey]注册热键,然后按下热键:Ctrl+Home,即可弹出提示对话框。

6.  点击[UnRegisterHotKey]卸载热键。

2. 模拟键盘

Windows提供了一个模拟键盘的函数:Keybd_event,该函数产生一个键盘事件发送给当前获得输入焦点的程序。

注:该函数产生的键盘事件只对应用程序有效,不针对系统,如:模拟Ctrl+Alt+Del来调用任务管理器是无效的。

函数原型

VOID keybd_event(BYTE bVk, //虚拟键码,见上面“鼠标和键盘虚拟键码值表”BYTE bScan, // 硬件扫描码。一般不用DWORD dwFlags, // 函数选项标识ULONG_PTR dwExtraInfo //一般不用);

dwFlag------ 代表键盘的两种状态“按下”和“弹起”。

应用实例

1.  OnOk函数中添加函数。

void CMfcDialogDlg::OnBnClickedOk(){    keybd_event(VK_LWIN,0,0,0); //按下Win键     keybd_event('F',0,0,0); //按下F键     keybd_event(VK_LWIN,0,2,0); //松开Win键     keybd_event('F',0,2,0); //松开F键}

2.  运行程序,点击[确定]按钮,运行结果如下,弹出“搜索”界面。

3. 模拟鼠标

通用Windows也提供了模拟鼠标函数:mouse_event

函数原型

VOID mouse_event(DWORD dwFlags, // 鼠标的单击和移动选项DWORD dx, // 横坐标DWORD dy, // 纵坐标DWORD dwData, // 齿轮的滚动ULONG_PTR dwExtraInfo // 应用程序定义信息);
dwFlags------ 选项标识。 

鼠标单击和移动选项对应表

Value

 Meaning

MOUSEEVENTF_ABSOLUTE

当指定这个值时,dx dy 将表示屏幕坐标点绝对坐标的映射。

MOUSEEVENTF_MOVE

表示鼠标移动

MOUSEEVENTF_LEFTDOWN

表示鼠标左键按下

MOUSEEVENTF_LEFTUP

表示鼠标左键弹起

MOUSEEVENTF_RIGHTDOWN

表示鼠标右键按下

MOUSEEVENTF_RIGHTUP

表示鼠标右键弹起

MOUSEEVENTF_MIDDLEDOWN

表示鼠标中间按键按下

MOUSEEVENTF_MIDDLEUP

表示鼠标中间按键弹起

应用实例

1. 在OnOk函数中添加函数。

void CMfcDialogDlg::OnBnClickedOk(){     SetCursorPos(44,752); //将鼠标移动到“开始”按钮上      mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP ,0,0,0,0);    //模拟单击左键}

2. 运行程序,点击[确定]按钮,运行结果如下,弹出“开始”界面。

 

0 0
原创粉丝点击