2 votes

Attraper l'événement de l'économiseur d'écran

J'essaie d'attraper l'événement de l'économiseur d'écran. Voici mon code :

#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_SCREENSAVE\n";
            }
        }

    }

    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;
}

La fonction SetWindowsHookEx(WH_GETMESSAGE, HookCallback,NULL , 0) ne fonctionne pas. Il renvoie le code :

erreur 1428 : Cannot set nonlocal hook without a module handle

Qu'est-ce que je fais de travers ? Je vous remercie.

0voto

Les crochets à l'échelle du système nécessitent que l'application dispose d'un accès élevé. Vous devez exécuter votre code en tant qu'administrateur.

Vous serez peut-être intéressé par este question/réponse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X