2

スクリーンセーバーイベントをキャッチしようとしています。これは私のコードです:

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

#include <Windows.h>

#include <strsafe.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()
{
    HINSTANCE hinstDLL = LoadLibrary(L"user32.dll");
    if (!(_hook = SetWindowsHookEx(WH_GETMESSAGE,HookCallback,hinstDLL,0)))
    {
        std::cout<<"Failed to install hook!\n";
    }
}

void ReleaseHook()
{
    UnhookWindowsHookEx(_hook);
}


int _tmain(int argc, _TCHAR* argv[])
{

    SetHook();


    // Don't mind this, it is a meaningless loop to keep a console application running.
    // I used this to test the keyboard hook functionality. If you want to test it, keep it in ;)
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {

    }
    ReleaseHook();
    return 0;
}

登録は成功です。しかし、私はイベントをキャッチしていません。コールバック関数の中に入ることすらありません。私は何を間違っていますか?

4

1 に答える 1

-1

デスクトップのスクリーンショットを作成するスクリーンセーバーまたはプログラムを作成しようとしていますか? スクリーンセーバーを作成する場合は、これらに従ってください。

.scrスクリーンセーバーは、拡張子を持つ通常のプログラムです。スクリーンセーバーは、次のコマンド ライン パラメータを受け入れる必要があります。

  • \S - 全画面モードで実行
  • \P - プレビュー ダイアログ ボックスで実行
  • \C - 設定ダイアログを表示

ただし、\Pスイッチは少し異なります。その後に、システム ダイアログ ボックスのコロンとウィンドウ ハンドルが続きます。たとえば、次のようになります。/P:1234567890

于 2013-05-24T05:41:06.747 に答える