yos*_*o78 5 c++ winapi message-queue visual-c++
我正在尝试Alt+Tab使用 Win Event Hook进行检测SetWinEventHook。然而Alt+Tab,即使我有消息泵(我在 Windows 10 上),钩子的回调也永远不会触发
Alt+Tab当我偶然发现这一系列帖子时,我想到了这样处理的想法:
其中描述了使用 WinEventHook 来获取Alt+Tab消息(我不知道它在现代是否有效)。我发现Raymond Chen 的一篇文章详细介绍了它(但是它不再起作用了,我不知道为什么,但它应该起作用。)
Alt+Tab如何在事件回调中获取消息?
编辑:这是我的例子,模仿我大规模做的事情(小程序不起作用)并消除评论中的疑问。这是整个程序加上编译脚本,它显示了我正在尝试执行的操作,但根本不起作用(我做错了什么?上面的 Raymond Chen 程序似乎受其影响)。我使用的是 Windows 10
(编辑,我发现 EVENT_MIN 和 EVENT_MAX 在挂钩中给了我事件,但从来没有 EVENT_SYSTEM_SWITCHSTART 和 EVENT_SYSTEM_SWITCHEND 事件)
编译.bat:
@echo off
if not defined DevEnvDir (
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
)
if "%Platform%" neq "x64" (
echo ERROR: Platform is not "x64" - previous bat call failed.
exit /b 1
)
set FILES=main.cpp
set RELEASEFLAGS=/O2 /DMAINDEBUG=0
set DEBUGFLAGS=/Zi /DMAINDEBUG=1
set LIBS=kernel32.lib user32.lib gdi32.lib Winmm.lib
::Release
cl /nologo /W3 /GS- /Gs999999 %RELEASEFLAGS% %FILES% /Fe: AnnoyingSound.exe %LIBS% /link /incremental:no /opt:icf /opt:ref /subsystem:windows
::Debug
cl /nologo /W3 /GS- /Gs999999 %DEBUGFLAGS% %FILES% /FC /Fe: AnnoyingSoundDebug.exe %LIBS% /link /incremental:no /opt:icf /opt:ref /subsystem:console
Run Code Online (Sandbox Code Playgroud)
主要.cpp:
@echo off
if not defined DevEnvDir (
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
)
if "%Platform%" neq "x64" (
echo ERROR: Platform is not "x64" - previous bat call failed.
exit /b 1
)
set FILES=main.cpp
set RELEASEFLAGS=/O2 /DMAINDEBUG=0
set DEBUGFLAGS=/Zi /DMAINDEBUG=1
set LIBS=kernel32.lib user32.lib gdi32.lib Winmm.lib
::Release
cl /nologo /W3 /GS- /Gs999999 %RELEASEFLAGS% %FILES% /Fe: AnnoyingSound.exe %LIBS% /link /incremental:no /opt:icf /opt:ref /subsystem:windows
::Debug
cl /nologo /W3 /GS- /Gs999999 %DEBUGFLAGS% %FILES% /FC /Fe: AnnoyingSoundDebug.exe %LIBS% /link /incremental:no /opt:icf /opt:ref /subsystem:console
Run Code Online (Sandbox Code Playgroud)
对于我正在做的事情的背景:
我正在 DirectX12 中制作自己的渲染引擎,并且我正在手动执行所有 Win32 操作。我想做的一件事是Alt+Tab在全屏时最小化窗口。 (我听说 DirectX 在窗口顶部渲染,以便窗口最小化,但 DirectX 保持在窗口所在位置渲染,所以我需要处理Alt+Tab然后停止渲染(我不知道我是否属实) ,刚刚在论坛帖子中看到))。所以我需要一种检测和处理它的方法Alt+Tab。 (如果这不起作用,我可能会研究加速器,但我不知道这是否适用于 Alt + Tab)
浏览旧的 StackOverflow 内容,我找到了这两个链接,但所有示例要么已失效,要么不相关:
| 归档时间: |
|
| 查看次数: |
757 次 |
| 最近记录: |