예전에는 화면 보호기 막는 방법이 잘 통했던 것 같은데...
다시 만들려니까 왜 이리 안 되는지 모르겠네요 ㅋ
void *g_OrgAppWndProc;
int __stdcall AppWndProc(HWND Wnd,int Msg, int wParam, int lParam)
{
switch( Msg )
{
case WM_SYSCOMMAND:
TRACE("WM_SYSCOMMAND");
if( wParam == SC_SCREENSAVE || wParam == SC_MONITORPOWER )
{
TRACE("Shutdown Screen Saver!");
return -1;
}
break;
}
CallWindowProc( (FARPROC)g_OrgAppWndProc, Wnd, Msg, wParam, lParam );
}
void __fastcall TForm4Control::FormCreate(TObject *Sender)
{
g_OrgAppWndProc = (WNDPROC)GetWindowLongA(Application->Handle,GWL_WNDPROC);
SetWindowLongA( Application->Handle, GWL_WNDPROC, (LONG)&AppWndProc );
}
이런 식으로 코딩이 되어 있고요.
화면 보호기가 실행되면 날아온다는 WM_SYSCOMMAND 메시지를 받아서 처리해주는 것인데...
WM_SYSCOMMAND 메시지가 아예 날아오지 않고 있습니다. 이 뭥미 ㅡㅡ;
최소/최대화 해보니까 이벤트창에 TRACE 메시지가 찍히는 것을 봐서는 프로시져 등록 문제는 아닌거 같은데요.
누군가는 XP SP2 이후에는 WM_SYSCOMMAND를 보내지 않는다고도 하고...
정확한 원인을 모르겠네요.
이게 정 안 되면 그냥 59초에 1번씩 SHIFT 키를 눌러주게 만들어야 겠습니다...
|