컴퓨터 종료, 다시시작, 로그오프를 할 때 WM_QUERYENDSESSION메세지가 발생된다.

그냥 인터넷보다가 호기심이 생겨서 좀더 찾아보니 역시!

Ezbeat님 블로그에서 재미난 자료를 찾았다.


위 세션종료 메세지가 발생하면 메세지박스를 띄운후에 컴퓨터 종료를 인위로 막는것이다.

#include <windows.h>

 

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);


int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevious, LPSTR lpCmdString, int CmdShow )

{

    WNDCLASS windowClass;

    HWND hWnd;

MSG msg;


    windowClass.cbClsExtra = 0;

    windowClass.cbWndExtra = 0;

    windowClass.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);

    windowClass.hCursor = LoadCursor (NULL, IDC_ARROW);

    windowClass.hIcon = LoadIcon (NULL, IDI_APPLICATION);

    windowClass.hInstance = hInstance;

    windowClass.lpfnWndProc = (WNDPROC)WndProc;

    windowClass.lpszClassName = "ClassName";

    windowClass.lpszMenuName = NULL;

    windowClass.style = CS_HREDRAW | CS_VREDRAW;

 

    if (!RegisterClass (&windowClass))

    {

        MessageBox(NULL, "Error : Cannot Register Window Class", "ERROR", MB_OK);

        return (0);

    } // end if

 

    hWnd = CreateWindow ("ClassName",  

       "Taesun1114",   

       WS_OVERLAPPEDWINDOW,

       CW_USEDEFAULT,    

       CW_USEDEFAULT,     

       CW_USEDEFAULT,    

       CW_USEDEFAULT,     

       NULL, 

       (HMENU)NULL, 

       hInstance, 

       NULL);

 

    ShowWindow ( hWnd , SW_HIDE);


    while(GetMessage(&msg,0,0,0))

    {

      TranslateMessage(&msg); 

      DispatchMessage (&msg);

    } 

 

    return msg.wParam;

}


LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam){

switch(iMessage)

{

case WM_DESTROY:

PostQuitMessage(0);

return 0;

case WM_QUERYENDSESSION:

MessageBoxA(hWnd,"Don't Windows End!!","MERONG~!!",MB_OK);

return FALSE;

}


return (DefWindowProc(hWnd,iMessage,wParam,lParam));

}


이때 중요한것이. WM_QUERYENDSESSION메세지를 받으면 FALSE를 리턴해줘야 종료가 되지 않는다. TRUE를 리턴하면 정상종료된다.

'System > Windows' 카테고리의 다른 글

Window 로그인 화면 바꾸기  (0) 2012.09.27
MSG Struct  (0) 2012.09.18
PE struct  (0) 2012.08.30
DLL 암시적 연결 & 명시적 연결  (0) 2012.08.23
DLL  (0) 2012.08.21

+ Recent posts