Partially implement:
authorBrandon Turner <turnerb7@msu.edu>
Sat, 22 Jul 2006 16:50:23 +0000 (16:50 +0000)
committerBrandon Turner <turnerb7@msu.edu>
Sat, 22 Jul 2006 16:50:23 +0000 (16:50 +0000)
NtUserCallHwndOpt
NtUserGetThreadState
Implement
GetProgmanWindow
GetTaskmanWindow
This is (kinda)part of bug 1668

svn path=/trunk/; revision=23227

reactos/dll/win32/user32/windows/window.c
reactos/include/reactos/win32k/ntuser.h
reactos/subsystems/win32/win32k/ntuser/misc.c

index d21f0c3..163831a 100644 (file)
@@ -1586,25 +1586,23 @@ SetProgmanWindow(HWND hWnd)
 }
 
 /*
- * @unimplemented
+ * @implemented
  */
 HWND
 STDCALL
 GetProgmanWindow(VOID)
 {
-  UNIMPLEMENTED;
-  return FALSE;
+  return (HWND)NtUserGetThreadState(THREADSTATE_PROGRAMWINDOW);
 }
 
 /*
- * @unimplemented
+ * @implemented
  */
 HWND
 STDCALL
 GetTaskmanWindow(VOID)
 {
-  UNIMPLEMENTED;
-  return FALSE;
+  return (HWND)NtUserGetThreadState(THREADSTATE_TASKMANWINDOW);
 }
 
 /*
index c420675..f0e84cd 100644 (file)
@@ -8,6 +8,8 @@ typedef struct _DESKTOP
 {
     HANDLE hKernelHeap;
     WCHAR szDesktopName[1];
+    HWND hTaskManWindow;
+    HWND hProgmanWindow;
 } DESKTOP, *PDESKTOP;
 
 typedef struct _CALLPROC
@@ -1117,6 +1119,8 @@ NtUserGetThreadDesktop(
 #define THREADSTATE_GETTHREADINFO   (0)
 #define THREADSTATE_FOCUSWINDOW (1)
 #define THREADSTATE_INSENDMESSAGE       (2)
+#define THREADSTATE_PROGMANWINDOW (3)
+#define THREADSTATE_TASKMANWINDOW (4)
 DWORD
 NTAPI
 NtUserGetThreadState(
index f14fd82..9922b2c 100644 (file)
@@ -856,19 +856,11 @@ NtUserCallHwndOpt(
    switch (Routine)
    {
       case HWNDOPT_ROUTINE_SETPROGMANWINDOW:
-         /*
-          * FIXME 
-          * Nothing too hard...validate the hWnd and save it in the Desktop Info
-          */
-         DPRINT1("HWNDOPT_ROUTINE_SETPROGMANWINDOW UNIMPLEMENTED\n");
+         GetW32ThreadInfo()->Desktop->hProgmanWindow = Param;
          break;
 
       case HWNDOPT_ROUTINE_SETTASKMANWINDOW:
-         /*
-          * FIXME 
-          * Nothing too hard...validate the hWnd and save it in the Desktop Info
-          */
-         DPRINT1("HWNDOPT_ROUTINE_SETTASKMANWINDOW UNIMPLEMENTED\n");
+         GetW32ThreadInfo()->Desktop->hTaskManWindow = Param;
          break;
    }
 
@@ -902,6 +894,10 @@ NtUserGetThreadState(
 
       case THREADSTATE_FOCUSWINDOW:
          RETURN( (DWORD)IntGetThreadFocusWindow());
+      case THREADSTATE_PROGMANWINDOW:
+         RETURN( (DWORD)GetW32ThreadInfo()->Desktop->hProgmanWindow);
+      case THREADSTATE_TASKMANWINDOW:
+         RETURN( (DWORD)GetW32ThreadInfo()->Desktop->hTaskManWindow);
    }
    RETURN( 0);