VC如何实现全局热键

VC如何实现全局热键,第1张

BOOL RegisterHotKey(

HWND hWnd , //指定接收WM_HOTKEY消息的窗体句柄

int id, //热键标识,同一调用线碰败程内的不同热键标识不能相同,应用程序中的标识值在0x0000和0xbfff之间,DLL中的在0xc000和0xffff之间

UINT fsModifiers,//下列值的组合:MOD_ALT,MOD_CONTROL,MOD_SHIFT,MOD_WIN,MOD_KEYUP

UINT vk //按键的虚拟码

)

//在初始化的时候注册:

RegisterHotKey(m_hWnd,1688,MOD_SHIFT|MOD_CONTROL,'A')

RegisterHotKey(m_hWnd,2688,MOD_SHIFT|MOD_CONTROL,'a')

//表示按下Shift+Ctrl+A和Shift+Ctrl+a

BOOL UnregisterHotKey(HWND hWnd, int id)

//添加WM_DESTROY消息时注销热键

{

CDialog::OnDestroy()

// TODO: Add your message handler code here

UnregisterHotKey(m_hWnd,1688)

UnregisterHotKey(m_hWnd,2688)

}

//添加消纯斗息函笑裤颤数

afx_msg LRESULT OnHotHey(WPARAM wParam,LPARAM lParam)

//实现

CWndsnapDlg::OnHotKey(WPARAM wParam,LPARAM lParam)

{

if(wParam==1688||wParam=2688)

{

CDialog a

a.DoModal()

}

if()

{

CDialog b

b.DoModal()

}

//...

}

先新建一个windos窗口程序,在窗口程序中画:

一个按钮、一态侍个标签、其中时钟可以不画,为了提现出按下热键后的效果,这里画一个

先写一个时钟周期事件,目的是让按下最小化按钮后窗口被隐藏。

双击时钟,在生成的子程序"_时钟1_周期事件"下面编写代码如下:

如果 (_启动窗口.位置 = 2)_启动窗口.可视 = 假

设置时钟周期为1000。

PS:启动窗口位置=2的意思是启动窗口被最小化。如果被最小话

然后启动窗口不可视。如图!

让按下按银知钮后实现热键注册(当然你自己可以根据自己的需求来设定热键如何注册)

点击按钮后生成一个为“_按钮1_被单击”的子程序,创建一个整数型的全局变量“热键”,然后在这个子程帆搏吵序下编写代码如下:

热键 = 注册热键 (取窗口句柄 (), 标签1.取窗口句柄 (), 0, #F1键)如果 (热键 = 0)信息框 (“抱歉!热键注册失败”, 0, )否则信息框 (“热键注册成功”, 0, )

PS:注册热键()这个程序需要标签窗口的句柄和标签所在窗口的句柄,我设定按F1键后启动窗口被显示出来。并提示成功或失败!返回值是整数,失败返回0。

回到“_启动窗口”,点中标签,加入一个“反馈事件”的子程序,如图所示,子程序会自带两个参数,不要去改动它们。

在标签反馈事件后生成的“_标签1_反馈事件”子程序下面,写入一下代码:

如果 (参数一 = 热键)    _启动窗口.可视 = 真    _启动窗口.位置 = 1PS:判断按下的热键和注册的热键是否相等, 相等时,_启动窗口.位置 = 1表示窗口被居中。

最后调试一下:

一、点击按钮先注册热键为F1,提示成功,再点击最小化隐藏窗口。

二、按一下F1后,热键值和参数值 因为想等,窗口重新显示。成功!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12387879.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存