捕捉屏幕保护程序事件

Catching the screen saver event

本文关键字:事件 程序 屏幕保护      更新时间:2023-10-16

我正在尝试捕捉屏幕保护程序事件。这是我的代码:

#include "stdafx.h"
#include <iostream>
#include "stdio.h"
#include <Windows.h>

HHOOK _hook;
LRESULT CALLBACK HookCallback(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode >= 0)
    {

        LPMSG msg = (LPMSG)lParam;
        if(msg->message == WM_SYSCOMMAND)
        {
            if (msg->wParam == SC_SCREENSAVE)
            {
                std::cout<<"SC_SCREENSAVEn";
            }
        }
    }
    return CallNextHookEx(_hook, nCode, wParam, lParam);
}
void SetHook()
{
    if (!(_hook = SetWindowsHookEx(WH_GETMESSAGE, HookCallback,NULL , 0)))
    {
        std::cout<<"Failed to install hook!n";
    }
}
void ReleaseHook()
{
    UnhookWindowsHookEx(_hook);
}

int _tmain(int argc, _TCHAR* argv[])
{
    SetHook();
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
    }
    ReleaseHook();
    return 0;
}

SetWindowsHookEx(WH_GETMESSAGE, HookCallback,NULL , 0)功能失败。它返回代码:

错误1428:没有模块句柄

不能设置非本地钩子

。我做错了什么?谢谢!

系统级钩子要求应用程序具有提升访问权限。您需要以管理员身份运行代码。

也许你会对这个问题/答案感兴趣。