2013-05-05 3 views
2

화면 보호기 이벤트를 잡으려고합니다. 내 코드는 다음과 같습니다.화면 보호기 이벤트 잡기

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

SetWindowsHookEx(WH_GETMESSAGE, HookCallback,NULL , 0) 함수가 실패합니다.

오류 1428 : 모듈 핸들없이 비 로컬 후크를 설정할 수 없습니다

뭐야 내가 잘못하고 있어요 그것은 코드를 반환? 감사합니다.

+1

Windows에 이전 API 호출이 실패한 이유에 대한 자세한 정보를 얻기 위해 GetLastError 함수 (또는 이와 비슷한 함수)가 없습니까? 너 그거 해봤 니? – Mat

+0

@Mat - 시도해 보겠습니다 ... – Sanich

+0

메시지 루프도 절반 정도 인 것처럼 보입니다. – Benj

답변

0

시스템 전체 후크를 사용하려면 응용 프로그램에 액세스 권한이 있어야합니다. 관리자 권한으로 코드를 실행해야합니다.

어쩌면 this 질문/답변에 관심이 있으실 것입니다.

관련 문제