Ejemplo n.º 1
0
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.
}
Ejemplo n.º 2
0
/*
 * @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;
}
Ejemplo n.º 3
0
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);
}