码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-07-21 10:13:27      阅读:387      评论:0      收藏:0      [点我收藏+]

标签:style   http   color   使用   strong   os   

 

1. 热键的使用

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

函数原型

注册函数

BOOL RegisterHotKey(

HWND hWnd, // handle to window

int id, // hot key identifier

UINT fsModifiers, // key-modifier options

UINT 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 window

int id  // hot key identifier

);

应用实例:

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

bubuko.com,布布扣

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,即可弹出提示对话框。

bubuko.com,布布扣

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.  运行程序,点击[确定]按钮,运行结果如下,弹出“搜索”界面。

bubuko.com,布布扣

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. 运行程序,点击[确定]按钮,运行结果如下,弹出“开始”界面。

bubuko.com,布布扣

 

MFC中热键&模拟键盘&模拟鼠标的使用,布布扣,bubuko.com

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

标签:style   http   color   使用   strong   os   

原文地址:http://my.oschina.net/871120/blog/288145

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!