[Windows编程] 如何截获Alt+Tab事件

Windows 中 Alt + Tab 组合键被用来在各个程序之间切换。 因此,该键盘消 息 (WM_KEYDOWN/UP) 是直接发给系统内核, 在应用程序中的消息循环中截获不 到。

一个常见问题是,可是有的应用程序想在被Alt+TAB 切换到后台之间做点事情 , 这时候该怎么办?

方案之一就是用底层的键盘钩子,截获整个系统的键盘输入。但这样做会导致 一些效率以及稳定性问题。

另外一个比较方便安全的方案就是用 Windows Accessbility API 的 SetWinEventHook 函数, 监听 EVENT_SYSTEM_SWITCHSTART 和 EVENT_SYSTEM_SWITCHEND 事件。

这2个事件就是对应用户按下Alt+Tab键 以及 松开 Alt+Tab键,下面是MSDN的 解释:

EVENT_SYSTEM_SWITCHSTART
The user has pressed ALT+TAB, which activates the switch window. This event is sent by the system, never by servers. The hwnd parameter of the WinEventProc callback function identifies the window to which the user is switching.

If only one application is running when the user presses ALT+TAB, the system sends an EVENT_SYSTEM_SWITCHEND event without a corresponding EVENT_SYSTEM_SWITCHSTART event.

EVENT_SYSTEM_SWITCHEND
The user has released ALT+TAB. This event is sent by the system, never by servers. The hwnd parameter of the WinEventProc callback function identifies the window to which the user has switched.

If only one application is running when the user presses ALT+TAB, the system sends this event without a corresponding EVENT_SYSTEM_SWITCHSTART event.

示例代码:

//安装Event Hook   

void InstallEventHook()   

{   

    g_hWinEventhook = ::SetWinEventHook(   

        EVENT_SYSTEM_SWITCHSTART , EVENT_SYSTEM_SWITCHEND, 

 //          NULL,                     

                     // Handle to DLL.   

        s_HandleWinEvent,             // The 

callback.   

        0, 0,              // Process and 

thread IDs of interest (0 = all)   

        WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS); //

 Flags.   

  

}   

  

  

// 回调函数   

  

void CALLBACK s_HandleWinEvent(HWINEVENTHOOK hook, DWORD eventWin,

 HWND hwnd,    

                             LONG 

idObject, LONG idChild,    

                             DWORD 

dwEventThread, DWORD dwmsEventTime)   

  

{   

  

    switch (eventWin)   

    {   

    case EVENT_SYSTEM_SWITCHSTART:   

        TRACE0("[EVENT_SYSTEM_MENUSTART] "); // Alt +Tab 

被按下   

        break;   

    case EVENT_SYSTEM_SWITCHEND:   

        TRACE0("[EVENT_SYSTEM_MENUEND] ");  // Alt +Tab 

被松开   

        break;   

    }   

    TRACE1("hwnd=0x%.8xn", hwnd);   

  

}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索信号截获
, system
, event
, hwnd
, alt
, 编程windowsc++switch应用
, The
, user
tab切换事件
egret截获点击事件、ios 截获点击事件、js截获手机返回事件、ocx 截获 子窗体 事件、alt tab不能切换,以便于您获取更多的相关知识。

时间: 2024-09-19 05:41:39

[Windows编程] 如何截获Alt+Tab事件的相关文章

Windows XP系统中如何屏蔽Ctrl+Alt+Del、Alt+Tab以及Ctrl+Esc键序列

对于用过Windows的人,几乎没有人不知道Ctrl+Alt+Del组合键,尤其是在使用经常死机的Windows9x时,使用它的频率更高,这一组合键是专门为了系统安全起见提供的紧急出口.VC知识库在线杂志第11期,ac952_z_cn在他的个人专栏中写过一篇关于这方面的文章:"WINDOWS NT/2000下如何屏蔽CTRL+ALT+DEL".因此本文侧重于介绍在Windows XP中如何实现屏蔽CTRL+ALT+DEL组合键,也就是任务管理器,任务切换组合键(Alt+Tab),任务栏

自定义Windows 7 Alt+Tab程序显示数

从Vista时代开始,微软就开始为系统的窗口切换加入了一系列的特效,比如,Aero Flip 3D效果.窗口最大/最小化动画等等.当然,还有Alt+Tab.在Windows 7中,微软在加入AeroPeek.AeroShake的同时,也沿用了AeroFlipp和Alt+Tab切换,今天,我们要做的就是自定义Alt+Tab切换中显示的程序数目. * WIN+R运行regedit打开注册表编辑器 * 找到:HKEY_CURRENT_USER\Control Panel\Desktop\CoolSwi

Windows 9虚拟桌面增强Alt+Tab功能

  Windows 9虚拟桌面的操作方法很简单,用鼠标或手指在屏幕左侧滑动就能开启一个导航栏,在这里,你可以快速在开启的桌面间进行切换.就像在Windows 8中通过滑动操作切换应用程序一样,在Windows 9中,你能快速滑动切换不同的桌面.有评论称该功能就像是增强版Alt+Tab功能. 另外,Windows 9的"虚拟桌面"这个名字太技术化,微软很可能不会在Windows 9使用,而是会采用一个更加通俗的名称.虚拟桌面对于普通用户来说似乎过于复杂,令人闻之生畏,不利于该功能的普及.

有关于c语言windows编程的按键事件的问题,求解答

问题描述 有关于c语言windows编程的按键事件的问题,求解答 刚开始学习windows编程,想要编写一个计算器,但是我不会实现点击数字就在文本框显示的功能,问了别人好像是有关按键事件的,求大家帮我解答. 解决方案 用setdlgitemtext可以设置文本,如果你完全没有基础,建议先找一个完整的代码,google下计算器的源代码有很多. 解决方案二: 建立按钮的点击事件,与按钮进行绑定,然后点击后将文字追加到文本框内

窗口风格-windows编程中怎样让建立的窗口不能拉伸,应该设置什么样式?

问题描述 windows编程中怎样让建立的窗口不能拉伸,应该设置什么样式? 最近在学习Windows编程,看windows程序设计,但那个hellowin程序出来的窗口是可以拉伸的,怎样固定下来,让窗口不可以拉伸,应该是一个窗口样式或者风格,但老是查不出来,求助! 解决方案 WS_SIZEBOX WS_THICKFRAM 解决方案二: http://blog.csdn.net/diaolingle/article/details/17284711 解决方案三: WS_BORDER 0X00800

请高手指点,如何用C#程序禁用Alt+Tab,Ctrl+Alt+Delete组合键

问题描述 要实现的功能是这样的,我编了一个程序,在我的程序运行的时候,Alt+Tab,Ctrl+Alt+Delete组合键是被禁用的,电脑的使用者既不能通过Alt+Tab组合键把我的程序切换出去,又不能通过Ctrl+Alt+Delete调出任务管理器关闭我的程序,请问高手,这两个功能是如何实现的 解决方案 解决方案二:Ctrl+Alt+Delete是不可被屏的,但是你可以用dll注入的方式隐藏你的恶意代码(我估计你就是想干这个).解决方案三:那你就写个系统驱动吧.貎似它是既不能被切换也不能关闭的

Win8.1系统下使用Alt+Tab快捷键切换窗口时不显示程序图标应该怎么办?

  当很多程序开启时,我们习惯使用Alt+Tab快捷键在已经开启的应用程序间进行任意切换,但是有网友反应在使用win8.1系统时,开启的多个应用程序在任务栏中不显示应该用的应用程序图标,已经打开的应用程序无法根据需要使用Alt+Tab快捷键进行切换.本文介绍遇到这种情况应该怎么处理. 首先应该说明,这种情况是由于计算机性能选项设置不合理造成的,明白了这一点就知道了解决方法.右击"我的电脑"弹出菜单,选择"属性"->打开"系统"窗口,在左侧点

windows编程怎样屏蔽任务管理器

问题描述 windows编程怎样屏蔽任务管理器 windows编程怎样屏蔽Ctrl+alt+delete?有个函数只对XP有效,有没有对win7有效的? 解决方案 底层键盘钩子hook 解决方案二: 参考How to Disable/Enable Task Manager 虽然是英文的,但是都是截图,按照操作,应该没有问题. 除了Ctrl+Alt+Delete外,Ctrl+Shift+Esc也可以打开任务管理器的,不知道上面的方法是否也会屏蔽这样的操作,你设好之后可以测试一下. 解决方案三: 用

艾伟_转载:基于.NET平台的Windows编程实战(五)—— 问卷管理功能的实现

本系列文章导航 基于.NET平台的Windows编程实战(一)--前言 基于.NET平台的Windows编程实战(二)-- 需求分析与数据库设计 基于.NET平台的Windows编程实战(四)-- 数据库操作类的编写 基于.NET平台的Windows编程实战(五)-- 问卷管理功能的实现 基于.NET平台的Windows编程实战(六)-- 题目管理功能的实现 首先,为了使我们的界面更加便于操作及布局,我们引入第三开源控件DockPanel[当然也可以不引入控件而直接进行开发],你可以从这里:Do