社区
界面
帖子详情
win32 api实现窗口前端显示
imLWJ
2011-10-04 10:36:06
按下F5这个窗口会跳到所有窗口的前端,如何截下这个F5消息,并实现前端显示
...全文
756
3
打赏
收藏
win32 api实现窗口前端显示
按下F5这个窗口会跳到所有窗口的前端,如何截下这个F5消息,并实现前端显示
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Gloveing
2011-10-05
打赏
举报
回复
装个键盘钩子、、、截获F5按键消息在处理
caddor2011
2011-10-05
打赏
举报
回复
原理: RegistreHotKey是全局的一个注册热键的函数,用其可以向系统申请注册一个热键,无需借助于加载快捷键资源的方法。
函数原型:BOOL RegisterHotKey(HWND hWnd,int id,UINT fsModifiers,UINT vk);
参数介绍:
hWnd:接收热键产生WM_HOTKEY消息的窗口句柄。若该参数NULL,传递给调用线程的WM_HOTKEY消息必须在消息循环中中进行处理。
id:定义热键的标识符。调用线程中的其他热键不能使用同样的标识符。应用功能程序必须定义一个0X0000-0xBFFF范围的值。一个共享的动态链接库(DLL)必须定义一个范围为0xC000-0xFFFF的值(GlobalAddAtom函数返回该范围)。为了避免与其他动态链接库定义的热键冲突,一个DLL必须使用GlobalAddAtom函数获得热键的标识符。
fsModifoers:定义为了产生WM_HOTKEY消息而必须与由nVirtKey参数定义的键一起按下的键。该参数可以是如下值的组合: MOD_ALT:按下的可以是任一Alt键。MOD_CONTROL:按下的可以是任一Ctrl键。 MOD_SHIFT:按下的可以是任一Shift键。 MOD_WIN:按下的可以是任一Windows按键。这些键可以用Microsoft Windows日志记录下来。 MOD_NOREPEAT:更改热键行为,以便键盘自动重复不会产生多个热键通知。
vk:定义热键的虚拟键码。
返回值:若函数调用成功,返回一个非0值。若函数调用失败,则返回值为0。若要获得更多的错误信息,可以调用GetLastError函数。
当程序结束的时候,要卸载该热键。 卸载热键用到的函数是:UnregisterHotKey ,该函数功能:该函数释放调用线程先前登记的热键。
函数原型:BOOL UnregisterHotKey(HWND hWnd,int id);
参数:
hWnd:与被释放的热键相关的窗口句柄。若热键不与窗口相关,则该参数为NULL。
id:定义被释放的热键的标识符。
返回值:若函数调用成功,返回值不为0。若函数调用失败,返回值为0。若要获得更多的错误信息,可以调用GetLastError函数。
注意到,如果向系统注册一个热键”alt+a”,要做的就是 fsModifoers设为MOD_ALT, vk 设置为VK_A(VK_A是自定义的一个宏,虚拟码为:65,也可以借助mfc的,不用定义).用法如下:
BOOL m_isKeyRegistered; //是否注册该热键成功
m_nHotKeyIDA=0; //这个值是自己设置的, 由于是全局的,其他程序如果用到该原理来实现注册热键,很可能会冲突,所以取值的时候,要留意。
m_isKeyRegistered = ::RegisterHotKey(GetSafeHwnd(),m_nHotKeyIDA,MOD_ALT,VK_D);
ASSERT(m_isKeyRegistered != FALSE); //DEBUG版本
上面的代码放到CTest3Dlg::OnInitDialog里面即可。
卸载热键则是将卸载代码放到OnCancel,OnOK,函数里面。
注册之后,系统怎样响应快捷呢?
手动添加: ON_MESSAGE(WM_HOTKEY,OnHotKey) ,
//热键处理函数
LONG CTest3Dlg::OnHotKey(WPARAM wParam,LPARAM lParam)
{
if(wParam==m_nHotKeyIDA)
{
AfxMessageBox(_T("A功能"));
………………..
}
return 0;
}
然后SetForeGroundWindow(你 的窗口句柄)
gameslq
2011-10-04
打赏
举报
回复
用RegisterHotKey注册热键,并
在消息WM_HOTKEY中进行响应,用函数SetForegroundWindow(hwnd); 把窗口置最前端。
C#程序只允许运行一个实例的解决方案
最近在做winform的程序中,需要只能打开一个程序,如果已经存在,则激活该程序的
窗口
,并
显示
在最
前端
。在网上google了一哈,找到了很多的解决方案。这里我整理了3种方案,并经过了测试,现和朋友们分享: 一、使用用互斥量(System.Threading.Mutex) 同步基元,它只向一个线程授予对共享资源的独占访问权。在程序启动时候,请求一个互斥体,如果能获取对指定互斥的访问权,就职运行
多
显示
器福音:B站横竖屏视频自动适配的完整配置流程(含避坑指南)
本文详细介绍了在多
显示
器环境下
实现
B站横竖屏视频自动适配的完整配置流程,包括
前端
脚本配置、后端服务搭建及常见问题排查。通过Tampermonkey脚本和Python HTTP服务,系统能智能切换
显示
器,提升观看体验,特别适合多屏办公用户。
DreamScene2动态桌面软件:Windows桌面个性化开发指南与深度应用
DreamScene2是一款专为Windows 10/11系统设计的高性能动态桌面软件,通过创新的桌面渲染技术,让开发者能够将视频、网页动画和交互式内容直接嵌入到Windows桌面底层。这款开源工具不仅为普通用户提供了个性化的桌面体验,更为开发者提供了探索Windows桌面系统深度集成的技术平台。 ## 技术架构解析:理解DreamScene2的核心设计 DreamScene2采用C#与WPF
win32
设置
窗口
临时
显示
到最前面
如何设置
窗口
临时
显示
到桌面最前面? 关键点:
win32
api
--AttachThreadInput,SetForegroundWindow
实现
代码: void CMainFrame::BringMainwndToForeground() { //说明:SetForegroundWindow在debug模式一直成功,非debug模式会有失败的情况,解决方法是...
win32
窗口
前端
显示
Code: SetWindowPos(hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
界面
15,976
社区成员
115,866
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章