2013-05-05 2 views
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; 
} 

등록이 성공적입니다. 그러나 나는 그 사건을 잡지 못하고있다. 콜백 함수 안에 들어 가지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

메시지 전용 창과 같은 소리가 사용자의 요구에 맞을 수 있습니다. – chris

+0

Chris, 제발 설명해 주시거나 나에게 제안 된 것에 대한 참고 자료를 제공해 주실 수 있습니까? 감사! – Sanich

+0

http://msdn.microsoft.com/en-us/library/windows/desktop/ms632599(v=vs.85).aspx#message_only – chris

답변

-1

데스크톱을 스크린 샷 스크린 세이버 또는 프로그램을 만들려고하십니까? 화면 보호기를 만드는 경우 다음과 같이하십시오.

화면 보호기는 .scr 확장자가있는 일반 프로그램입니다. 화면 보호기는 다음 명령 줄 매개 변수를 받아 들여야합니다. 미리보기 대화 상자 C \

  • 에서 실행 - - 전체 화면 모드 P \
  • 에서 실행 - S \

    • 는 대화 상자 구성을 보여

    그러나 \P 스위치가 약간 다릅니다. 시스템 대화 상자의 콜론과 창 핸들이옵니다. 예를 들어, /P:1234567890

  • 관련 문제