LRESULT FASTCALL DefWndHandleSysCommand(PWND pWnd, WPARAM wParam, LPARAM lParam) { LRESULT lResult = 0; BOOL Hook = FALSE; if (ISITHOOKED(WH_CBT) || (pWnd->head.rpdesk->pDeskInfo->fsHooks & HOOKID_TO_FLAG(WH_CBT))) { Hook = TRUE; lResult = co_HOOK_CallHooks(WH_CBT, HCBT_SYSCOMMAND, wParam, lParam); if (lResult) return lResult; } switch (wParam & 0xfff0) { case SC_SCREENSAVE: ERR("Screensaver Called!\n"); UserPostMessage(hwndSAS, WM_LOGONNOTIFY, LN_START_SCREENSAVE, 0); // always lParam 0 == not Secure break; default: // We do not support anything else here so we should return normal even when sending a hook. return 0; } return(Hook ? 1 : 0); // Don't call us again from user space. }
/* * @implemented */ BOOL WINAPI CallMsgFilterW( LPMSG lpMsg, int nCode) { MSG Msg; if ( NtCurrentTeb()->Win32ThreadInfo && (ISITHOOKED(WH_MSGFILTER) || ISITHOOKED(WH_SYSMSGFILTER)) ) { if ( lpMsg->message & ~WM_MAXIMUM ) { SetLastError(ERROR_INVALID_PARAMETER); return FALSE; } RtlCopyMemory(&Msg, lpMsg, sizeof(MSG)); return NtUserCallMsgFilter( &Msg, nCode); } return FALSE; }
LRESULT DefWndHandleSysCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) { POINT Pt; LRESULT lResult; if (!IsWindowEnabled( hWnd )) return 0; if (ISITHOOKED(WH_CBT)) { NtUserMessageCall( hWnd, WM_SYSCOMMAND, wParam, lParam, (ULONG_PTR)&lResult, FNID_DEFWINDOWPROC, FALSE); if (lResult) return 0; } switch (wParam & 0xfff0) { case SC_MOVE: case SC_SIZE: NtUserMessageCall( hWnd, WM_SYSCOMMAND, wParam, lParam, (ULONG_PTR)&lResult, FNID_DEFWINDOWPROC, FALSE); break; case SC_MINIMIZE: if (hWnd == GetActiveWindow()) ShowOwnedPopups(hWnd,FALSE); ShowWindow( hWnd, SW_MINIMIZE ); break; case SC_MAXIMIZE: if (IsIconic(hWnd) && hWnd == GetActiveWindow()) ShowOwnedPopups(hWnd,TRUE); ShowWindow( hWnd, SW_MAXIMIZE ); break; case SC_RESTORE: if (IsIconic(hWnd) && hWnd == GetActiveWindow()) ShowOwnedPopups(hWnd,TRUE); ShowWindow( hWnd, SW_RESTORE ); break; case SC_CLOSE: return SendMessageW(hWnd, WM_CLOSE, 0, 0); // case SC_DEFAULT: case SC_MOUSEMENU: { Pt.x = (short)LOWORD(lParam); Pt.y = (short)HIWORD(lParam); MenuTrackMouseMenuBar(hWnd, wParam & 0x000f, Pt); } break; case SC_KEYMENU: MenuTrackKbdMenuBar(hWnd, wParam, (WCHAR)lParam); break; case SC_VSCROLL: case SC_HSCROLL: { Pt.x = (short)LOWORD(lParam); Pt.y = (short)HIWORD(lParam); DefWndTrackScrollBar(hWnd, wParam, Pt); } break; case SC_TASKLIST: WinExec( "taskman.exe", SW_SHOWNORMAL ); break; case SC_SCREENSAVE: NtUserMessageCall( hWnd, WM_SYSCOMMAND, wParam, lParam, (ULONG_PTR)&lResult, FNID_DEFWINDOWPROC, FALSE); break; case SC_NEXTWINDOW: case SC_PREVWINDOW: DoAppSwitch( wParam, lParam); break; case SC_HOTKEY: { HWND hwnd, hWndLastActive; PWND pWnd; hwnd = (HWND)lParam; pWnd = ValidateHwnd(hwnd); if (pWnd) { hWndLastActive = GetLastActivePopup(hwnd); if (hWndLastActive) { hwnd = hWndLastActive; pWnd = ValidateHwnd(hwnd); } SetForegroundWindow(hwnd); if (pWnd->style & WS_MINIMIZE) { PostMessage(hwnd, WM_SYSCOMMAND, SC_RESTORE, 0); } } } break; default: FIXME("Unimplemented DefWndHandleSysCommand wParam 0x%x\n",wParam); break; } return(0); }