iBuilder 2022-09-14 23:17 采纳率: 0%
浏览 10
已结题

监控用户按下“alt+tab”

采用 SetWinEventHook 来监控 用户按下“alt+tab”。发现在win7下可以正常运行。但是win10,win11监控不到。

#include <windows.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")
HWND g_hwndAltTab = nullptr;
void CALLBACK WinEventProc(
    HWINEVENTHOOK hWinEventHook,
    DWORD event,
    HWND hwnd,
    LONG idObject,
    LONG idChild,
    DWORD dwEventThread,
    DWORD dwmsEventTime
)
{
    PCTSTR pszSound = nullptr;
    switch (event) {
    case EVENT_SYSTEM_SWITCHSTART:
        OutputDebugString(L"start");
        if (!g_hwndAltTab) {
            g_hwndAltTab = hwnd;
            pszSound = L"C:\\Windows\\Media\\Speech on.wav";
        }
        break;
    case EVENT_SYSTEM_SWITCHEND:
        OutputDebugString(L"end");
        if (g_hwndAltTab) {
            g_hwndAltTab = nullptr;
            pszSound = L"C:\\Windows\\Media\\Speech sleep.wav";
        }
        break;
    }
    if (pszSound) {
        PlaySound(pszSound, nullptr, SND_FILENAME | SND_ASYNC);
    }
}
int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hinstPrev,
    LPSTR lpCmdLine, int nShowCmd)
{
    HWINEVENTHOOK hWinEventHook = SetWinEventHook(
        EVENT_SYSTEM_SWITCHSTART, EVENT_SYSTEM_SWITCHEND,
        nullptr, WinEventProc, 0, 0,
        WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS);
    if (hWinEventHook) {
        MessageBox(nullptr, L"Close this window when sufficiently annoyed.",
            L"Hello", MB_OK);
        UnhookWinEvent(hWinEventHook);
    } 
    return 0;
}

以上代码在win7是正常的,可以监控到用户按下 alt+tab.win10,win11都无法监控到 EVENT_SYSTEM_SWITCHSTART 这类消息。
注要是我的程序,需要在用户按下 alt+tab时候,要停止一些操作,以免有冲突。

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 9月22日
    • 创建了问题 9月14日

    悬赏问题

    • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
    • ¥15 (标签-MATLAB|关键词-多址)
    • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
    • ¥500 52810做蓝牙接受端
    • ¥15 基于PLC的三轴机械手程序
    • ¥15 多址通信方式的抗噪声性能和系统容量对比
    • ¥15 winform的chart曲线生成时有凸起
    • ¥15 msix packaging tool打包问题
    • ¥15 finalshell节点的搭建代码和那个端口代码教程
    • ¥15 Centos / PETSc / PETGEM