source: trunk/src/user32/user32.cpp@ 1618

Last change on this file since 1618 was 1593, checked in by phaller, 26 years ago

Fix: wvsprintfAW fixed

File size: 126.7 KB
Line 
1/* $Id: user32.cpp,v 1.50 1999-11-04 18:35:42 phaller Exp $ */
2
3/*
4 * Win32 misc user32 API functions for OS/2
5 *
6 * Copyright 1998 Sander van Leeuwen
7 * Copyright 1998 Patrick Haller
8 * Copyright 1998 Peter Fitzsimmons
9 * Copyright 1999 Christoph Bratschi
10 * Copyright 1999 Daniela Engert (dani@ngrt.de)
11 *
12 *
13 * Project Odin Software License can be found in LICENSE.TXT
14 *
15 */
16/*****************************************************************************
17 * Name : USER32.CPP
18 * Purpose : This module maps all Win32 functions contained in USER32.DLL
19 * to their OS/2-specific counterparts as far as possible.
20 *****************************************************************************/
21
22//Attention: many functions belong to other subsystems, move them to their
23// right place!
24
25#include <odin.h>
26#include <odinwrap.h>
27#include <os2sel.h>
28
29#include <os2win.h>
30#include "misc.h"
31
32#include "user32.h"
33#include <winicon.h>
34#include "syscolor.h"
35
36#include <wchar.h>
37#include <stdlib.h>
38#include <string.h>
39#include <oslibwin.h>
40#include <win32wnd.h>
41#include <winuser.h>
42
43//undocumented stuff
44// WIN32API CalcChildScroll
45// WIN32API CascadeChildWindows
46// WIN32API ClientThreadConnect
47// WIN32API DragObject
48// WIN32API DrawFrame
49// WIN32API EditWndProc
50// WIN32API EndTask
51// WIN32API GetInputDesktop
52// WIN32API GetNextQueueWindow
53// WIN32API GetShellWindow
54// WIN32API InitSharedTable
55// WIN32API InitTask
56// WIN32API IsHungThread
57// WIN32API LockWindowStation
58// WIN32API ModifyAccess
59// WIN32API PlaySoundEvent
60// WIN32API RegisterLogonProcess
61// WIN32API RegisterNetworkCapabilities
62// WIN32API RegisterSystemThread
63// WIN32API SetDeskWallpaper
64// WIN32API SetDesktopBitmap
65// WIN32API SetInternalWindowPos
66// WIN32API SetLogonNotifyWindow
67// WIN32API SetShellWindow
68// WIN32API SetSysColorsTemp
69// WIN32API SetWindowFullScreenState
70// WIN32API SwitchToThisWindow
71// WIN32API SysErrorBox
72// WIN32API TileChildWindows
73// WIN32API UnlockWindowStation
74// WIN32API UserClientDllInitialize
75// WIN32API UserSignalProc
76// WIN32API WinOldAppHackoMatic
77// WIN32API WNDPROC_CALLBACK
78// WIN32API YieldTask
79
80ODINDEBUGCHANNEL(USER32-USER32)
81
82
83/* Coordinate Transformation */
84
85inline void OS2ToWin32ScreenPos(POINT *dest,POINT *source)
86{
87 dest->x = source->x;
88 dest->y = OSLibWinQuerySysValue(OSLIB_HWND_DESKTOP,SVOS_CYSCREEN)-1-source->y;
89}
90
91inline void Win32ToOS2ScreenPos(POINT *dest,POINT *source)
92{
93 OS2ToWin32ScreenPos(dest,source); //transform back
94}
95
96/* Rectangle Functions - parts from wine/windows/rect.c */
97
98BOOL WIN32API CopyRect( PRECT lprcDst, const RECT * lprcSrc)
99{
100// ddprintf(("USER32: CopyRect\n"));
101 if (!lprcDst || !lprcSrc) {
102 SetLastError(ERROR_INVALID_PARAMETER);
103 return FALSE;
104 }
105
106 memcpy(lprcDst,lprcSrc,sizeof(RECT));
107
108 return TRUE;
109}
110//******************************************************************************
111//******************************************************************************
112BOOL WIN32API EqualRect( const RECT *lprc1, const RECT *lprc2)
113{
114#ifdef DEBUG
115 WriteLog("USER32: EqualRect\n");
116#endif
117 if (!lprc1 || !lprc2)
118 {
119 SetLastError(ERROR_INVALID_PARAMETER);
120 return FALSE;
121 }
122
123 return (lprc1->left == lprc2->left &&
124 lprc1->right == lprc2->right &&
125 lprc1->top == lprc2->top &&
126 lprc1->bottom == lprc2->bottom);
127}
128//******************************************************************************
129//******************************************************************************
130BOOL WIN32API InflateRect( PRECT lprc, int dx, int dy)
131{
132#ifdef DEBUG
133 WriteLog("USER32: InflateRect\n");
134#endif
135 if (!lprc)
136 {
137 SetLastError(ERROR_INVALID_PARAMETER);
138 return FALSE;
139 }
140
141 lprc->left -= dx;
142 lprc->right += dx;
143 lprc->top -= dy;
144 lprc->bottom += dy;
145
146 return TRUE;
147}
148//******************************************************************************
149//******************************************************************************
150BOOL WIN32API IntersectRect( PRECT lprcDst, const RECT * lprcSrc1, const RECT * lprcSrc2)
151{
152#ifdef DEBUG
153//// WriteLog("USER32: IntersectRect\n");
154#endif
155 if (!lprcDst || !lprcSrc1 || !lprcSrc2)
156 {
157 SetLastError(ERROR_INVALID_PARAMETER);
158 return FALSE;
159 }
160
161 if (IsRectEmpty(lprcSrc1) || IsRectEmpty(lprcSrc2) ||
162 (lprcSrc1->left >= lprcSrc2->right) || (lprcSrc2->left >= lprcSrc1->right) ||
163 (lprcSrc1->top >= lprcSrc2->bottom) || (lprcSrc2->top >= lprcSrc1->bottom))
164 {
165 SetLastError(ERROR_INVALID_PARAMETER);
166 SetRectEmpty(lprcDst);
167 return FALSE;
168 }
169 lprcDst->left = MAX(lprcSrc1->left,lprcSrc2->left);
170 lprcDst->right = MIN(lprcSrc1->right,lprcSrc2->right);
171 lprcDst->top = MAX(lprcSrc1->top,lprcSrc2->top);
172 lprcDst->bottom = MIN(lprcSrc1->bottom,lprcSrc2->bottom);
173
174 return TRUE;
175}
176//******************************************************************************
177//******************************************************************************
178BOOL WIN32API IsRectEmpty( const RECT * lprc)
179{
180 if (!lprc)
181 {
182 SetLastError(ERROR_INVALID_PARAMETER);
183 return FALSE;
184 }
185
186 return (lprc->left == lprc->right || lprc->top == lprc->bottom);
187}
188//******************************************************************************
189//******************************************************************************
190BOOL WIN32API OffsetRect( PRECT lprc, int x, int y)
191{
192#ifdef DEBUG
193//// WriteLog("USER32: OffsetRect\n");
194#endif
195 if (!lprc)
196 {
197 SetLastError(ERROR_INVALID_PARAMETER);
198 return FALSE;
199 }
200
201 lprc->left += x;
202 lprc->right += x;
203 lprc->top += y;
204 lprc->bottom += y;
205
206 return TRUE;
207}
208//******************************************************************************
209//******************************************************************************
210BOOL WIN32API PtInRect( const RECT *lprc, POINT pt)
211{
212#ifdef DEBUG1
213 WriteLog("USER32: PtInRect\n");
214#endif
215 if (!lprc)
216 {
217 SetLastError(ERROR_INVALID_PARAMETER);
218 return FALSE;
219 }
220
221 return (pt.x >= lprc->left &&
222 pt.x < lprc->right &&
223 pt.y >= lprc->top &&
224 pt.y < lprc->bottom);
225}
226//******************************************************************************
227//******************************************************************************
228BOOL WIN32API SetRect( PRECT lprc, int nLeft, int nTop, int nRight, int nBottom)
229{
230 if (!lprc)
231 {
232 SetLastError(ERROR_INVALID_PARAMETER);
233 return FALSE;
234 }
235
236 lprc->left = nLeft;
237 lprc->top = nTop;
238 lprc->right = nRight;
239 lprc->bottom = nBottom;
240
241 return TRUE;
242}
243//******************************************************************************
244//******************************************************************************
245BOOL WIN32API SetRectEmpty( PRECT lprc)
246{
247 if (!lprc)
248 {
249 SetLastError(ERROR_INVALID_PARAMETER);
250 return FALSE;
251 }
252
253 lprc->left = lprc->right = lprc->top = lprc->bottom = 0;
254
255 return TRUE;
256}
257//******************************************************************************
258//******************************************************************************
259BOOL WIN32API SubtractRect( PRECT lprcDest, const RECT * lprcSrc1, const RECT * lprcSrc2)
260{
261#ifdef DEBUG
262 WriteLog("USER32: SubtractRect");
263#endif
264 RECT tmp;
265
266 if (!lprcDest || !lprcSrc1 || !lprcSrc2)
267 {
268 SetLastError(ERROR_INVALID_PARAMETER);
269 return FALSE;
270 }
271
272 if (IsRectEmpty(lprcSrc1))
273 {
274 SetLastError(ERROR_INVALID_PARAMETER);
275 SetRectEmpty(lprcDest);
276 return FALSE;
277 }
278 *lprcDest = *lprcSrc1;
279 if (IntersectRect(&tmp,lprcSrc1,lprcSrc2))
280 {
281 if (EqualRect(&tmp,lprcDest))
282 {
283 SetRectEmpty(lprcDest);
284 return FALSE;
285 }
286 if ((tmp.top == lprcDest->top) && (tmp.bottom == lprcDest->bottom))
287 {
288 if (tmp.left == lprcDest->left) lprcDest->left = tmp.right;
289 else if (tmp.right == lprcDest->right) lprcDest->right = tmp.left;
290 }
291 else if ((tmp.left == lprcDest->left) && (tmp.right == lprcDest->right))
292 {
293 if (tmp.top == lprcDest->top) lprcDest->top = tmp.bottom;
294 else if (tmp.bottom == lprcDest->bottom) lprcDest->bottom = tmp.top;
295 }
296 }
297
298 return TRUE;
299}
300//******************************************************************************
301//******************************************************************************
302BOOL WIN32API UnionRect( PRECT lprcDst, const RECT *lprcSrc1, const RECT *lprcSrc2)
303{
304#ifdef DEBUG
305 WriteLog("USER32: UnionRect\n");
306#endif
307 if (!lprcDst || !lprcSrc1 || !lprcSrc2)
308 {
309 SetLastError(ERROR_INVALID_PARAMETER);
310 return FALSE;
311 }
312
313 if (IsRectEmpty(lprcSrc1))
314 {
315 if (IsRectEmpty(lprcSrc2))
316 {
317 SetLastError(ERROR_INVALID_PARAMETER);
318 SetRectEmpty(lprcDst);
319 return FALSE;
320 }
321 else *lprcDst = *lprcSrc2;
322 }
323 else
324 {
325 if (IsRectEmpty(lprcSrc2)) *lprcDst = *lprcSrc1;
326 else
327 {
328 lprcDst->left = MIN(lprcSrc1->left,lprcSrc2->left);
329 lprcDst->right = MAX(lprcSrc1->right,lprcSrc2->right);
330 lprcDst->top = MIN(lprcSrc1->top,lprcSrc2->top);
331 lprcDst->bottom = MAX(lprcSrc1->bottom,lprcSrc2->bottom);
332 }
333 }
334
335 return TRUE;
336}
337
338/* Cursor Functions */
339
340BOOL WIN32API ClipCursor(const RECT * lpRect)
341{
342#ifdef DEBUG
343 WriteLog("USER32: ClipCursor\n");
344#endif
345 return O32_ClipCursor(lpRect);
346}
347//******************************************************************************
348//******************************************************************************
349HCURSOR WIN32API CreateCursor( HINSTANCE hInst, int xHotSpot, int yHotSpot, int nWidth, int nHeight, const VOID *pvANDPlane, const VOID *pvXORPlane)
350{
351#ifdef DEBUG
352 WriteLog("USER32: CreateCursor\n");
353#endif
354 return O32_CreateCursor(hInst,xHotSpot,yHotSpot,nWidth,nHeight,pvANDPlane,pvXORPlane);
355}
356//******************************************************************************
357//******************************************************************************
358BOOL WIN32API DestroyCursor( HCURSOR hCursor)
359{
360#ifdef DEBUG
361 WriteLog("USER32: DestroyCursor\n");
362#endif
363 return O32_DestroyCursor(hCursor);
364}
365//******************************************************************************
366//******************************************************************************
367BOOL WIN32API GetClipCursor( LPRECT lpRect)
368{
369#ifdef DEBUG
370 WriteLog("USER32: GetClipCursor\n");
371#endif
372 return O32_GetClipCursor(lpRect);
373}
374//******************************************************************************
375//******************************************************************************
376HCURSOR WIN32API GetCursor(void)
377{
378#ifdef DEBUG
379//// WriteLog("USER32: GetCursor\n");
380#endif
381 return O32_GetCursor();
382}
383//******************************************************************************
384//******************************************************************************
385BOOL WIN32API GetCursorPos( PPOINT lpPoint)
386{
387 BOOL rc;
388 POINT point;
389#ifdef DEBUG
390//// WriteLog("USER32: GetCursorPos\n");
391#endif
392 if (!lpPoint) return FALSE;
393 if (OSLibWinQueryPointerPos(OSLIB_HWND_DESKTOP,&point)) //POINT == POINTL
394 {
395 OS2ToWin32ScreenPos(lpPoint,&point);
396 return TRUE;
397 } else return FALSE;
398}
399/*****************************************************************************
400 * Name : HCURSOR WIN32API LoadCursorFromFileA
401 * Purpose : The LoadCursorFromFile function creates a cursor based on data
402 * contained in a file. The file is specified by its name or by a
403 * system cursor identifier. The function returns a handle to the
404 * newly created cursor. Files containing cursor data may be in
405 * either cursor (.CUR) or animated cursor (.ANI) format.
406 * Parameters: LPCTSTR lpFileName pointer to cursor file, or system cursor id
407 * Variables :
408 * Result : If the function is successful, the return value is a handle to
409 * the new cursor.
410 * If the function fails, the return value is NULL. To get extended
411 * error information, call GetLastError. GetLastError may return
412 * the following
413 * Remark :
414 * Status : UNTESTED STUB
415 *
416 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
417 *****************************************************************************/
418HCURSOR WIN32API LoadCursorFromFileA(LPCTSTR lpFileName)
419{
420 if (!HIWORD(lpFileName))
421 {
422 return LoadCursorA(NULL,lpFileName);
423 } else
424 {
425 dprintf(("USER32:LoadCursorFromFileA (%s) not implemented.\n",
426 lpFileName));
427
428 return (NULL);
429 }
430}
431/*****************************************************************************
432 * Name : HCURSOR WIN32API LoadCursorFromFileW
433 * Purpose : The LoadCursorFromFile function creates a cursor based on data
434 * contained in a file. The file is specified by its name or by a
435 * system cursor identifier. The function returns a handle to the
436 * newly created cursor. Files containing cursor data may be in
437 * either cursor (.CUR) or animated cursor (.ANI) format.
438 * Parameters: LPCTSTR lpFileName pointer to cursor file, or system cursor id
439 * Variables :
440 * Result : If the function is successful, the return value is a handle to
441 * the new cursor.
442 * If the function fails, the return value is NULL. To get extended
443 * error information, call GetLastError. GetLastError may return
444 * the following
445 * Remark :
446 * Status : UNTESTED STUB
447 *
448 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
449 *****************************************************************************/
450HCURSOR WIN32API LoadCursorFromFileW(LPCWSTR lpFileName)
451{
452 if (!HIWORD(lpFileName))
453 {
454 return LoadCursorW(NULL,lpFileName);
455 } else
456 {
457 dprintf(("USER32:LoadCursorFromFileW (%s) not implemented.\n",
458 lpFileName));
459
460 return (NULL);
461 }
462}
463//******************************************************************************
464//******************************************************************************
465HCURSOR WIN32API SetCursor( HCURSOR hcur)
466{
467 HCURSOR rc;
468
469 rc = O32_SetCursor(hcur);
470 dprintf(("USER32: SetCursor %x (prev %x (%x))\n", hcur, rc, O32_GetCursor()));
471 return rc;
472}
473//******************************************************************************
474//******************************************************************************
475BOOL WIN32API SetCursorPos( int X, int Y)
476{
477#ifdef DEBUG
478 WriteLog("USER32: SetCursorPos\n");
479#endif
480 return O32_SetCursorPos(X,Y);
481}
482/*****************************************************************************
483 * Name : BOOL WIN32API SetSystemCursor
484 * Purpose : The SetSystemCursor function replaces the contents of the system
485 * cursor specified by dwCursorId with the contents of the cursor
486 * specified by hCursor, and then destroys hCursor. This function
487 * lets an application customize the system cursors.
488 * Parameters: HCURSOR hCursor set specified system cursor to this cursor's
489 * contents, then destroy this
490 * DWORD dwCursorID system cursor specified by its identifier
491 * Variables :
492 * Result : If the function succeeds, the return value is TRUE.
493 * If the function fails, the return value is FALSE. To get extended
494 * error information, call GetLastError.
495 * Remark :
496 * Status : UNTESTED STUB
497 *
498 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
499 *****************************************************************************/
500BOOL WIN32API SetSystemCursor(HCURSOR hCursor,
501 DWORD dwCursorId)
502{
503 dprintf(("USER32:SetSystemCursor (%08xh,%08x) not supported.\n",
504 hCursor,
505 dwCursorId));
506
507 return DestroyCursor(hCursor);
508}
509//******************************************************************************
510//******************************************************************************
511int WIN32API ShowCursor( BOOL bShow)
512{
513#ifdef DEBUG
514 WriteLog("USER32: ShowCursor\n");
515#endif
516 return O32_ShowCursor(bShow);
517}
518
519/* Mouse Input Functions */
520
521/*****************************************************************************
522 * Name : BOOL WIN32API DragDetect
523 * Purpose : The DragDetect function captures the mouse and tracks its movement
524 * Parameters: HWND hwnd
525 * POINT pt
526 * Variables :
527 * Result : If the user moved the mouse outside of the drag rectangle while
528 * holding the left button down, the return value is TRUE.
529 * If the user did not move the mouse outside of the drag rectangle
530 * while holding the left button down, the return value is FALSE.
531 * Remark :
532 * Status : UNTESTED STUB
533 *
534 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
535 *****************************************************************************/
536BOOL WIN32API DragDetect(HWND hwnd,
537 POINT pt)
538{
539 dprintf(("USER32:DragDetect(%08xh,...) not implemented.\n",
540 hwnd));
541
542 return (FALSE);
543}
544//******************************************************************************
545//******************************************************************************
546UINT WIN32API GetDoubleClickTime(void)
547{
548#ifdef DEBUG
549 WriteLog("USER32: GetDoubleClickTime\n");
550#endif
551 return O32_GetDoubleClickTime();
552}
553/*****************************************************************************
554 * Name : VOID WIN32API mouse_event
555 * Purpose : The mouse_event function synthesizes mouse motion and button clicks.
556 * Parameters: DWORD dwFlags flags specifying various motion/click variants
557 * DWORD dx horizontal mouse position or position change
558 * DWORD dy vertical mouse position or position change
559 * DWORD cButtons unused, reserved for future use, set to zero
560 * DWORD dwExtraInfo 32 bits of application-defined information
561 * Variables :
562 * Result :
563 * Remark :
564 * Status : UNTESTED STUB
565 *
566 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
567 *****************************************************************************/
568VOID WIN32API mouse_event(DWORD dwFlags,
569 DWORD dx,
570 DWORD dy,
571 DWORD cButtons,
572 DWORD dwExtraInfo)
573{
574 dprintf(("USER32:mouse_event (%08xh,%u,%u,%u,%08x) not implemented.\n",
575 dwFlags,
576 dx,
577 dy,
578 cButtons,
579 dwExtraInfo));
580}
581//******************************************************************************
582//******************************************************************************
583BOOL WIN32API ReleaseCapture(void)
584{
585 dprintf(("USER32: ReleaseCapture"));
586 return O32_ReleaseCapture();
587}
588//******************************************************************************
589//******************************************************************************
590HWND WIN32API GetCapture(void)
591{
592 HWND hwnd;
593
594 hwnd = Win32Window::OS2ToWin32Handle(O32_GetCapture());
595 dprintf(("USER32: GetCapture returned %x", hwnd));
596 return hwnd;
597}
598//******************************************************************************
599//******************************************************************************
600HWND WIN32API SetCapture( HWND hwnd)
601{
602#ifdef DEBUG
603 WriteLog("USER32: SetCapture %x", hwnd);
604#endif
605 hwnd = Win32Window::Win32ToOS2Handle(hwnd);
606 return Win32Window::OS2ToWin32Handle(O32_SetCapture(hwnd));
607}
608//******************************************************************************
609//******************************************************************************
610BOOL WIN32API SetDoubleClickTime( UINT uInterval)
611{
612#ifdef DEBUG
613 WriteLog("USER32: SetDoubleClickTime\n");
614#endif
615 return O32_SetDoubleClickTime(uInterval);
616}
617//******************************************************************************
618//******************************************************************************
619BOOL WIN32API SwapMouseButton( BOOL fSwap)
620{
621#ifdef DEBUG
622 WriteLog("USER32: SwapMouseButton\n");
623#endif
624 return O32_SwapMouseButton(fSwap);
625}
626
627/* Error Functions */
628
629/*****************************************************************************
630 * Name : ExitWindowsEx
631 * Purpose : Shutdown System
632 * Parameters: UINT uFlags
633 * DWORD dwReserved
634 * Variables :
635 * Result : TRUE / FALSE
636 * Remark :
637 * Status :
638 *
639 * Author : Patrick Haller [Tue, 1999/10/20 21:24]
640 *****************************************************************************/
641
642ODINFUNCTION2(BOOL, ExitWindowsEx, UINT, uFlags,
643 DWORD, dwReserved)
644{
645 int rc = MessageBoxA(HWND_DESKTOP,
646 "Are you sure you want to shutdown the system?",
647 "Shutdown ...",
648 MB_YESNOCANCEL | MB_ICONQUESTION);
649 switch (rc)
650 {
651 case IDCANCEL: return (FALSE);
652 case IDYES: break;
653 case IDNO:
654 dprintf(("no shutdown!\n"));
655 return TRUE;
656 }
657
658 return O32_ExitWindowsEx(uFlags,dwReserved);
659}
660
661
662//******************************************************************************
663//******************************************************************************
664BOOL WIN32API MessageBeep( UINT uType)
665{
666 INT flStyle;
667
668#ifdef DEBUG
669 WriteLog("USER32: MessageBeep\n");
670#endif
671
672 switch (uType)
673 {
674 case 0xFFFFFFFF:
675 OSLibDosBeep(500,50);
676 return TRUE;
677 case MB_ICONASTERISK:
678 flStyle = WAOS_NOTE;
679 break;
680 case MB_ICONEXCLAMATION:
681 flStyle = WAOS_WARNING;
682 break;
683 case MB_ICONHAND:
684 case MB_ICONQUESTION:
685 case MB_OK:
686 flStyle = WAOS_NOTE;
687 break;
688 default:
689 flStyle = WAOS_ERROR; //CB: should be right
690 break;
691 }
692 return OSLibWinAlarm(OSLIB_HWND_DESKTOP,flStyle);
693}
694//******************************************************************************
695//2nd parameter not used according to SDK (yet?)
696//******************************************************************************
697VOID WIN32API SetLastErrorEx(DWORD dwErrCode, DWORD dwType)
698{
699#ifdef DEBUG
700 WriteLog("USER32: SetLastErrorEx\n");
701#endif
702 SetLastError(dwErrCode);
703}
704
705/* Accessibility Functions */
706
707int WIN32API GetSystemMetrics(int nIndex)
708{
709 int rc = 0;
710
711 switch(nIndex) {
712 case SM_CXICONSPACING: //TODO: size of grid cell for large icons
713 rc = OSLibWinQuerySysValue(OSLIB_HWND_DESKTOP,SVOS_CXICON);
714 //CB: return standard windows icon size?
715 //rc = 32;
716 break;
717 case SM_CYICONSPACING:
718 rc = OSLibWinQuerySysValue(OSLIB_HWND_DESKTOP,SVOS_CYICON);
719 //read SM_CXICONSPACING comment
720 //rc = 32;
721 break;
722 case SM_PENWINDOWS:
723 rc = FALSE;
724 break;
725 case SM_DBCSENABLED:
726 rc = FALSE;
727 break;
728 case SM_CXEDGE: //size of 3D window edge (not supported)
729 rc = 1;
730 break;
731 case SM_CYEDGE:
732 rc = 1;
733 break;
734 case SM_CXMINSPACING: //can be SM_CXMINIMIZED or larger
735 //CB: replace with const
736 rc = O32_GetSystemMetrics(SM_CXMINIMIZED);
737 break;
738 case SM_CYMINSPACING:
739 //CB: replace with const
740 rc = GetSystemMetrics(SM_CYMINIMIZED);
741 break;
742 case SM_CXICON:
743 case SM_CYICON:
744 rc = 32; //CB: Win32: only 32x32, OS/2 32x32/40x40
745 // we must implement 32x32 for all screen resolutions
746 break;
747 case SM_CXSMICON: //recommended size of small icons (TODO: adjust to screen res.)
748 rc = 16;
749 break;
750 case SM_CYSMICON:
751 rc = 16;
752 break;
753 case SM_CYSMCAPTION: //size in pixels of a small caption (TODO: ????)
754 rc = 8;
755 break;
756 case SM_CXSMSIZE: //size of small caption buttons (pixels) (TODO: implement properly)
757 rc = 16;
758 break;
759 case SM_CYSMSIZE:
760 rc = 16;
761 break;
762 case SM_CXMENUSIZE: //TODO: size of menu bar buttons (such as MDI window close)
763 rc = 16;
764 break;
765 case SM_CYMENUSIZE:
766 rc = 16;
767 break;
768 case SM_ARRANGE:
769 rc = ARW_BOTTOMLEFT | ARW_LEFT;
770 break;
771 case SM_CXMINIMIZED:
772 break;
773 case SM_CYMINIMIZED:
774 break;
775 case SM_CXMAXTRACK: //max window size
776 case SM_CXMAXIMIZED: //max toplevel window size
777 rc = OSLibWinQuerySysValue(OSLIB_HWND_DESKTOP,SVOS_CXSCREEN);
778 break;
779 case SM_CYMAXTRACK:
780 case SM_CYMAXIMIZED:
781 rc = OSLibWinQuerySysValue(OSLIB_HWND_DESKTOP,SVOS_CYSCREEN);
782 break;
783 case SM_NETWORK:
784 rc = 0x01; //TODO: default = yes
785 break;
786 case SM_CLEANBOOT:
787 rc = 0; //normal boot
788 break;
789 case SM_CXDRAG: //nr of pixels before drag becomes a real one
790 rc = 2;
791 break;
792 case SM_CYDRAG:
793 rc = 2;
794 break;
795 case SM_SHOWSOUNDS: //show instead of play sound
796 rc = FALSE;
797 break;
798 case SM_CXMENUCHECK:
799 rc = 4; //TODO
800 break;
801 case SM_CYMENUCHECK:
802 rc = OSLibWinQuerySysValue(OSLIB_HWND_DESKTOP,SVOS_CYMENU);
803 break;
804 case SM_SLOWMACHINE:
805 rc = FALSE; //even a slow machine is fast with OS/2 :)
806 break;
807 case SM_MIDEASTENABLED:
808 rc = FALSE;
809 break;
810 case SM_MOUSEWHEELPRESENT:
811 rc = FALSE;
812 break;
813 case SM_XVIRTUALSCREEN:
814 rc = 0;
815 break;
816 case SM_YVIRTUALSCREEN:
817 rc = 0;
818 break;
819 case SM_CXVIRTUALSCREEN:
820 rc = OSLibWinQuerySysValue(OSLIB_HWND_DESKTOP,SVOS_CXSCREEN);
821 break;
822 case SM_CYVIRTUALSCREEN:
823 rc = OSLibWinQuerySysValue(OSLIB_HWND_DESKTOP,SVOS_CYSCREEN);
824 break;
825 case SM_CMONITORS:
826 rc = 1;
827 break;
828 case SM_SAMEDISPLAYFORMAT:
829 rc = TRUE;
830 break;
831 case SM_CMETRICS:
832 rc = 81;
833 //rc = O32_GetSystemMetrics(44); //Open32 changed this one
834 break;
835 default:
836 //better than nothing
837 rc = O32_GetSystemMetrics(nIndex);
838 break;
839 }
840#ifdef DEBUG
841 WriteLog("USER32: GetSystemMetrics %d returned %d\n", nIndex, rc);
842#endif
843 return(rc);
844}
845//******************************************************************************
846/* Not support by Open32 (not included are the new win9x parameters):
847 case SPI_GETFASTTASKSWITCH:
848 case SPI_GETGRIDGRANULARITY:
849 case SPI_GETICONTITLELOGFONT:
850 case SPI_GETICONTITLEWRAP:
851 case SPI_GETMENUDROPALIGNMENT:
852 case SPI_ICONHORIZONTALSPACING:
853 case SPI_ICONVERTICALSPACING:
854 case SPI_LANGDRIVER:
855 case SPI_SETFASTTASKSWITCH:
856 case SPI_SETGRIDGRANULARITY:
857 case SPI_SETICONTITLELOGFONT:
858 case SPI_SETICONTITLEWRAP:
859 case SPI_SETMENUDROPALIGNMENT:
860 case SPI_GETSCREENSAVEACTIVE:
861 case SPI_GETSCREENSAVETIMEOUT:
862 case SPI_SETDESKPATTERN:
863 case SPI_SETDESKWALLPAPER:
864 case SPI_SETSCREENSAVEACTIVE:
865 case SPI_SETSCREENSAVETIMEOUT:
866*/
867//******************************************************************************
868BOOL WIN32API SystemParametersInfoA(UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni)
869{
870 BOOL rc = TRUE;
871 NONCLIENTMETRICSA *cmetric = (NONCLIENTMETRICSA *)pvParam;
872
873 switch(uiAction) {
874 case SPI_SCREENSAVERRUNNING:
875 *(BOOL *)pvParam = FALSE;
876 break;
877 case SPI_GETDRAGFULLWINDOWS:
878 *(BOOL *)pvParam = FALSE;
879 break;
880 case SPI_GETNONCLIENTMETRICS:
881 memset(cmetric, 0, sizeof(NONCLIENTMETRICSA));
882 cmetric->cbSize = sizeof(NONCLIENTMETRICSA);
883
884 //CB: fonts not handled by Open32, set to WarpSans
885 lstrcpyA(cmetric->lfCaptionFont.lfFaceName,"WarpSans");
886 cmetric->lfCaptionFont.lfHeight = 9;
887
888 lstrcpyA(cmetric->lfMenuFont.lfFaceName,"WarpSans");
889 cmetric->lfMenuFont.lfHeight = 9;
890
891 lstrcpyA(cmetric->lfStatusFont.lfFaceName,"WarpSans");
892 cmetric->lfStatusFont.lfHeight = 9;
893
894 lstrcpyA(cmetric->lfMessageFont.lfFaceName,"WarpSans");
895 cmetric->lfMessageFont.lfHeight = 9;
896
897 cmetric->iBorderWidth = GetSystemMetrics(SM_CXBORDER);
898 cmetric->iScrollWidth = GetSystemMetrics(SM_CXHSCROLL);
899 cmetric->iScrollHeight = GetSystemMetrics(SM_CYHSCROLL);
900 cmetric->iCaptionWidth = 32; //TODO
901 cmetric->iCaptionHeight = 16; //TODO
902 cmetric->iSmCaptionWidth = GetSystemMetrics(SM_CXSMSIZE);
903 cmetric->iSmCaptionHeight = GetSystemMetrics(SM_CYSMSIZE);
904 cmetric->iMenuWidth = 32; //TODO
905 cmetric->iMenuHeight = GetSystemMetrics(SM_CYMENU);
906 break;
907 case SPI_GETICONTITLELOGFONT:
908 {
909 LPLOGFONTA lpLogFont = (LPLOGFONTA)pvParam;
910
911 /* from now on we always have an alias for MS Sans Serif */
912 strcpy(lpLogFont->lfFaceName, "MS Sans Serif");
913 lpLogFont->lfHeight = -GetProfileIntA("Desktop","IconTitleSize", 8);
914 lpLogFont->lfWidth = 0;
915 lpLogFont->lfEscapement = lpLogFont->lfOrientation = 0;
916 lpLogFont->lfWeight = FW_NORMAL;
917 lpLogFont->lfItalic = FALSE;
918 lpLogFont->lfStrikeOut = FALSE;
919 lpLogFont->lfUnderline = FALSE;
920 lpLogFont->lfCharSet = ANSI_CHARSET;
921 lpLogFont->lfOutPrecision = OUT_DEFAULT_PRECIS;
922 lpLogFont->lfClipPrecision = CLIP_DEFAULT_PRECIS;
923 lpLogFont->lfPitchAndFamily = DEFAULT_PITCH | FF_SWISS;
924 break;
925 }
926 case SPI_GETBORDER:
927 *(INT *)pvParam = GetSystemMetrics( SM_CXFRAME );
928 break;
929
930 case SPI_GETWORKAREA:
931 SetRect( (RECT *)pvParam, 0, 0,
932 GetSystemMetrics( SM_CXSCREEN ),
933 GetSystemMetrics( SM_CYSCREEN )
934 );
935 break;
936
937 case 104: //TODO: Undocumented
938 rc = 16;
939 break;
940 default:
941 rc = O32_SystemParametersInfo(uiAction, uiParam, pvParam, fWinIni);
942 break;
943 }
944#ifdef DEBUG
945 WriteLog("USER32: SystemParametersInfoA %d, returned %d\n", uiAction, rc);
946#endif
947 return(rc);
948}
949//******************************************************************************
950//TODO: Check for more options that have different structs for Unicode!!!!
951//******************************************************************************
952BOOL WIN32API SystemParametersInfoW(UINT uiAction, UINT uiParam, PVOID pvParam, UINT fWinIni)
953{
954 BOOL rc;
955 NONCLIENTMETRICSW *clientMetricsW = (NONCLIENTMETRICSW *)pvParam;
956 NONCLIENTMETRICSA clientMetricsA = {0};
957 PVOID pvParamA;
958 UINT uiParamA;
959
960 switch(uiAction) {
961 case SPI_SETNONCLIENTMETRICS:
962 clientMetricsA.cbSize = sizeof(NONCLIENTMETRICSA);
963 clientMetricsA.iBorderWidth = clientMetricsW->iBorderWidth;
964 clientMetricsA.iScrollWidth = clientMetricsW->iScrollWidth;
965 clientMetricsA.iScrollHeight = clientMetricsW->iScrollHeight;
966 clientMetricsA.iCaptionWidth = clientMetricsW->iCaptionWidth;
967 clientMetricsA.iCaptionHeight = clientMetricsW->iCaptionHeight;
968 ConvertFontWA(&clientMetricsW->lfCaptionFont, &clientMetricsA.lfCaptionFont);
969 clientMetricsA.iSmCaptionWidth = clientMetricsW->iSmCaptionWidth;
970 clientMetricsA.iSmCaptionHeight = clientMetricsW->iSmCaptionHeight;
971 ConvertFontWA(&clientMetricsW->lfSmCaptionFont, &clientMetricsA.lfSmCaptionFont);
972 clientMetricsA.iMenuWidth = clientMetricsW->iMenuWidth;
973 clientMetricsA.iMenuHeight = clientMetricsW->iMenuHeight;
974 ConvertFontWA(&clientMetricsW->lfMenuFont, &clientMetricsA.lfMenuFont);
975 ConvertFontWA(&clientMetricsW->lfStatusFont, &clientMetricsA.lfStatusFont);
976 ConvertFontWA(&clientMetricsW->lfMessageFont, &clientMetricsA.lfMessageFont);
977 //no break
978 case SPI_GETNONCLIENTMETRICS:
979 uiParamA = sizeof(NONCLIENTMETRICSA);
980 pvParamA = &clientMetricsA;
981 break;
982 case SPI_GETICONTITLELOGFONT:
983 {
984 LPLOGFONTW lpLogFont = (LPLOGFONTW)pvParam;
985
986 /* from now on we always have an alias for MS Sans Serif */
987 lstrcpyW(lpLogFont->lfFaceName, (LPCWSTR)L"MS Sans Serif");
988 lpLogFont->lfHeight = -GetProfileIntA("Desktop","IconTitleSize", 8);
989 lpLogFont->lfWidth = 0;
990 lpLogFont->lfEscapement = lpLogFont->lfOrientation = 0;
991 lpLogFont->lfWeight = FW_NORMAL;
992 lpLogFont->lfItalic = FALSE;
993 lpLogFont->lfStrikeOut = FALSE;
994 lpLogFont->lfUnderline = FALSE;
995 lpLogFont->lfCharSet = ANSI_CHARSET;
996 lpLogFont->lfOutPrecision = OUT_DEFAULT_PRECIS;
997 lpLogFont->lfClipPrecision = CLIP_DEFAULT_PRECIS;
998 lpLogFont->lfPitchAndFamily = DEFAULT_PITCH | FF_SWISS;
999 return TRUE;
1000 }
1001 default:
1002 pvParamA = pvParam;
1003 uiParamA = uiParam;
1004 break;
1005 }
1006 rc = SystemParametersInfoA(uiAction, uiParamA, pvParamA, fWinIni);
1007
1008 switch(uiAction) {
1009 case SPI_GETNONCLIENTMETRICS:
1010 clientMetricsW->cbSize = sizeof(*clientMetricsW);
1011 clientMetricsW->iBorderWidth = clientMetricsA.iBorderWidth;
1012 clientMetricsW->iScrollWidth = clientMetricsA.iScrollWidth;
1013 clientMetricsW->iScrollHeight = clientMetricsA.iScrollHeight;
1014 clientMetricsW->iCaptionWidth = clientMetricsA.iCaptionWidth;
1015 clientMetricsW->iCaptionHeight = clientMetricsA.iCaptionHeight;
1016 ConvertFontAW(&clientMetricsA.lfCaptionFont, &clientMetricsW->lfCaptionFont);
1017
1018 clientMetricsW->iSmCaptionWidth = clientMetricsA.iSmCaptionWidth;
1019 clientMetricsW->iSmCaptionHeight = clientMetricsA.iSmCaptionHeight;
1020 ConvertFontAW(&clientMetricsA.lfSmCaptionFont, &clientMetricsW->lfSmCaptionFont);
1021
1022 clientMetricsW->iMenuWidth = clientMetricsA.iMenuWidth;
1023 clientMetricsW->iMenuHeight = clientMetricsA.iMenuHeight;
1024 ConvertFontAW(&clientMetricsA.lfMenuFont, &clientMetricsW->lfMenuFont);
1025 ConvertFontAW(&clientMetricsA.lfStatusFont, &clientMetricsW->lfStatusFont);
1026 ConvertFontAW(&clientMetricsA.lfMessageFont, &clientMetricsW->lfMessageFont);
1027 break;
1028 }
1029#ifdef DEBUG
1030 WriteLog("USER32: SystemParametersInfoW %d, returned %d\n", uiAction, rc);
1031#endif
1032 return(rc);
1033}
1034
1035/* Process and Thread Functions */
1036
1037//******************************************************************************
1038//DWORD idAttach; /* thread to attach */
1039//DWORD idAttachTo; /* thread to attach to */
1040//BOOL fAttach; /* attach or detach */
1041//******************************************************************************
1042BOOL WIN32API AttachThreadInput(DWORD idAttach, DWORD idAttachTo, BOOL fAttach)
1043{
1044#ifdef DEBUG
1045 WriteLog("USER32: AttachThreadInput, not implemented\n");
1046#endif
1047 return(TRUE);
1048}
1049//******************************************************************************
1050//TODO:How can we emulate this one in OS/2???
1051//******************************************************************************
1052DWORD WIN32API WaitForInputIdle(HANDLE hProcess, DWORD dwTimeOut)
1053{
1054#ifdef DEBUG
1055 WriteLog("USER32: WaitForInputIdle (Not Implemented) %d\n", dwTimeOut);
1056#endif
1057
1058 if(dwTimeOut == INFINITE) return(0);
1059
1060// DosSleep(dwTimeOut/16);
1061 return(0);
1062}
1063
1064/* Help Functions */
1065
1066DWORD WIN32API GetWindowContextHelpId(HWND hwnd)
1067{
1068#ifdef DEBUG
1069 WriteLog("USER32: GetWindowContextHelpId, not implemented\n");
1070#endif
1071 hwnd = Win32Window::Win32ToOS2Handle(hwnd);
1072
1073 return(0);
1074}
1075//******************************************************************************
1076//******************************************************************************
1077BOOL WIN32API SetWindowContextHelpId(HWND hwnd, DWORD dwContextHelpId)
1078{
1079#ifdef DEBUG
1080 WriteLog("USER32: SetWindowContextHelpId, not implemented\n");
1081#endif
1082 hwnd = Win32Window::Win32ToOS2Handle(hwnd);
1083
1084 return(TRUE);
1085}
1086//******************************************************************************
1087//******************************************************************************
1088BOOL WIN32API WinHelpA( HWND hwnd, LPCSTR lpszHelp, UINT uCommand, DWORD dwData)
1089{
1090#ifdef DEBUG
1091 WriteLog("USER32: WinHelp not implemented %s\n", lpszHelp);
1092#endif
1093// hwnd = Win32Window::Win32ToOS2Handle(hwnd);
1094// return O32_WinHelp(arg1, arg2, arg3, arg4);
1095
1096 return(TRUE);
1097}
1098//******************************************************************************
1099//******************************************************************************
1100BOOL WIN32API WinHelpW( HWND arg1, LPCWSTR arg2, UINT arg3, DWORD arg4)
1101{
1102 char *astring = UnicodeToAsciiString((LPWSTR)arg2);
1103 BOOL rc;
1104
1105#ifdef DEBUG
1106 WriteLog("USER32: WinHelpW\n");
1107#endif
1108 rc = WinHelpA(arg1, astring, arg3, arg4);
1109 FreeAsciiString(astring);
1110 return rc;
1111}
1112
1113/* Keyboard and Input Functions */
1114
1115BOOL WIN32API ActivateKeyboardLayout(HKL hkl, UINT fuFlags)
1116{
1117#ifdef DEBUG
1118 WriteLog("USER32: ActivateKeyboardLayout, not implemented\n");
1119#endif
1120 return(TRUE);
1121}
1122//******************************************************************************
1123//SvL: 24-6-'97 - Added
1124//TODO: Not implemented
1125//******************************************************************************
1126WORD WIN32API GetAsyncKeyState(INT nVirtKey)
1127{
1128#ifdef DEBUG
1129//// WriteLog("USER32: GetAsyncKeyState Not implemented\n");
1130#endif
1131 return 0;
1132}
1133/*****************************************************************************
1134 * Name : UINT WIN32API GetKBCodePage
1135 * Purpose : The GetKBCodePage function is provided for compatibility with
1136 * earlier versions of Windows. In the Win32 application programming
1137 * interface (API) it just calls the GetOEMCP function.
1138 * Parameters:
1139 * Variables :
1140 * Result : If the function succeeds, the return value is an OEM code-page
1141 * identifier, or it is the default identifier if the registry
1142 * value is not readable. For a list of OEM code-page identifiers,
1143 * see GetOEMCP.
1144 * Remark :
1145 * Status : UNTESTED
1146 *
1147 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1148 *****************************************************************************/
1149
1150UINT WIN32API GetKBCodePage(VOID)
1151{
1152 return (GetOEMCP());
1153}
1154/*****************************************************************************
1155 * Name : BOOL WIN32API GetKeyboardLayoutNameA
1156 * Purpose : The GetKeyboardLayoutName function retrieves the name of the
1157 * active keyboard layout.
1158 * Parameters: LPTSTR pwszKLID address of buffer for layout name
1159 * Variables :
1160 * Result : If the function succeeds, the return value is TRUE.
1161 * If the function fails, the return value is FALSE. To get extended
1162 * error information, call GetLastError.
1163 * Remark :
1164 * Status : UNTESTED STUB
1165 *
1166 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1167 *****************************************************************************/
1168// @@@PH Win32 BOOL's are casted to INTs
1169INT WIN32API GetKeyboardLayoutNameA(LPTSTR pwszKLID)
1170{
1171 dprintf(("USER32:GetKeyboardLayoutNameA (%08x) not implemented.",
1172 pwszKLID));
1173
1174 return(FALSE);
1175}
1176//******************************************************************************
1177//******************************************************************************
1178int WIN32API GetKeyboardLayoutList(int nBuff, HKL *lpList)
1179{
1180#ifdef DEBUG
1181 WriteLog("USER32: GetKeyboardLayoutList, not implemented\n");
1182#endif
1183 return(0);
1184}
1185//******************************************************************************
1186//******************************************************************************
1187HKL WIN32API GetKeyboardLayout(DWORD dwLayout)
1188{
1189#ifdef DEBUG
1190 WriteLog("USER32: GetKeyboardLayout, not implemented\n");
1191#endif
1192 return(0);
1193}
1194/*****************************************************************************
1195 * Name : BOOL WIN32API GetKeyboardLayoutNameW
1196 * Purpose : The GetKeyboardLayoutName function retrieves the name of the
1197 * active keyboard layout.
1198 * Parameters: LPTSTR pwszKLID address of buffer for layout name
1199 * Variables :
1200 * Result : If the function succeeds, the return value is TRUE.
1201 * If the function fails, the return value is FALSE. To get extended
1202 * error information, call GetLastError.
1203 * Remark :
1204 * Status : UNTESTED STUB
1205 *
1206 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1207 *****************************************************************************/
1208// @@@PH Win32 BOOL's are casted to INTs
1209INT WIN32API GetKeyboardLayoutNameW(LPWSTR pwszKLID)
1210{
1211 dprintf(("USER32:GetKeyboardLayoutNameW (%08x) not implemented.",
1212 pwszKLID));
1213
1214 return(FALSE);
1215}
1216//******************************************************************************
1217//******************************************************************************
1218BOOL WIN32API GetKeyboardState(PBYTE lpKeyState)
1219{
1220#ifdef DEBUG
1221 WriteLog("USER32: GetKeyboardState, not properly implemented\n");
1222#endif
1223 memset(lpKeyState, 0, 256);
1224 return(TRUE);
1225}
1226//******************************************************************************
1227//******************************************************************************
1228int WIN32API GetKeyNameTextA( LPARAM lParam, LPSTR lpString, int nSize)
1229{
1230#ifdef DEBUG
1231 WriteLog("USER32: GetKeyNameTextA\n");
1232#endif
1233 return O32_GetKeyNameText(lParam,lpString,nSize);
1234}
1235//******************************************************************************
1236//******************************************************************************
1237int WIN32API GetKeyNameTextW( LPARAM lParam, LPWSTR lpString, int nSize)
1238{
1239#ifdef DEBUG
1240 WriteLog("USER32: GetKeyNameTextW DOES NOT WORK\n");
1241#endif
1242 // NOTE: This will not work as is (needs UNICODE support)
1243 return 0;
1244// return O32_GetKeyNameText(arg1, arg2, arg3);
1245}
1246//******************************************************************************
1247//SvL: 24-6-'97 - Added
1248//******************************************************************************
1249SHORT WIN32API GetKeyState( int nVirtKey)
1250{
1251//SvL: Hehe. 32 MB logfile for Opera after a minute.
1252#ifdef DEBUG
1253// WriteLog("USER32: GetKeyState %d\n", nVirtKey);
1254#endif
1255 return O32_GetKeyState(nVirtKey);
1256}
1257/*****************************************************************************
1258 * Name : VOID WIN32API keybd_event
1259 * Purpose : The keybd_event function synthesizes a keystroke. The system
1260 * can use such a synthesized keystroke to generate a WM_KEYUP or
1261 * WM_KEYDOWN message. The keyboard driver's interrupt handler calls
1262 * the keybd_event function.
1263 * Parameters: BYTE bVk virtual-key code
1264
1265 * BYTE bScan hardware scan code
1266 * DWORD dwFlags flags specifying various function options
1267 * DWORD dwExtraInfo additional data associated with keystroke
1268 * Variables :
1269 * Result :
1270 * Remark :
1271 * Status : UNTESTED STUB
1272 *
1273 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1274 *****************************************************************************/
1275VOID WIN32API keybd_event (BYTE bVk,
1276 BYTE bScan,
1277 DWORD dwFlags,
1278 DWORD dwExtraInfo)
1279{
1280 dprintf(("USER32:keybd_event (%u,%u,%08xh,%08x) not implemented.\n",
1281 bVk,
1282 bScan,
1283 dwFlags,
1284 dwExtraInfo));
1285}
1286/*****************************************************************************
1287 * Name : HLK WIN32API LoadKeyboardLayoutA
1288 * Purpose : The LoadKeyboardLayout function loads a new keyboard layout into
1289 * the system. Several keyboard layouts can be loaded at a time, but
1290 * only one per process is active at a time. Loading multiple keyboard
1291 * layouts makes it possible to rapidly switch between layouts.
1292 * Parameters:
1293 * Variables :
1294 * Result : If the function succeeds, the return value is the handle of the
1295 * keyboard layout.
1296 * If the function fails, the return value is NULL. To get extended
1297 * error information, call GetLastError.
1298 * Remark :
1299 * Status : UNTESTED STUB
1300 *
1301 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1302 *****************************************************************************/
1303HKL WIN32API LoadKeyboardLayoutA(LPCTSTR pwszKLID,
1304 UINT Flags)
1305{
1306 dprintf(("USER32:LeadKeyboardLayoutA (%s,%u) not implemented.\n",
1307 pwszKLID,
1308 Flags));
1309
1310 return (NULL);
1311}
1312/*****************************************************************************
1313 * Name : HLK WIN32API LoadKeyboardLayoutW
1314 * Purpose : The LoadKeyboardLayout function loads a new keyboard layout into
1315 * the system. Several keyboard layouts can be loaded at a time, but
1316 * only one per process is active at a time. Loading multiple keyboard
1317 * layouts makes it possible to rapidly switch between layouts.
1318 * Parameters:
1319 * Variables :
1320 * Result : If the function succeeds, the return value is the handle of the
1321 * keyboard layout.
1322 * If the function fails, the return value is NULL. To get extended
1323 * error information, call GetLastError.
1324 * Remark :
1325 * Status : UNTESTED STUB
1326 *
1327 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1328 *****************************************************************************/
1329HKL WIN32API LoadKeyboardLayoutW(LPCWSTR pwszKLID,
1330 UINT Flags)
1331{
1332 dprintf(("USER32:LeadKeyboardLayoutW (%s,%u) not implemented.\n",
1333 pwszKLID,
1334 Flags));
1335
1336 return (NULL);
1337}
1338//******************************************************************************
1339//******************************************************************************
1340UINT WIN32API MapVirtualKeyA( UINT uCode, UINT uMapType)
1341{
1342#ifdef DEBUG
1343 WriteLog("USER32: MapVirtualKeyA\n");
1344#endif
1345 return O32_MapVirtualKey(uCode,uMapType);
1346}
1347//******************************************************************************
1348//******************************************************************************
1349UINT WIN32API MapVirtualKeyW( UINT uCode, UINT uMapType)
1350{
1351#ifdef DEBUG
1352 WriteLog("USER32: MapVirtualKeyW\n");
1353#endif
1354 // NOTE: This will not work as is (needs UNICODE support)
1355 return O32_MapVirtualKey(uCode,uMapType);
1356}
1357/*****************************************************************************
1358 * Name : UINT WIN32API MapVirtualKeyExA
1359 * Purpose : The MapVirtualKeyEx function translates (maps) a virtual-key
1360 * code into a scan code or character value, or translates a scan
1361 * code into a virtual-key code. The function translates the codes
1362 * using the input language and physical keyboard layout identified
1363 * by the given keyboard layout handle.
1364 * Parameters:
1365 * Variables :
1366 * Result : The return value is either a scan code, a virtual-key code, or
1367 * a character value, depending on the value of uCode and uMapType.
1368 * If there is no translation, the return value is zero.
1369 * Remark :
1370 * Status : UNTESTED STUB
1371 *
1372 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1373 *****************************************************************************/
1374UINT WIN32API MapVirtualKeyExA(UINT uCode,
1375 UINT uMapType,
1376 HKL dwhkl)
1377{
1378 dprintf(("USER32:MapVirtualKeyExA (%u,%u,%08x) not implemented.\n",
1379 uCode,
1380 uMapType,
1381 dwhkl));
1382
1383 return (0);
1384}
1385/*****************************************************************************
1386 * Name : UINT WIN32API MapVirtualKeyExW
1387 * Purpose : The MapVirtualKeyEx function translates (maps) a virtual-key
1388 * code into a scan code or character value, or translates a scan
1389 * code into a virtual-key code. The function translates the codes
1390 * using the input language and physical keyboard layout identified
1391 * by the given keyboard layout handle.
1392 * Parameters:
1393 * Variables :
1394 * Result : The return value is either a scan code, a virtual-key code, or
1395 * a character value, depending on the value of uCode and uMapType.
1396 * If there is no translation, the return value is zero.
1397 * Remark :
1398 * Status : UNTESTED STUB
1399
1400 *
1401 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1402 *****************************************************************************/
1403UINT WIN32API MapVirtualKeyExW(UINT uCode,
1404 UINT uMapType,
1405 HKL dwhkl)
1406{
1407 dprintf(("USER32:MapVirtualKeyExW (%u,%u,%08x) not implemented.\n",
1408 uCode,
1409 uMapType,
1410 dwhkl));
1411
1412 return (0);
1413}
1414/*****************************************************************************
1415 * Name : DWORD WIN32API OemKeyScan
1416 * Purpose : The OemKeyScan function maps OEM ASCII codes 0 through 0x0FF
1417 * into the OEM scan codes and shift states. The function provides
1418 * information that allows a program to send OEM text to another
1419 * program by simulating keyboard input.
1420 * Parameters:
1421 * Variables :
1422 * Result :
1423 * Remark :
1424 * Status : UNTESTED STUB
1425 *
1426 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1427 *****************************************************************************/
1428DWORD WIN32API OemKeyScan(WORD wOemChar)
1429{
1430 dprintf(("USER32:OemKeyScan (%u) not implemented.\n",
1431 wOemChar));
1432
1433 return (wOemChar);
1434}
1435//******************************************************************************
1436//******************************************************************************
1437BOOL WIN32API RegisterHotKey(HWND hwnd, int idHotKey, UINT fuModifiers, UINT uVirtKey)
1438{
1439#ifdef DEBUG
1440 WriteLog("USER32: RegisterHotKey, not implemented\n");
1441#endif
1442 hwnd = Win32Window::Win32ToOS2Handle(hwnd);
1443 return(TRUE);
1444}
1445//******************************************************************************
1446//******************************************************************************
1447BOOL WIN32API SetKeyboardState(PBYTE lpKeyState)
1448{
1449#ifdef DEBUG
1450 WriteLog("USER32: SetKeyboardState, not implemented\n");
1451#endif
1452 return(TRUE);
1453}
1454/*****************************************************************************
1455 * Name : int WIN32API ToAscii
1456 * Purpose : The ToAscii function translates the specified virtual-key code
1457 * and keyboard state to the corresponding Windows character or characters.
1458 * Parameters: UINT uVirtKey virtual-key code
1459 * UINT uScanCode scan code
1460 * PBYTE lpbKeyState address of key-state array
1461 * LPWORD lpwTransKey buffer for translated key
1462 * UINT fuState active-menu flag
1463 * Variables :
1464 * Result : 0 The specified virtual key has no translation for the current
1465 * state of the keyboard.
1466 * 1 One Windows character was copied to the buffer.
1467 * 2 Two characters were copied to the buffer. This usually happens
1468 * when a dead-key character (accent or diacritic) stored in the
1469 * keyboard layout cannot be composed with the specified virtual
1470 * key to form a single character.
1471 * Remark :
1472 * Status : UNTESTED STUB
1473 *
1474 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1475 *****************************************************************************/
1476int WIN32API ToAscii(UINT uVirtKey,
1477 UINT uScanCode,
1478 PBYTE lpbKeyState,
1479 LPWORD lpwTransKey,
1480 UINT fuState)
1481{
1482 dprintf(("USER32:ToAscii (%u,%u,%08xh,%08xh,%u) not implemented.\n",
1483 uVirtKey,
1484 uScanCode,
1485 lpbKeyState,
1486 lpwTransKey,
1487 fuState));
1488
1489 return (0);
1490}
1491/*****************************************************************************
1492 * Name : int WIN32API ToAsciiEx
1493 * Purpose : The ToAscii function translates the specified virtual-key code
1494 * and keyboard state to the corresponding Windows character or characters.
1495 * Parameters: UINT uVirtKey virtual-key code
1496 * UINT uScanCode scan code
1497 * PBYTE lpbKeyState address of key-state array
1498 * LPWORD lpwTransKey buffer for translated key
1499 * UINT fuState active-menu flag
1500 * HLK hlk keyboard layout handle
1501 * Variables :
1502 * Result : 0 The specified virtual key has no translation for the current
1503 * state of the keyboard.
1504 * 1 One Windows character was copied to the buffer.
1505 * 2 Two characters were copied to the buffer. This usually happens
1506 * when a dead-key character (accent or diacritic) stored in the
1507 * keyboard layout cannot be composed with the specified virtual
1508 * key to form a single character.
1509 * Remark :
1510 * Status : UNTESTED STUB
1511 *
1512 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1513 *****************************************************************************/
1514int WIN32API ToAsciiEx(UINT uVirtKey,
1515 UINT uScanCode,
1516 PBYTE lpbKeyState,
1517 LPWORD lpwTransKey,
1518 UINT fuState,
1519 HKL hkl)
1520{
1521 dprintf(("USER32:ToAsciiEx (%u,%u,%08xh,%08xh,%u,%08x) not implemented.\n",
1522 uVirtKey,
1523 uScanCode,
1524 lpbKeyState,
1525 lpwTransKey,
1526 fuState,
1527 hkl));
1528
1529 return (0);
1530}
1531/*****************************************************************************
1532 * Name : int WIN32API ToUnicode
1533 * Purpose : The ToUnicode function translates the specified virtual-key code
1534 * and keyboard state to the corresponding Unicode character or characters.
1535 * Parameters: UINT wVirtKey virtual-key code
1536 * UINT wScanCode scan code
1537 * PBYTE lpKeyState address of key-state array
1538 * LPWSTR pwszBuff buffer for translated key
1539 * int cchBuff size of translated key buffer
1540 * UINT wFlags set of function-conditioning flags
1541 * Variables :
1542 * Result : - 1 The specified virtual key is a dead-key character (accent or
1543 * diacritic). This value is returned regardless of the keyboard
1544 * layout, even if several characters have been typed and are
1545 * stored in the keyboard state. If possible, even with Unicode
1546 * keyboard layouts, the function has written a spacing version of
1547 * the dead-key character to the buffer specified by pwszBuffer.
1548 * For example, the function writes the character SPACING ACUTE
1549 * (0x00B4), rather than the character NON_SPACING ACUTE (0x0301).
1550 * 0 The specified virtual key has no translation for the current
1551 * state of the keyboard. Nothing was written to the buffer
1552 * specified by pwszBuffer.
1553 * 1 One character was written to the buffer specified by pwszBuffer.
1554 * 2 or more Two or more characters were written to the buffer specified by
1555 * pwszBuff. The most common cause for this is that a dead-key
1556 * character (accent or diacritic) stored in the keyboard layout
1557 * could not be combined with the specified virtual key to form a
1558 * single character.
1559 * Remark :
1560 * Status : UNTESTED STUB
1561 *
1562 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1563 *****************************************************************************/
1564int WIN32API ToUnicode(UINT uVirtKey,
1565 UINT uScanCode,
1566 PBYTE lpKeyState,
1567 LPWSTR pwszBuff,
1568 int cchBuff,
1569 UINT wFlags)
1570{
1571 dprintf(("USER32:ToUnicode (%u,%u,%08xh,%08xh,%u,%08x) not implemented.\n",
1572 uVirtKey,
1573 uScanCode,
1574 lpKeyState,
1575 pwszBuff,
1576 cchBuff,
1577 wFlags));
1578
1579 return (0);
1580}
1581/*****************************************************************************
1582 * Name : BOOL WIN32API UnloadKeyboardLayout
1583 * Purpose : The UnloadKeyboardLayout function removes a keyboard layout.
1584 * Parameters: HKL hkl handle of keyboard layout
1585 * Variables :
1586 * Result : If the function succeeds, the return value is the handle of the
1587 * keyboard layout; otherwise, it is NULL. To get extended error
1588 * information, use the GetLastError function.
1589 * Remark :
1590 * Status : UNTESTED STUB
1591 *
1592 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1593 *****************************************************************************/
1594BOOL WIN32API UnloadKeyboardLayout (HKL hkl)
1595{
1596 dprintf(("USER32:UnloadKeyboardLayout (%08x) not implemented.\n",
1597 hkl));
1598
1599 return (0);
1600}
1601//******************************************************************************
1602//******************************************************************************
1603BOOL WIN32API UnregisterHotKey(HWND hwnd, int idHotKey)
1604{
1605#ifdef DEBUG
1606 WriteLog("USER32: UnregisterHotKey, not implemented\n");
1607#endif
1608 hwnd = Win32Window::Win32ToOS2Handle(hwnd);
1609
1610 return(TRUE);
1611}
1612//******************************************************************************
1613//SvL: 24-6-'97 - Added
1614//******************************************************************************
1615WORD WIN32API VkKeyScanA( char ch)
1616{
1617#ifdef DEBUG
1618 WriteLog("USER32: VkKeyScanA\n");
1619#endif
1620 return O32_VkKeyScan(ch);
1621}
1622//******************************************************************************
1623//******************************************************************************
1624WORD WIN32API VkKeyScanW( WCHAR wch)
1625{
1626#ifdef DEBUG
1627 WriteLog("USER32: VkKeyScanW\n");
1628#endif
1629 // NOTE: This will not work as is (needs UNICODE support)
1630 return O32_VkKeyScan((char)wch);
1631}
1632/*****************************************************************************
1633 * Name : SHORT WIN32API VkKeyScanExW
1634 * Purpose : The VkKeyScanEx function translates a character to the
1635 * corresponding virtual-key code and shift state. The function
1636 * translates the character using the input language and physical
1637 * keyboard layout identified by the given keyboard layout handle.
1638 * Parameters: UINT uChar character to translate
1639 * HKL hkl keyboard layout handle
1640 * Variables :
1641 * Result : see docs
1642 * Remark :
1643 * Status : UNTESTED STUB
1644 *
1645 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1646 *****************************************************************************/
1647WORD WIN32API VkKeyScanExW(WCHAR uChar,
1648 HKL hkl)
1649{
1650 dprintf(("USER32:VkKeyScanExW (%u,%08x) not implemented.\n",
1651 uChar,
1652 hkl));
1653
1654 return (uChar);
1655}
1656/*****************************************************************************
1657 * Name : SHORT WIN32API VkKeyScanExA
1658 * Purpose : The VkKeyScanEx function translates a character to the
1659 * corresponding virtual-key code and shift state. The function
1660 * translates the character using the input language and physical
1661 * keyboard layout identified by the given keyboard layout handle.
1662 * Parameters: UINT uChar character to translate
1663 * HKL hkl keyboard layout handle
1664 * Variables :
1665 * Result : see docs
1666 * Remark :
1667 * Status : UNTESTED STUB
1668 *
1669 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1670 *****************************************************************************/
1671WORD WIN32API VkKeyScanExA(CHAR uChar,
1672 HKL hkl)
1673{
1674 dprintf(("USER32:VkKeyScanExA (%u,%08x) not implemented.\n",
1675 uChar,
1676 hkl));
1677
1678 return (uChar);
1679}
1680
1681/* Synchronization Functions */
1682ODINFUNCTION5(DWORD,MsgWaitForMultipleObjects,DWORD, nCount,
1683 LPHANDLE, pHandles,
1684 BOOL, fWaitAll,
1685 DWORD, dwMilliseconds,
1686 DWORD, dwWakeMask)
1687{
1688 // @@@PH that's a really difficult function to implement
1689
1690 // @@@PH this is a temporary bugfix for WINFILE.EXE
1691 if (nCount == 0)
1692 {
1693 // only listens to incoming thread messages.
1694 return (WAIT_OBJECT_0);
1695 }
1696
1697 return O32_MsgWaitForMultipleObjects(nCount,pHandles,fWaitAll,dwMilliseconds,dwWakeMask);
1698}
1699
1700/* Button Functions */
1701
1702BOOL WIN32API CheckRadioButton( HWND hDlg, UINT nIDFirstButton, UINT nIDLastButton, UINT nIDCheckButton)
1703{
1704#ifdef DEBUG
1705 WriteLog("USER32: CheckRadioButton\n");
1706#endif
1707 //CB: check radio buttons in interval
1708 if (nIDFirstButton > nIDLastButton)
1709 {
1710 SetLastError(ERROR_INVALID_PARAMETER);
1711 return (FALSE);
1712 }
1713
1714 for (UINT x = nIDFirstButton;x <= nIDLastButton;x++)
1715 {
1716 SendDlgItemMessageA(hDlg,x,BM_SETCHECK,(x == nIDCheckButton) ? BST_CHECKED : BST_UNCHECKED,0);
1717 }
1718
1719 return (TRUE);
1720}
1721
1722/* Window Functions */
1723
1724/*****************************************************************************
1725 * Name : BOOL WIN32API AnyPopup
1726 * Purpose : The AnyPopup function indicates whether an owned, visible,
1727 * top-level pop-up, or overlapped window exists on the screen. The
1728 * function searches the entire Windows screen, not just the calling
1729 * application's client area.
1730 * Parameters: VOID
1731 * Variables :
1732 * Result : If a pop-up window exists, the return value is TRUE even if the
1733 * pop-up window is completely covered by other windows. Otherwise,
1734 * it is FALSE.
1735 * Remark : AnyPopup is a Windows version 1.x function and is retained for
1736 * compatibility purposes. It is generally not useful.
1737 * Status : UNTESTED STUB
1738 *
1739 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1740 *****************************************************************************/
1741BOOL WIN32API AnyPopup(VOID)
1742{
1743 dprintf(("USER32:AnyPopup() not implemented.\n"));
1744
1745 return (FALSE);
1746}
1747//******************************************************************************
1748//******************************************************************************
1749HWND WIN32API GetForegroundWindow(void)
1750{
1751#ifdef DEBUG
1752 WriteLog("USER32: GetForegroundWindow\n");
1753#endif
1754 return Win32Window::OS2ToWin32Handle(O32_GetForegroundWindow());
1755}
1756//******************************************************************************
1757//******************************************************************************
1758HWND WIN32API GetLastActivePopup( HWND hWnd)
1759{
1760#ifdef DEBUG
1761 WriteLog("USER32: GetLastActivePopup\n");
1762#endif
1763 hWnd = Win32Window::Win32ToOS2Handle(hWnd);
1764
1765 return Win32Window::OS2ToWin32Handle(O32_GetLastActivePopup(hWnd));
1766}
1767//******************************************************************************
1768//******************************************************************************
1769DWORD WIN32API GetWindowThreadProcessId(HWND hWnd, PDWORD lpdwProcessId)
1770{
1771#ifdef DEBUG
1772 WriteLog("USER32: GetWindowThreadProcessId\n");
1773#endif
1774 hWnd = Win32Window::Win32ToOS2Handle(hWnd);
1775
1776 return O32_GetWindowThreadProcessId(hWnd,lpdwProcessId);
1777}
1778
1779/* Painting and Drawing Functions */
1780
1781INT WIN32API ExcludeUpdateRgn( HDC hDC, HWND hWnd)
1782{
1783#ifdef DEBUG
1784 WriteLog("USER32: ExcludeUpdateRgn\n");
1785#endif
1786 hWnd = Win32Window::Win32ToOS2Handle(hWnd);
1787
1788 return O32_ExcludeUpdateRgn(hDC,hWnd);
1789}
1790//******************************************************************************
1791//******************************************************************************
1792/*****************************************************************************
1793 * Name : int WIN32API GetWindowRgn
1794 * Purpose : The GetWindowRgn function obtains a copy of the window region of a window.
1795 * Parameters: HWND hWnd handle to window whose window region is to be obtained
1796 * HRGN hRgn handle to region that receives a copy of the window region
1797 * Variables :
1798 * Result : NULLREGION, SIMPLEREGION, COMPLEXREGION, ERROR
1799 * Remark :
1800 * Status : UNTESTED STUB
1801 *
1802 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1803 *****************************************************************************/
1804
1805int WIN32API GetWindowRgn (HWND hWnd,
1806 HRGN hRgn)
1807{
1808 dprintf(("USER32:GetWindowRgn (%08xh,%08x) not implemented.\n",
1809 hWnd,
1810 hRgn));
1811 //Attention: Win32 hwnd handle!
1812
1813 return (NULLREGION);
1814}
1815//******************************************************************************
1816//TODO: Not complete
1817//******************************************************************************
1818BOOL WIN32API GrayStringA(HDC hdc, HBRUSH hBrush, GRAYSTRINGPROC lpOutputFunc,
1819 LPARAM lpData, int nCount, int X, int Y, int nWidth,
1820 int nHeight)
1821{
1822 BOOL rc;
1823 COLORREF curclr;
1824
1825#ifdef DEBUG
1826 WriteLog("USER32: GrayStringA, not completely implemented\n");
1827#endif
1828 if(lpOutputFunc == NULL && lpData == NULL) {
1829#ifdef DEBUG
1830 WriteLog("USER32: lpOutputFunc == NULL && lpData == NULL\n");
1831#endif
1832 return(FALSE);
1833 }
1834 if(lpOutputFunc) {
1835 return(lpOutputFunc(hdc, lpData, nCount));
1836 }
1837 curclr = SetTextColor(hdc, GetSysColor(COLOR_GRAYTEXT));
1838 rc = TextOutA(hdc, X, Y, (char *)lpData, nCount);
1839 SetTextColor(hdc, curclr);
1840
1841 return(rc);
1842}
1843//******************************************************************************
1844//******************************************************************************
1845BOOL WIN32API GrayStringW(HDC hdc, HBRUSH hBrush, GRAYSTRINGPROC lpOutputFunc,
1846 LPARAM lpData, int nCount, int X, int Y, int nWidth,
1847 int nHeight)
1848{
1849 BOOL rc;
1850 char *astring;
1851 COLORREF curclr;
1852
1853#ifdef DEBUG
1854 WriteLog("USER32: GrayStringW, not completely implemented\n");
1855#endif
1856
1857 if(lpOutputFunc == NULL && lpData == NULL) {
1858#ifdef DEBUG
1859 WriteLog("USER32: lpOutputFunc == NULL && lpData == NULL\n");
1860#endif
1861 return(FALSE);
1862 }
1863 if(nCount == 0)
1864 nCount = UniStrlen((UniChar*)lpData);
1865
1866 if(lpOutputFunc) {
1867 return(lpOutputFunc(hdc, lpData, nCount));
1868 }
1869 astring = UnicodeToAsciiString((LPWSTR)lpData);
1870
1871 curclr = SetTextColor(hdc, GetSysColor(COLOR_GRAYTEXT));
1872 rc = TextOutA(hdc, X, Y, astring, nCount);
1873 SetTextColor(hdc, curclr);
1874
1875 FreeAsciiString(astring);
1876 return(rc);
1877}
1878//******************************************************************************
1879//******************************************************************************
1880#if 0
1881BOOL WIN32API InvalidateRgn( HWND hWnd, HRGN hRgn, BOOL bErase)
1882{
1883#ifdef DEBUG
1884 WriteLog("USER32: InvalidateRgn\n");
1885#endif
1886 hWnd = Win32Window::Win32ToOS2Handle(hWnd);
1887
1888 return O32_InvalidateRgn(hWnd,hRgn,bErase);
1889}
1890#endif
1891/*****************************************************************************
1892 * Name : BOOL WIN32API PaintDesktop
1893 * Purpose : The PaintDesktop function fills the clipping region in the
1894 * specified device context with the desktop pattern or wallpaper.
1895 * The function is provided primarily for shell desktops.
1896 * Parameters:
1897 * Variables :
1898 * Result : If the function succeeds, the return value is TRUE.
1899 * If the function fails, the return value is FALSE.
1900 * Remark :
1901 * Status : UNTESTED STUB
1902 *
1903 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1904 *****************************************************************************/
1905BOOL WIN32API PaintDesktop(HDC hdc)
1906{
1907 dprintf(("USER32:PaintDesktop (%08x) not implemented.\n",
1908 hdc));
1909
1910 return (FALSE);
1911}
1912/*****************************************************************************
1913 * Name : int WIN32API SetWindowRgn
1914 * Purpose : The SetWindowRgn function sets the window region of a window. The
1915 * window region determines the area within the window where the
1916 * operating system permits drawing. The operating system does not
1917 * display any portion of a window that lies outside of the window region
1918 * Parameters: HWND hWnd handle to window whose window region is to be set
1919 * HRGN hRgn handle to region
1920 * BOOL bRedraw window redraw flag
1921 * Variables :
1922 * Result : If the function succeeds, the return value is non-zero.
1923 * If the function fails, the return value is zero.
1924 * Remark :
1925 * Status : UNTESTED STUB
1926 *
1927 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
1928 *****************************************************************************/
1929
1930int WIN32API SetWindowRgn(HWND hWnd,
1931 HRGN hRgn,
1932 BOOL bRedraw)
1933{
1934 dprintf(("USER32:SetWindowRgn (%08xh,%08xh,%u) not implemented.\n",
1935 hWnd,
1936 hRgn,
1937 bRedraw));
1938 //Attention: Win32 hwnd handle!
1939
1940 return (0);
1941}
1942//******************************************************************************
1943//******************************************************************************
1944BOOL WIN32API ValidateRect( HWND hwnd, const RECT * lprc)
1945{
1946#ifdef DEBUG
1947 WriteLog("USER32: ValidateRect\n");
1948#endif
1949 hwnd = Win32Window::Win32ToOS2Handle(hwnd);
1950
1951 return O32_ValidateRect(hwnd,lprc);
1952}
1953//******************************************************************************
1954//******************************************************************************
1955BOOL WIN32API ValidateRgn( HWND hwnd, HRGN hrgn)
1956{
1957#ifdef DEBUG
1958 WriteLog("USER32: ValidateRgn\n");
1959#endif
1960 hwnd = Win32Window::Win32ToOS2Handle(hwnd);
1961
1962 return O32_ValidateRgn(hwnd,hrgn);
1963}
1964
1965/* Filled Shape Functions */
1966
1967
1968int WIN32API FillRect(HDC hDC, const RECT * lprc, HBRUSH hbr)
1969{
1970#ifdef DEBUG
1971 WriteLog("USER32: FillRect (%d,%d)(%d,%d) brush %X\n", lprc->left, lprc->top, lprc->right, lprc->bottom, hbr);
1972#endif
1973 return O32_FillRect(hDC,lprc,hbr);
1974}
1975//******************************************************************************
1976//******************************************************************************
1977int WIN32API FrameRect( HDC hDC, const RECT * lprc, HBRUSH hbr)
1978{
1979#ifdef DEBUG
1980 WriteLog("USER32: FrameRect\n");
1981#endif
1982 return O32_FrameRect(hDC,lprc,hbr);
1983}
1984//******************************************************************************
1985//******************************************************************************
1986BOOL WIN32API InvertRect( HDC hDC, const RECT * lprc)
1987{
1988#ifdef DEBUG
1989 WriteLog("USER32: InvertRect\n");
1990#endif
1991 return O32_InvertRect(hDC,lprc);
1992}
1993
1994/* System Information Functions */
1995
1996int WIN32API GetKeyboardType( int nTypeFlag)
1997{
1998#ifdef DEBUG
1999 WriteLog("USER32: GetKeyboardType\n");
2000#endif
2001 return O32_GetKeyboardType(nTypeFlag);
2002}
2003/*****************************************************************************
2004 * Name : HDESK WIN32API GetThreadDesktop
2005 * Purpose : The GetThreadDesktop function returns a handle to the desktop
2006 * associated with a specified thread.
2007 * Parameters: DWORD dwThreadId thread identifier
2008 * Variables :
2009 * Result : If the function succeeds, the return value is the handle of the
2010 * desktop associated with the specified thread.
2011 * Remark :
2012 * Status : UNTESTED STUB
2013 *
2014 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2015 *****************************************************************************/
2016HDESK WIN32API GetThreadDesktop(DWORD dwThreadId)
2017{
2018 dprintf(("USER32:GetThreadDesktop (%u) not implemented.\n",
2019 dwThreadId));
2020
2021 return (NULL);
2022}
2023
2024/* Message and Message Queue Functions */
2025
2026/*****************************************************************************
2027 * Name : BOOL WIN32API GetInputState
2028 * Purpose : The GetInputState function determines whether there are
2029 * mouse-button or keyboard messages in the calling thread's message queue.
2030 * Parameters:
2031 * Variables :
2032 * Result : If the queue contains one or more new mouse-button or keyboard
2033 * messages, the return value is TRUE.
2034 * If the function fails, the return value is FALSE.
2035 * Remark :
2036 * Status : UNTESTED STUB
2037 *
2038 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2039 *****************************************************************************/
2040BOOL WIN32API GetInputState(VOID)
2041{
2042 dprintf(("USER32:GetInputState () not implemented.\n"));
2043
2044 return (FALSE);
2045}
2046//******************************************************************************
2047//******************************************************************************
2048DWORD WIN32API GetQueueStatus( UINT flags)
2049{
2050#ifdef DEBUG
2051 WriteLog("USER32: GetQueueStatus\n");
2052#endif
2053 return O32_GetQueueStatus(flags);
2054}
2055
2056/* Font and Text Functions */
2057
2058DWORD WIN32API GetTabbedTextExtentA( HDC hDC, LPCSTR lpString, int nCount, int nTabPositions, LPINT lpnTabStopPositions)
2059{
2060#ifdef DEBUG
2061 WriteLog("USER32: GetTabbedTextExtentA\n");
2062#endif
2063 return O32_GetTabbedTextExtent(hDC,lpString,nCount,nTabPositions,lpnTabStopPositions);
2064}
2065//******************************************************************************
2066//******************************************************************************
2067DWORD WIN32API GetTabbedTextExtentW( HDC hDC, LPCWSTR lpString, int nCount, int nTabPositions, LPINT lpnTabStopPositions)
2068{
2069 char *astring = UnicodeToAsciiString((LPWSTR)lpString);
2070 DWORD rc;
2071
2072#ifdef DEBUG
2073 WriteLog("USER32: GetTabbedTextExtentW\n");
2074#endif
2075 rc = O32_GetTabbedTextExtent(hDC,astring,nCount,nTabPositions,lpnTabStopPositions);
2076 FreeAsciiString(astring);
2077 return rc;
2078}
2079//******************************************************************************
2080//******************************************************************************
2081LONG WIN32API TabbedTextOutA( HDC hdc, int x, int y, LPCSTR lpString, int nCount, int nTabPositions, LPINT lpnTabStopPositions, int nTabOrigin)
2082{
2083#ifdef DEBUG
2084 WriteLog("USER32: TabbedTextOutA\n");
2085#endif
2086 return O32_TabbedTextOut(hdc,x,y,lpString,nCount,nTabPositions,lpnTabStopPositions,nTabOrigin);
2087}
2088//******************************************************************************
2089//******************************************************************************
2090LONG WIN32API TabbedTextOutW( HDC hdc, int x, int y, LPCWSTR lpString, int nCount, int nTabPositions, LPINT lpnTabStopPositions, int nTabOrigin)
2091{
2092 char *astring = UnicodeToAsciiString((LPWSTR)lpString);
2093 LONG rc;
2094
2095#ifdef DEBUG
2096 WriteLog("USER32: TabbedTextOutW\n");
2097#endif
2098 rc = O32_TabbedTextOut(hdc,x,y,astring,nCount,nTabPositions,lpnTabStopPositions,nTabOrigin);
2099 FreeAsciiString(astring);
2100 return rc;
2101}
2102
2103/* Icon Functions */
2104int WIN32API LookupIconIdFromDirectory(PBYTE presbits, BOOL fIcon)
2105{
2106#ifdef DEBUG
2107 WriteLog("USER32: LookupIconIdFromDirectory, not implemented\n");
2108#endif
2109 return(0);
2110}
2111//******************************************************************************
2112//******************************************************************************
2113int WIN32API LookupIconIdFromDirectoryEx(PBYTE presbits, BOOL fIcon,
2114 int cxDesired, int cyDesired,
2115 UINT Flags)
2116{
2117#ifdef DEBUG
2118 WriteLog("USER32: LookupIconIdFromDirectoryEx, not implemented\n");
2119#endif
2120 return(0);
2121}
2122
2123/* Device Context Functions */
2124
2125BOOL WIN32API GetMonitorInfoA(HMONITOR,LPMONITORINFO)
2126{
2127#ifdef DEBUG
2128 WriteLog("USER32: GetMonitorInfoA not supported!!\n");
2129#endif
2130 return(FALSE);
2131}
2132//******************************************************************************
2133//******************************************************************************
2134BOOL WIN32API GetMonitorInfoW(HMONITOR,LPMONITORINFO)
2135{
2136#ifdef DEBUG
2137 WriteLog("USER32: GetMonitorInfoW not supported!!\n");
2138#endif
2139 return(FALSE);
2140}
2141//******************************************************************************
2142//******************************************************************************
2143HMONITOR WIN32API MonitorFromWindow(HWND hwnd, DWORD dwFlags)
2144{
2145#ifdef DEBUG
2146 WriteLog("USER32: MonitorFromWindow not correctly supported??\n");
2147#endif
2148 //Attention: Win32 hwnd!
2149
2150 return(0);
2151}
2152//******************************************************************************
2153//******************************************************************************
2154HMONITOR WIN32API MonitorFromRect(LPRECT rect, DWORD dwFlags)
2155{
2156#ifdef DEBUG
2157 WriteLog("USER32: MonitorFromRect not correctly supported??\n");
2158#endif
2159 return(0);
2160}
2161//******************************************************************************
2162//******************************************************************************
2163HMONITOR WIN32API MonitorFromPoint(POINT point, DWORD dwflags)
2164{
2165#ifdef DEBUG
2166 WriteLog("USER32: MonitorFromPoint not correctly supported??\n");
2167#endif
2168 return(0);
2169}
2170//******************************************************************************
2171//******************************************************************************
2172BOOL WIN32API EnumDisplayMonitors(HDC,LPRECT,MONITORENUMPROC,LPARAM)
2173{
2174#ifdef DEBUG
2175 WriteLog("USER32: EnumDisplayMonitors not supported??\n");
2176#endif
2177 return(FALSE);
2178}
2179//******************************************************************************
2180//******************************************************************************
2181BOOL WIN32API EnumDisplaySettingsA(LPCSTR lpszDeviceName, DWORD iModeNum,
2182 LPDEVMODEA lpDevMode)
2183{
2184#ifdef DEBUG
2185 WriteLog("USER32: EnumDisplaySettingsA FAKED\n");
2186#endif
2187 switch(iModeNum) {
2188 case 0:
2189 lpDevMode->dmBitsPerPel = 16;
2190 lpDevMode->dmPelsWidth = 768;
2191 lpDevMode->dmPelsHeight = 1024;
2192 lpDevMode->dmDisplayFlags = 0;
2193 lpDevMode->dmDisplayFrequency = 70;
2194 break;
2195 case 1:
2196 lpDevMode->dmBitsPerPel = 16;
2197 lpDevMode->dmPelsWidth = 640;
2198 lpDevMode->dmPelsHeight = 480;
2199 lpDevMode->dmDisplayFlags = 0;
2200 lpDevMode->dmDisplayFrequency = 70;
2201 break;
2202 default:
2203 return(FALSE);
2204 }
2205 return(TRUE);
2206}
2207/*****************************************************************************
2208 * Name : BOOL WIN32API EnumDisplaySettingsW
2209 * Purpose : The EnumDisplaySettings function obtains information about one
2210 * of a display device's graphics modes. You can obtain information
2211 * for all of a display device's graphics modes by making a series
2212 * of calls to this function.
2213 * Parameters: LPCTSTR lpszDeviceName specifies the display device
2214 * DWORD iModeNum specifies the graphics mode
2215 * LPDEVMODE lpDevMode points to structure to receive settings
2216 * Variables :
2217 * Result : If the function succeeds, the return value is TRUE.
2218 * If the function fails, the return value is FALSE.
2219 * Remark :
2220 * Status : UNTESTED STUB
2221 *
2222 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2223 *****************************************************************************/
2224BOOL WIN32API EnumDisplaySettingsW(LPCSTR lpszDeviceName,
2225 DWORD iModeNum,
2226 LPDEVMODEW lpDevMode)
2227{
2228 dprintf(("USER32:EnumDisplaySettingsW (%s,%08xh,%08x) not implemented.\n",
2229 lpszDeviceName,
2230 iModeNum,
2231 lpDevMode));
2232
2233 return (EnumDisplaySettingsA(lpszDeviceName,
2234 iModeNum,
2235 (LPDEVMODEA)lpDevMode));
2236}
2237//******************************************************************************
2238//******************************************************************************
2239LONG WIN32API ChangeDisplaySettingsA(LPDEVMODEA lpDevMode, DWORD dwFlags)
2240{
2241#ifdef DEBUG
2242 if(lpDevMode) {
2243 WriteLog("USER32: ChangeDisplaySettingsA FAKED %X\n", dwFlags);
2244 WriteLog("USER32: ChangeDisplaySettingsA lpDevMode->dmBitsPerPel %d\n", lpDevMode->dmBitsPerPel);
2245 WriteLog("USER32: ChangeDisplaySettingsA lpDevMode->dmPelsWidth %d\n", lpDevMode->dmPelsWidth);
2246 WriteLog("USER32: ChangeDisplaySettingsA lpDevMode->dmPelsHeight %d\n", lpDevMode->dmPelsHeight);
2247 }
2248#endif
2249 return(DISP_CHANGE_SUCCESSFUL);
2250}
2251/*****************************************************************************
2252 * Name : LONG WIN32API ChangeDisplaySettingsW
2253 * Purpose : The ChangeDisplaySettings function changes the display settings
2254 * to the specified graphics mode.
2255 * Parameters: LPDEVMODEW lpDevModeW
2256 * DWORD dwFlags
2257 * Variables :
2258 * Result : DISP_CHANGE_SUCCESSFUL The settings change was successful.
2259 * DISP_CHANGE_RESTART The computer must be restarted in order for the graphics mode to work.
2260 * DISP_CHANGE_BADFLAGS An invalid set of flags was passed in.
2261 * DISP_CHANGE_FAILED The display driver failed the specified graphics mode.
2262 * DISP_CHANGE_BADMODE The graphics mode is not supported.
2263 * DISP_CHANGE_NOTUPDATED Unable to write settings to the registry.
2264 * Remark :
2265 * Status : UNTESTED STUB
2266 *
2267 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2268 *****************************************************************************/
2269LONG WIN32API ChangeDisplaySettingsW(LPDEVMODEW lpDevMode,
2270 DWORD dwFlags)
2271{
2272 dprintf(("USER32:ChangeDisplaySettingsW(%08xh,%08x) not implemented.\n",
2273 lpDevMode,
2274 dwFlags));
2275
2276 return (ChangeDisplaySettingsA((LPDEVMODEA)lpDevMode,
2277 dwFlags));
2278}
2279
2280/* Window Station and Desktop Functions */
2281
2282/*****************************************************************************
2283 * Name : BOOL WIN32API CloseDesktop
2284 * Purpose : The CloseDesktop function closes an open handle of a desktop
2285 * object. A desktop is a secure object contained within a window
2286 * station object. A desktop has a logical display surface and
2287 * contains windows, menus and hooks.
2288 * Parameters: HDESK hDesktop
2289 * Variables :
2290 * Result : If the function succeeds, the return value is TRUE.
2291 * If the functions fails, the return value is FALSE. To get
2292 * extended error information, call GetLastError.
2293 * Remark :
2294 * Status : UNTESTED STUB
2295 *
2296 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2297 *****************************************************************************/
2298BOOL WIN32API CloseDesktop(HDESK hDesktop)
2299{
2300 dprintf(("USER32:CloseDesktop(%08x) not implemented.\n",
2301 hDesktop));
2302
2303 return (FALSE);
2304}
2305/*****************************************************************************
2306 * Name : BOOL WIN32API CloseWindowStation
2307 * Purpose : The CloseWindowStation function closes an open window station handle.
2308 * Parameters: HWINSTA hWinSta
2309 * Variables :
2310 * Result :
2311 * Remark : If the function succeeds, the return value is TRUE.
2312 * If the functions fails, the return value is FALSE. To get
2313 * extended error information, call GetLastError.
2314 * Status : UNTESTED STUB
2315 *
2316 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2317 *****************************************************************************/
2318BOOL WIN32API CloseWindowStation(HWINSTA hWinSta)
2319{
2320 dprintf(("USER32:CloseWindowStation(%08x) not implemented.\n",
2321 hWinSta));
2322
2323 return (FALSE);
2324}
2325/*****************************************************************************
2326 * Name : HDESK WIN32API CreateDesktopA
2327 * Purpose : The CreateDesktop function creates a new desktop on the window
2328 * station associated with the calling process.
2329 * Parameters: LPCTSTR lpszDesktop name of the new desktop
2330 * LPCTSTR lpszDevice name of display device to assign to the desktop
2331 * LPDEVMODE pDevMode reserved; must be NULL
2332 * DWORD dwFlags flags to control interaction with other applications
2333 * DWORD dwDesiredAccess specifies access of returned handle
2334 * LPSECURITY_ATTRIBUTES lpsa specifies security attributes of the desktop
2335 * Variables :
2336 * Result : If the function succeeds, the return value is a handle of the
2337 * newly created desktop.
2338 * If the function fails, the return value is NULL. To get extended
2339 * error information, call GetLastError.
2340 * Remark :
2341 * Status : UNTESTED STUB
2342 *
2343 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2344 *****************************************************************************/
2345HDESK WIN32API CreateDesktopA(LPCTSTR lpszDesktop,
2346 LPCTSTR lpszDevice,
2347 LPDEVMODEA pDevMode,
2348 DWORD dwFlags,
2349 DWORD dwDesiredAccess,
2350 LPSECURITY_ATTRIBUTES lpsa)
2351{
2352 dprintf(("USER32:CreateDesktopA(%s,%s,%08xh,%08xh,%08xh,%08x) not implemented.\n",
2353 lpszDesktop,
2354 lpszDevice,
2355 pDevMode,
2356 dwFlags,
2357 dwDesiredAccess,
2358 lpsa));
2359
2360 return (NULL);
2361}
2362/*****************************************************************************
2363 * Name : HDESK WIN32API CreateDesktopW
2364 * Purpose : The CreateDesktop function creates a new desktop on the window
2365 * station associated with the calling process.
2366 * Parameters: LPCTSTR lpszDesktop name of the new desktop
2367 * LPCTSTR lpszDevice name of display device to assign to the desktop
2368 * LPDEVMODE pDevMode reserved; must be NULL
2369 * DWORD dwFlags flags to control interaction with other applications
2370 * DWORD dwDesiredAccess specifies access of returned handle
2371 * LPSECURITY_ATTRIBUTES lpsa specifies security attributes of the desktop
2372 * Variables :
2373 * Result : If the function succeeds, the return value is a handle of the
2374 * newly created desktop.
2375 * If the function fails, the return value is NULL. To get extended
2376 * error information, call GetLastError.
2377 * Remark :
2378 * Status : UNTESTED STUB
2379 *
2380 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2381 *****************************************************************************/
2382HDESK WIN32API CreateDesktopW(LPCTSTR lpszDesktop,
2383 LPCTSTR lpszDevice,
2384 LPDEVMODEW pDevMode,
2385 DWORD dwFlags,
2386 DWORD dwDesiredAccess,
2387 LPSECURITY_ATTRIBUTES lpsa)
2388{
2389 dprintf(("USER32:CreateDesktopW(%s,%s,%08xh,%08xh,%08xh,%08x) not implemented.\n",
2390 lpszDesktop,
2391 lpszDevice,
2392 pDevMode,
2393 dwFlags,
2394 dwDesiredAccess,
2395 lpsa));
2396
2397 return (NULL);
2398}
2399/*****************************************************************************
2400 * Name : HWINSTA WIN32API CreateWindowStationA
2401 * Purpose : The CreateWindowStation function creates a window station object.
2402 * It returns a handle that can be used to access the window station.
2403 * A window station is a secure object that contains a set of global
2404 * atoms, a clipboard, and a set of desktop objects.
2405 * Parameters: LPTSTR lpwinsta name of the new window station
2406 * DWORD dwReserved reserved; must be NULL
2407 * DWORD dwDesiredAccess specifies access of returned handle
2408 * LPSECURITY_ATTRIBUTES lpsa specifies security attributes of the window station
2409 * Variables :
2410 * Result : If the function succeeds, the return value is the handle to the
2411 * newly created window station.
2412 * If the function fails, the return value is NULL. To get extended
2413 * error information, call GetLastError.
2414 * Remark :
2415 * Status : UNTESTED STUB
2416 *
2417 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2418 *****************************************************************************/
2419HWINSTA WIN32API CreateWindowStationA(LPTSTR lpWinSta,
2420 DWORD dwReserved,
2421 DWORD dwDesiredAccess,
2422 LPSECURITY_ATTRIBUTES lpsa)
2423{
2424 dprintf(("USER32:CreateWindowStationA(%s,%08xh,%08xh,%08x) not implemented.\n",
2425 lpWinSta,
2426 dwReserved,
2427 dwDesiredAccess,
2428 lpsa));
2429
2430 return (NULL);
2431}
2432/*****************************************************************************
2433 * Name : HWINSTA WIN32API CreateWindowStationW
2434 * Purpose : The CreateWindowStation function creates a window station object.
2435 * It returns a handle that can be used to access the window station.
2436 * A window station is a secure object that contains a set of global
2437 * atoms, a clipboard, and a set of desktop objects.
2438 * Parameters: LPTSTR lpwinsta name of the new window station
2439 * DWORD dwReserved reserved; must be NULL
2440 * DWORD dwDesiredAccess specifies access of returned handle
2441 * LPSECURITY_ATTRIBUTES lpsa specifies security attributes of the window station
2442 * Variables :
2443 * Result : If the function succeeds, the return value is the handle to the
2444 * newly created window station.
2445 * If the function fails, the return value is NULL. To get extended
2446 * error information, call GetLastError.
2447 * Remark :
2448 * Status : UNTESTED STUB
2449 *
2450 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2451 *****************************************************************************/
2452HWINSTA WIN32API CreateWindowStationW(LPWSTR lpWinSta,
2453 DWORD dwReserved,
2454 DWORD dwDesiredAccess,
2455 LPSECURITY_ATTRIBUTES lpsa)
2456{
2457 dprintf(("USER32:CreateWindowStationW(%s,%08xh,%08xh,%08x) not implemented.\n",
2458 lpWinSta,
2459 dwReserved,
2460 dwDesiredAccess,
2461 lpsa));
2462
2463 return (NULL);
2464}
2465/*****************************************************************************
2466 * Name : BOOL WIN32API EnumDesktopWindows
2467 * Purpose : The EnumDesktopWindows function enumerates all windows in a
2468 * desktop by passing the handle of each window, in turn, to an
2469 * application-defined callback function.
2470 * Parameters: HDESK hDesktop handle of desktop to enumerate
2471 * WNDENUMPROC lpfn points to application's callback function
2472 * LPARAM lParam 32-bit value to pass to the callback function
2473 * Variables :
2474 * Result : If the function succeeds, the return value is TRUE.
2475 * If the function fails, the return value is FALSE. To get
2476 * extended error information, call GetLastError.
2477 * Remark :
2478 * Status : UNTESTED STUB
2479 *
2480 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2481 *****************************************************************************/
2482BOOL WIN32API EnumDesktopWindows(HDESK hDesktop,
2483 WNDENUMPROC lpfn,
2484 LPARAM lParam)
2485{
2486 dprintf(("USER32:EnumDesktopWindows (%08xh,%08xh,%08x) not implemented.\n",
2487 hDesktop,
2488 lpfn,
2489 lParam));
2490
2491 return (FALSE);
2492}
2493/*****************************************************************************
2494 * Name : BOOL WIN32API EnumDesktopsA
2495 * Purpose : The EnumDesktops function enumerates all desktops in the window
2496 * station assigned to the calling process. The function does so by
2497 * passing the name of each desktop, in turn, to an application-
2498 * defined callback function.
2499 * Parameters: HWINSTA hwinsta handle of window station to enumerate
2500 * DESKTOPENUMPROC lpEnumFunc points to application's callback function
2501 * LPARAM lParam 32-bit value to pass to the callback function
2502 * Variables :
2503 * Result : If the function succeeds, the return value is TRUE.
2504 * If the function fails, the return value is FALSE. To get extended
2505 * error information, call GetLastError.
2506 * Remark :
2507 * Status : UNTESTED STUB
2508 *
2509 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2510 *****************************************************************************/
2511BOOL WIN32API EnumDesktopsA(HWINSTA hWinSta,
2512 DESKTOPENUMPROCA lpEnumFunc,
2513 LPARAM lParam)
2514{
2515 dprintf(("USER32:EnumDesktopsA (%08xh,%08xh,%08x) not implemented.\n",
2516 hWinSta,
2517 lpEnumFunc,
2518 lParam));
2519
2520 return (FALSE);
2521}
2522/*****************************************************************************
2523 * Name : BOOL WIN32API EnumDesktopsW
2524 * Purpose : The EnumDesktops function enumerates all desktops in the window
2525 * station assigned to the calling process. The function does so by
2526 * passing the name of each desktop, in turn, to an application-
2527 * defined callback function.
2528 * Parameters: HWINSTA hwinsta handle of window station to enumerate
2529 * DESKTOPENUMPROC lpEnumFunc points to application's callback function
2530 * LPARAM lParam 32-bit value to pass to the callback function
2531 * Variables :
2532 * Result : If the function succeeds, the return value is TRUE.
2533 * If the function fails, the return value is FALSE. To get extended
2534 * error information, call GetLastError.
2535 * Remark :
2536 * Status : UNTESTED STUB
2537 *
2538 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2539 *****************************************************************************/
2540BOOL WIN32API EnumDesktopsW(HWINSTA hWinSta,
2541 DESKTOPENUMPROCW lpEnumFunc,
2542 LPARAM lParam)
2543{
2544 dprintf(("USER32:EnumDesktopsW (%08xh,%08xh,%08x) not implemented.\n",
2545 hWinSta,
2546 lpEnumFunc,
2547 lParam));
2548
2549 return (FALSE);
2550}
2551/*****************************************************************************
2552 * Name : BOOL WIN32API EnumWindowStationsA
2553 * Purpose : The EnumWindowStations function enumerates all windowstations
2554 * in the system by passing the name of each window station, in
2555 * turn, to an application-defined callback function.
2556 * Parameters:
2557 * Variables : WINSTAENUMPROC lpEnumFunc points to application's callback function
2558 * LPARAM lParam 32-bit value to pass to the callback function
2559 * Result : If the function succeeds, the return value is TRUE.
2560 * If the function fails the return value is FALSE. To get extended
2561 * error information, call GetLastError.
2562 * Remark :
2563 * Status : UNTESTED STUB
2564 *
2565 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2566 *****************************************************************************/
2567BOOL WIN32API EnumWindowStationsA(WINSTAENUMPROCA lpEnumFunc,
2568 LPARAM lParam)
2569{
2570 dprintf(("USER32:EnumWindowStationsA (%08xh,%08x) not implemented.\n",
2571 lpEnumFunc,
2572 lParam));
2573
2574 return (FALSE);
2575}
2576/*****************************************************************************
2577 * Name : BOOL WIN32API EnumWindowStationsW
2578 * Purpose : The EnumWindowStations function enumerates all windowstations
2579 * in the system by passing the name of each window station, in
2580 * turn, to an application-defined callback function.
2581 * Parameters:
2582 * Variables : WINSTAENUMPROC lpEnumFunc points to application's callback function
2583 * LPARAM lParam 32-bit value to pass to the callback function
2584 * Result : If the function succeeds, the return value is TRUE.
2585 * If the function fails the return value is FALSE. To get extended
2586 * error information, call GetLastError.
2587 * Remark :
2588 * Status : UNTESTED STUB
2589 *
2590 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2591 *****************************************************************************/
2592BOOL WIN32API EnumWindowStationsW(WINSTAENUMPROCW lpEnumFunc,
2593 LPARAM lParam)
2594{
2595 dprintf(("USER32:EnumWindowStationsW (%08xh,%08x) not implemented.\n",
2596 lpEnumFunc,
2597 lParam));
2598
2599 return (FALSE);
2600}
2601/*****************************************************************************
2602 * Name : HWINSTA WIN32API GetProcessWindowStation
2603 * Purpose : The GetProcessWindowStation function returns a handle of the
2604 * window station associated with the calling process.
2605 * Parameters:
2606 * Variables :
2607 * Result : If the function succeeds, the return value is a handle of the
2608 * window station associated with the calling process.
2609 * If the function fails, the return value is NULL. This can occur
2610 * if the calling process is not an application written for Windows
2611 * NT. To get extended error information, call GetLastError.
2612 * Remark :
2613 * Status : UNTESTED STUB
2614 *
2615 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2616 *****************************************************************************/
2617HWINSTA WIN32API GetProcessWindowStation(VOID)
2618{
2619 dprintf(("USER32:GetProcessWindowStation () not implemented.\n"));
2620
2621 return (NULL);
2622}
2623/*****************************************************************************
2624 * Name : BOOL WIN32API GetUserObjectInformationA
2625 * Purpose : The GetUserObjectInformation function returns information about
2626 * a window station or desktop object.
2627 * Parameters: HANDLE hObj handle of object to get information for
2628 * int nIndex type of information to get
2629 * PVOID pvInfo points to buffer that receives the information
2630 * DWORD nLength size, in bytes, of pvInfo buffer
2631 * LPDWORD lpnLengthNeeded receives required size, in bytes, of pvInfo buffer
2632 * Variables :
2633 * Result : If the function succeeds, the return value is TRUE.
2634 * If the function fails, the return value is FALSE. To get extended
2635 * error information, call GetLastError.
2636 * Remark :
2637 * Status : UNTESTED STUB
2638 *
2639 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2640 *****************************************************************************/
2641BOOL WIN32API GetUserObjectInformationA(HANDLE hObj,
2642 int nIndex,
2643 PVOID pvInfo,
2644 DWORD nLength,
2645 LPDWORD lpnLengthNeeded)
2646{
2647 dprintf(("USER32:GetUserObjectInformationA (%08xh,%08xh,%08xh,%u,%08x) not implemented.\n",
2648 hObj,
2649 nIndex,
2650 pvInfo,
2651 nLength,
2652 lpnLengthNeeded));
2653
2654 return (FALSE);
2655}
2656/*****************************************************************************
2657 * Name : BOOL WIN32API GetUserObjectInformationW
2658 * Purpose : The GetUserObjectInformation function returns information about
2659 * a window station or desktop object.
2660 * Parameters: HANDLE hObj handle of object to get information for
2661 * int nIndex type of information to get
2662 * PVOID pvInfo points to buffer that receives the information
2663 * DWORD nLength size, in bytes, of pvInfo buffer
2664 * LPDWORD lpnLengthNeeded receives required size, in bytes, of pvInfo buffer
2665 * Variables :
2666 * Result : If the function succeeds, the return value is TRUE.
2667 * If the function fails, the return value is FALSE. To get extended
2668 * error information, call GetLastError.
2669 * Remark :
2670 * Status : UNTESTED STUB
2671 *
2672 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2673 *****************************************************************************/
2674BOOL WIN32API GetUserObjectInformationW(HANDLE hObj,
2675 int nIndex,
2676 PVOID pvInfo,
2677 DWORD nLength,
2678 LPDWORD lpnLengthNeeded)
2679{
2680 dprintf(("USER32:GetUserObjectInformationW (%08xh,%08xh,%08xh,%u,%08x) not implemented.\n",
2681 hObj,
2682 nIndex,
2683 pvInfo,
2684 nLength,
2685 lpnLengthNeeded));
2686
2687 return (FALSE);
2688}
2689/*****************************************************************************
2690 * Name : BOOL WIN32API GetUserObjectSecurity
2691 * Purpose : The GetUserObjectSecurity function retrieves security information
2692 * for the specified user object.
2693 * Parameters: HANDLE hObj handle of user object
2694 * SECURITY_INFORMATION * pSIRequested address of requested security information
2695 * LPSECURITY_DESCRIPTOR pSID address of security descriptor
2696 * DWORD nLength size of buffer for security descriptor
2697 * LPDWORD lpnLengthNeeded address of required size of buffer
2698 * Variables :
2699 * Result : If the function succeeds, the return value is TRUE.
2700 * If the function fails, the return value is FALSE. To get extended
2701 * error information, call GetLastError.
2702 * Remark :
2703 * Status : UNTESTED STUB
2704 *
2705 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2706 *****************************************************************************/
2707BOOL WIN32API GetUserObjectSecurity(HANDLE hObj,
2708 SECURITY_INFORMATION * pSIRequested,
2709 LPSECURITY_DESCRIPTOR pSID,
2710 DWORD nLength,
2711 LPDWORD lpnLengthNeeded)
2712{
2713 dprintf(("USER32:GetUserObjectSecurity (%08xh,%08xh,%08xh,%u,%08x) not implemented.\n",
2714 hObj,
2715 pSIRequested,
2716 pSID,
2717 nLength,
2718 lpnLengthNeeded));
2719
2720 return (FALSE);
2721}
2722/*****************************************************************************
2723 * Name : HDESK WIN32API OpenDesktopA
2724 * Purpose : The OpenDesktop function returns a handle to an existing desktop.
2725 * A desktop is a secure object contained within a window station
2726 * object. A desktop has a logical display surface and contains
2727 * windows, menus and hooks.
2728 * Parameters: LPCTSTR lpszDesktopName name of the desktop to open
2729 * DWORD dwFlags flags to control interaction with other applications
2730 * BOOL fInherit specifies whether returned handle is inheritable
2731 * DWORD dwDesiredAccess specifies access of returned handle
2732 * Variables :
2733 * Result : If the function succeeds, the return value is the handle to the
2734 * opened desktop.
2735 * If the function fails, the return value is NULL. To get extended
2736 * error information, call GetLastError.
2737 * Remark :
2738 * Status : UNTESTED STUB
2739 *
2740 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2741 *****************************************************************************/
2742HDESK WIN32API OpenDesktopA(LPCTSTR lpszDesktopName,
2743 DWORD dwFlags,
2744 BOOL fInherit,
2745 DWORD dwDesiredAccess)
2746{
2747 dprintf(("USER32:OpenDesktopA (%s,%08xh,%08xh,%08x) not implemented.\n",
2748 lpszDesktopName,
2749 dwFlags,
2750 fInherit,
2751 dwDesiredAccess));
2752
2753 return (NULL);
2754}
2755/*****************************************************************************
2756 * Name : HDESK WIN32API OpenDesktopW
2757 * Purpose : The OpenDesktop function returns a handle to an existing desktop.
2758 * A desktop is a secure object contained within a window station
2759 * object. A desktop has a logical display surface and contains
2760 * windows, menus and hooks.
2761 * Parameters: LPCTSTR lpszDesktopName name of the desktop to open
2762 * DWORD dwFlags flags to control interaction with other applications
2763 * BOOL fInherit specifies whether returned handle is inheritable
2764 * DWORD dwDesiredAccess specifies access of returned handle
2765 * Variables :
2766 * Result : If the function succeeds, the return value is the handle to the
2767 * opened desktop.
2768 * If the function fails, the return value is NULL. To get extended
2769 * error information, call GetLastError.
2770 * Remark :
2771 * Status : UNTESTED STUB
2772 *
2773 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2774 *****************************************************************************/
2775HDESK WIN32API OpenDesktopW(LPCTSTR lpszDesktopName,
2776 DWORD dwFlags,
2777 BOOL fInherit,
2778 DWORD dwDesiredAccess)
2779{
2780 dprintf(("USER32:OpenDesktopW (%s,%08xh,%08xh,%08x) not implemented.\n",
2781 lpszDesktopName,
2782 dwFlags,
2783 fInherit,
2784 dwDesiredAccess));
2785
2786 return (NULL);
2787}
2788/*****************************************************************************
2789 * Name : HDESK WIN32API OpenInputDesktop
2790 * Purpose : The OpenInputDesktop function returns a handle to the desktop
2791 * that receives user input. The input desktop is a desktop on the
2792 * window station associated with the logged-on user.
2793 * Parameters: DWORD dwFlags flags to control interaction with other applications
2794 * BOOL fInherit specifies whether returned handle is inheritable
2795 * DWORD dwDesiredAccess specifies access of returned handle
2796 * Variables :
2797 * Result : If the function succeeds, the return value is a handle of the
2798 * desktop that receives user input.
2799 * If the function fails, the return value is NULL. To get extended
2800 * error information, call GetLastError.
2801 * Remark :
2802 * Status : UNTESTED STUB
2803 *
2804 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2805 *****************************************************************************/
2806HDESK WIN32API OpenInputDesktop(DWORD dwFlags,
2807 BOOL fInherit,
2808 DWORD dwDesiredAccess)
2809{
2810 dprintf(("USER32:OpenInputDesktop (%08xh,%08xh,%08x) not implemented.\n",
2811 dwFlags,
2812 fInherit,
2813 dwDesiredAccess));
2814
2815 return (NULL);
2816}
2817/*****************************************************************************
2818 * Name : HWINSTA WIN32API OpenWindowStationA
2819 * Purpose : The OpenWindowStation function returns a handle to an existing
2820 * window station.
2821 * Parameters: LPCTSTR lpszWinStaName name of the window station to open
2822 * BOOL fInherit specifies whether returned handle is inheritable
2823 * DWORD dwDesiredAccess specifies access of returned handle
2824 * Variables :
2825 * Result : If the function succeeds, the return value is the handle to the
2826 * specified window station.
2827 * If the function fails, the return value is NULL. To get extended
2828 * error information, call GetLastError.
2829 * Remark :
2830 * Status : UNTESTED STUB
2831 *
2832 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2833 *****************************************************************************/
2834HWINSTA WIN32API OpenWindowStationA(LPCTSTR lpszWinStaName,
2835 BOOL fInherit,
2836 DWORD dwDesiredAccess)
2837{
2838 dprintf(("USER32:OpenWindowStatieonA (%s,%08xh,%08x) not implemented.\n",
2839 lpszWinStaName,
2840 fInherit,
2841 dwDesiredAccess));
2842
2843 return (NULL);
2844}
2845/*****************************************************************************
2846 * Name : HWINSTA WIN32API OpenWindowStationW
2847 * Purpose : The OpenWindowStation function returns a handle to an existing
2848 * window station.
2849 * Parameters: LPCTSTR lpszWinStaName name of the window station to open
2850 * BOOL fInherit specifies whether returned handle is inheritable
2851 * DWORD dwDesiredAccess specifies access of returned handle
2852 * Variables :
2853 * Result : If the function succeeds, the return value is the handle to the
2854 * specified window station.
2855 * If the function fails, the return value is NULL. To get extended
2856 * error information, call GetLastError.
2857
2858
2859 * Remark :
2860 * Status : UNTESTED STUB
2861 *
2862 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2863 *****************************************************************************/
2864HWINSTA WIN32API OpenWindowStationW(LPCTSTR lpszWinStaName,
2865 BOOL fInherit,
2866 DWORD dwDesiredAccess)
2867{
2868 dprintf(("USER32:OpenWindowStatieonW (%s,%08xh,%08x) not implemented.\n",
2869 lpszWinStaName,
2870 fInherit,
2871 dwDesiredAccess));
2872
2873 return (NULL);
2874}
2875/*****************************************************************************
2876 * Name : BOOL WIN32API SetProcessWindowStation
2877 * Purpose : The SetProcessWindowStation function assigns a window station
2878 * to the calling process. This enables the process to access
2879 * objects in the window station such as desktops, the clipboard,
2880 * and global atoms. All subsequent operations on the window station
2881 * use the access rights granted to hWinSta.
2882 * Parameters:
2883 * Variables :
2884 * Result : If the function succeeds, the return value is TRUE.
2885 * If the function fails, the return value is FALSE. To get extended
2886 * error information, call GetLastError.
2887 * Remark :
2888 * Status : UNTESTED STUB
2889 *
2890 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2891 *****************************************************************************/
2892BOOL WIN32API SetProcessWindowStation(HWINSTA hWinSta)
2893{
2894 dprintf(("USER32:SetProcessWindowStation (%08x) not implemented.\n",
2895 hWinSta));
2896
2897 return (FALSE);
2898}
2899/*****************************************************************************
2900 * Name : BOOL WIN32API SetThreadDesktop
2901 * Purpose : The SetThreadDesktop function assigns a desktop to the calling
2902 * thread. All subsequent operations on the desktop use the access
2903 * rights granted to hDesk.
2904 * Parameters: HDESK hDesk handle of the desktop to assign to this thread
2905 * Variables :
2906 * Result : If the function succeeds, the return value is TRUE.
2907 * If the function fails, the return value is FALSE. To get extended
2908 * error information, call GetLastError.
2909 * Remark :
2910 * Status : UNTESTED STUB
2911 *
2912 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2913 *****************************************************************************/
2914BOOL WIN32API SetThreadDesktop(HDESK hDesktop)
2915{
2916 dprintf(("USER32:SetThreadDesktop (%08x) not implemented.\n",
2917 hDesktop));
2918
2919 return (FALSE);
2920}
2921/*****************************************************************************
2922 * Name : BOOL WIN32API SetUserObjectInformationA
2923 * Purpose : The SetUserObjectInformation function sets information about a
2924 * window station or desktop object.
2925 * Parameters: HANDLE hObject handle of the object for which to set information
2926 * int nIndex type of information to set
2927 * PVOID lpvInfo points to a buffer that contains the information
2928 * DWORD cbInfo size, in bytes, of lpvInfo buffer
2929 * Variables :
2930 * Result : If the function succeeds, the return value is TRUE.
2931 * If the function fails the return value is FALSE. To get extended
2932 * error information, call GetLastError.
2933 * Remark :
2934 * Status : UNTESTED STUB
2935 *
2936 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2937 *****************************************************************************/
2938BOOL WIN32API SetUserObjectInformationA(HANDLE hObject,
2939 int nIndex,
2940 PVOID lpvInfo,
2941 DWORD cbInfo)
2942{
2943 dprintf(("USER32:SetUserObjectInformationA (%08xh,%u,%08xh,%08x) not implemented.\n",
2944 hObject,
2945 nIndex,
2946 lpvInfo,
2947 cbInfo));
2948
2949 return (FALSE);
2950}
2951/*****************************************************************************
2952 * Name : BOOL WIN32API SetUserObjectInformationW
2953 * Purpose : The SetUserObjectInformation function sets information about a
2954 * window station or desktop object.
2955 * Parameters: HANDLE hObject handle of the object for which to set information
2956 * int nIndex type of information to set
2957 * PVOID lpvInfo points to a buffer that contains the information
2958 * DWORD cbInfo size, in bytes, of lpvInfo buffer
2959 * Variables :
2960 * Result : If the function succeeds, the return value is TRUE.
2961 * If the function fails the return value is FALSE. To get extended
2962 * error information, call GetLastError.
2963 * Remark :
2964 * Status : UNTESTED STUB
2965 *
2966 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2967 *****************************************************************************/
2968BOOL WIN32API SetUserObjectInformationW(HANDLE hObject,
2969 int nIndex,
2970 PVOID lpvInfo,
2971 DWORD cbInfo)
2972{
2973 dprintf(("USER32:SetUserObjectInformationW (%08xh,%u,%08xh,%08x) not implemented.\n",
2974 hObject,
2975 nIndex,
2976 lpvInfo,
2977 cbInfo));
2978
2979 return (FALSE);
2980}
2981/*****************************************************************************
2982 * Name : BOOL WIN32API SetUserObjectSecurity
2983 * Purpose : The SetUserObjectSecurity function sets the security of a user
2984 * object. This can be, for example, a window or a DDE conversation
2985 * Parameters: HANDLE hObject handle of user object
2986 * SECURITY_INFORMATION * psi address of security information
2987 * LPSECURITY_DESCRIPTOR psd address of security descriptor
2988 * Variables :
2989 * Result : If the function succeeds, the return value is TRUE.
2990 * If the function fails, the return value is FALSE. To get extended
2991 * error information, call GetLastError.
2992 * Remark :
2993 * Status : UNTESTED STUB
2994 *
2995 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
2996 *****************************************************************************/
2997BOOL WIN32API SetUserObjectSecurity(HANDLE hObject,
2998 SECURITY_INFORMATION * psi,
2999 LPSECURITY_DESCRIPTOR psd)
3000{
3001 dprintf(("USER32:SetUserObjectSecuroty (%08xh,%08xh,%08x) not implemented.\n",
3002 hObject,
3003 psi,
3004 psd));
3005
3006 return (FALSE);
3007}
3008/*****************************************************************************
3009 * Name : BOOL WIN32API SwitchDesktop
3010 * Purpose : The SwitchDesktop function makes a desktop visible and activates
3011 * it. This enables the desktop to receive input from the user. The
3012 * calling process must have DESKTOP_SWITCHDESKTOP access to the
3013 * desktop for the SwitchDesktop function to succeed.
3014 * Parameters:
3015 * Variables :
3016 * Result : If the function succeeds, the return value is TRUE.
3017 * If the function fails, the return value is FALSE. To get extended
3018 * error information, call GetLastError.
3019 * Remark :
3020 * Status : UNTESTED STUB
3021 *
3022 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
3023 *****************************************************************************/
3024BOOL WIN32API SwitchDesktop(HDESK hDesktop)
3025{
3026 dprintf(("USER32:SwitchDesktop (%08x) not implemented.\n",
3027 hDesktop));
3028
3029 return (FALSE);
3030}
3031
3032/* Debugging Functions */
3033
3034/*****************************************************************************
3035 * Name : VOID WIN32API SetDebugErrorLevel
3036 * Purpose : The SetDebugErrorLevel function sets the minimum error level at
3037 * which Windows will generate debugging events and pass them to a debugger.
3038 * Parameters: DWORD dwLevel debugging error level
3039 * Variables :
3040 * Result :
3041 * Remark :
3042 * Status : UNTESTED STUB
3043 *
3044 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
3045 *****************************************************************************/
3046VOID WIN32API SetDebugErrorLevel(DWORD dwLevel)
3047{
3048 dprintf(("USER32:SetDebugErrorLevel (%08x) not implemented.\n",
3049 dwLevel));
3050}
3051
3052/* Hook Functions */
3053
3054/*****************************************************************************
3055 * Name : BOOL WIN32API SetWindowsHookW
3056 * Purpose : The SetWindowsHook function is not implemented in the Win32 API.
3057 * Win32-based applications should use the SetWindowsHookEx function.
3058 * Parameters:
3059 * Variables :
3060 * Result :
3061 * Remark : ARGH ! MICROSOFT !
3062 * Status : UNTESTED STUB
3063 *
3064 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
3065 *****************************************************************************/
3066HHOOK WIN32API SetWindowsHookW(int nFilterType, HOOKPROC pfnFilterProc)
3067
3068{
3069 return (FALSE);
3070}
3071
3072/* CB: move to ShowWindow() */
3073
3074/*****************************************************************************
3075 * Name : BOOL WIN32API ShowWindowAsync
3076 * Purpose : The ShowWindowAsync function sets the show state of a window
3077 * created by a different thread.
3078 * Parameters: HWND hwnd handle of window
3079 * int nCmdShow show state of window
3080 * Variables :
3081 * Result : If the window was previously visible, the return value is TRUE.
3082 * If the window was previously hidden, the return value is FALSE.
3083 * Remark :
3084 * Status : UNTESTED STUB
3085 *
3086 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
3087 *****************************************************************************/
3088BOOL WIN32API ShowWindowAsync (HWND hWnd,
3089 int nCmdShow)
3090{
3091 dprintf(("USER32:ShowWindowAsync (%08xh,%08x) not implemented.\n",
3092 hWnd,
3093 nCmdShow));
3094
3095 return (FALSE);
3096}
3097
3098/* CB: move to MDI */
3099
3100/*****************************************************************************
3101 * Name : WORD WIN32API TileWindows
3102 * Purpose : The TileWindows function tiles the specified windows, or the child
3103 * windows of the specified parent window.
3104 * Parameters: HWND hwndParent handle of parent window
3105 * WORD wFlags types of windows not to arrange
3106 * LPCRECT lpRect rectangle to arrange windows in
3107 * WORD cChildrenb number of windows to arrange
3108 * const HWND *ahwndChildren array of window handles
3109 * Variables :
3110 * Result : If the function succeeds, the return value is the number of
3111 * windows arranged.
3112 * If the function fails, the return value is zero.
3113 * Remark :
3114 * Status : UNTESTED STUB
3115 *
3116 * Author : Patrick Haller [Thu, 1998/02/26 11:55]
3117 *****************************************************************************/
3118WORD WIN32API TileWindows(HWND hwndParent,
3119 UINT wFlags,
3120 const LPRECT lpRect,
3121 UINT cChildrenb,
3122 const HWND *ahwndChildren)
3123{
3124 dprintf(("USER32:TileWindows (%08xh,%08xh,%08xh,%08xh,%08x) not implemented.\n",
3125 hwndParent,
3126 wFlags,
3127 lpRect,
3128 cChildrenb,
3129 ahwndChildren));
3130
3131 return (0);
3132}
3133/*****************************************************************************
3134 * Name : BOOL WIN32API TileChildWindows
3135 * Purpose : Unknown
3136 * Parameters: Unknown
3137 * Variables :
3138 * Result :
3139 * Remark :
3140 * Status : UNTESTED UNKNOWN STUB
3141 *
3142 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3143 *****************************************************************************/
3144BOOL WIN32API TileChildWindows(DWORD x1,
3145 DWORD x2)
3146{
3147 dprintf(("USER32: TileChildWindows(%08xh,%08xh) not implemented.\n",
3148 x1,
3149 x2));
3150
3151 return (FALSE); /* default */
3152}
3153/*****************************************************************************
3154 * Name : BOOL WIN32API CascadeChildWindows
3155 * Purpose : Unknown
3156 * Parameters: Unknown
3157 * Variables :
3158 * Result :
3159 * Remark :
3160 * Status : UNTESTED UNKNOWN STUB
3161 *
3162 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3163 *****************************************************************************/
3164BOOL WIN32API CascadeChildWindows(DWORD x1,
3165 DWORD x2)
3166{
3167 dprintf(("USER32: CascadeChildWindows(%08xh,%08xh) not implemented.\n",
3168 x1,
3169 x2));
3170
3171 return (FALSE); /* default */
3172}
3173
3174/* Drag'n'drop */
3175
3176/*****************************************************************************
3177 * Name : BOOL WIN32API DragObject
3178 * Purpose : Unknown
3179 * Parameters: Unknown
3180 * Variables :
3181 * Result :
3182 * Remark :
3183 * Status : UNTESTED UNKNOWN STUB
3184 *
3185 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3186 *****************************************************************************/
3187DWORD WIN32API DragObject(HWND x1,HWND x2,UINT x3,DWORD x4,HCURSOR x5)
3188{
3189 dprintf(("USER32: DragObject(%08x,%08xh,%08xh,%08xh,%08xh) not implemented.\n",
3190 x1,
3191 x2,
3192 x3,
3193 x4,
3194 x5));
3195
3196 return (FALSE); /* default */
3197}
3198
3199/* Unknown */
3200
3201/*****************************************************************************
3202 * Name : BOOL WIN32API SetShellWindow
3203 * Purpose : Unknown
3204 * Parameters: Unknown
3205 * Variables :
3206 * Result :
3207 * Remark :
3208 * Status : UNTESTED UNKNOWN STUB
3209 *
3210 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3211 *****************************************************************************/
3212BOOL WIN32API SetShellWindow(DWORD x1)
3213{
3214 dprintf(("USER32: SetShellWindow(%08x) not implemented.\n",
3215 x1));
3216
3217 return (FALSE); /* default */
3218}
3219/*****************************************************************************
3220 * Name : BOOL WIN32API PlaySoundEvent
3221 * Purpose : Unknown
3222 * Parameters: Unknown
3223 * Variables :
3224 * Result :
3225 * Remark :
3226 * Status : UNTESTED UNKNOWN STUB
3227 *
3228 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3229 *****************************************************************************/
3230BOOL WIN32API PlaySoundEvent(DWORD x1)
3231{
3232 dprintf(("USER32: PlaySoundEvent(%08x) not implemented.\n",
3233 x1));
3234
3235 return (FALSE); /* default */
3236}
3237/*****************************************************************************
3238 * Name : BOOL WIN32API SetSysColorsTemp
3239 * Purpose : Unknown
3240 * Parameters: Unknown
3241 * Variables :
3242 * Result :
3243 * Remark :
3244 * Status : UNTESTED UNKNOWN STUB
3245 *
3246 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3247 *****************************************************************************/
3248BOOL WIN32API SetSysColorsTemp(void)
3249{
3250 dprintf(("USER32: SetSysColorsTemp() not implemented.\n"));
3251
3252 return (FALSE); /* default */
3253}
3254/*****************************************************************************
3255 * Name : BOOL WIN32API RegisterNetworkCapabilities
3256 * Purpose : Unknown
3257 * Parameters: Unknown
3258 * Variables :
3259 * Result :
3260 * Remark :
3261 * Status : UNTESTED UNKNOWN STUB
3262 *
3263 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3264 *****************************************************************************/
3265BOOL WIN32API RegisterNetworkCapabilities(DWORD x1,
3266 DWORD x2)
3267{
3268 dprintf(("USER32: RegisterNetworkCapabilities(%08xh,%08xh) not implemented.\n",
3269 x1,
3270 x2));
3271
3272 return (FALSE); /* default */
3273}
3274/*****************************************************************************
3275 * Name : BOOL WIN32API EndTask
3276 * Purpose : Unknown
3277 * Parameters: Unknown
3278 * Variables :
3279 * Result :
3280 * Remark :
3281 * Status : UNTESTED UNKNOWN STUB
3282 *
3283 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3284 *****************************************************************************/
3285BOOL WIN32API EndTask(DWORD x1,
3286 DWORD x2,
3287 DWORD x3)
3288{
3289 dprintf(("USER32: EndTask(%08xh,%08xh,%08xh) not implemented.\n",
3290 x1,
3291 x2,
3292 x3));
3293
3294 return (FALSE); /* default */
3295}
3296/*****************************************************************************
3297 * Name : BOOL WIN32API GetNextQueueWindow
3298 * Purpose : Unknown
3299 * Parameters: Unknown
3300 * Variables :
3301 * Result :
3302 * Remark :
3303 * Status : UNTESTED UNKNOWN STUB
3304 *
3305 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3306 *****************************************************************************/
3307BOOL WIN32API GetNextQueueWindow(DWORD x1,
3308 DWORD x2)
3309{
3310 dprintf(("USER32: GetNextQueueWindow(%08xh,%08xh) not implemented.\n",
3311 x1,
3312 x2));
3313
3314 return (FALSE); /* default */
3315}
3316/*****************************************************************************
3317 * Name : BOOL WIN32API YieldTask
3318 * Purpose : Unknown
3319 * Parameters: Unknown
3320 * Variables :
3321 * Result :
3322 * Remark :
3323 * Status : UNTESTED UNKNOWN STUB
3324 *
3325 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3326 *****************************************************************************/
3327BOOL WIN32API YieldTask(void)
3328{
3329 dprintf(("USER32: YieldTask() not implemented.\n"));
3330
3331 return (FALSE); /* default */
3332}
3333/*****************************************************************************
3334 * Name : BOOL WIN32API WinOldAppHackoMatic
3335 * Purpose : Unknown
3336 * Parameters: Unknown
3337 * Variables :
3338 * Result :
3339 * Remark :
3340 * Status : UNTESTED UNKNOWN STUB
3341 *
3342 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3343 *****************************************************************************/
3344BOOL WIN32API WinOldAppHackoMatic(DWORD x1)
3345{
3346 dprintf(("USER32: WinOldAppHackoMatic(%08x) not implemented.\n",
3347 x1));
3348
3349 return (FALSE); /* default */
3350}
3351/*****************************************************************************
3352 * Name : BOOL WIN32API RegisterSystemThread
3353 * Purpose : Unknown
3354 * Parameters: Unknown
3355 * Variables :
3356 * Result :
3357 * Remark :
3358 * Status : UNTESTED UNKNOWN STUB
3359 *
3360 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3361 *****************************************************************************/
3362BOOL WIN32API RegisterSystemThread(DWORD x1,
3363 DWORD x2)
3364{
3365 dprintf(("USER32: RegisterSystemThread(%08xh,%08xh) not implemented.\n",
3366 x1,
3367 x2));
3368
3369 return (FALSE); /* default */
3370}
3371/*****************************************************************************
3372 * Name : BOOL WIN32API IsHungThread
3373 * Purpose : Unknown
3374 * Parameters: Unknown
3375 * Variables :
3376 * Result :
3377 * Remark :
3378 * Status : UNTESTED UNKNOWN STUB
3379 *
3380 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3381 *****************************************************************************/
3382BOOL WIN32API IsHungThread(DWORD x1)
3383{
3384 dprintf(("USER32: IsHungThread(%08xh) not implemented.\n",
3385 x1));
3386
3387 return (FALSE); /* default */
3388}
3389/*****************************************************************************
3390 * Name : BOOL WIN32API UserSignalProc
3391 * Purpose : Unknown
3392 * Parameters: Unknown
3393 * Variables :
3394 * Result :
3395 * Remark :
3396 * Status : UNTESTED UNKNOWN STUB
3397 *
3398 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3399 *****************************************************************************/
3400BOOL WIN32API UserSignalProc(DWORD x1,
3401 DWORD x2,
3402 DWORD x3,
3403 DWORD x4)
3404{
3405 dprintf(("USER32: SysErrorBox(%08xh,%08xh,%08xh,%08xh) not implemented.\n",
3406 x1,
3407 x2,
3408 x3,
3409 x4));
3410
3411 return (FALSE); /* default */
3412}
3413/*****************************************************************************
3414 * Name : BOOL WIN32API GetShellWindow
3415 * Purpose : Unknown
3416 * Parameters: Unknown
3417 * Variables :
3418 * Result :
3419 * Remark :
3420 * Status : UNTESTED UNKNOWN STUB
3421 *
3422 * Author : Patrick Haller [Wed, 1998/06/16 11:55]
3423 *****************************************************************************/
3424HWND WIN32API GetShellWindow(void)
3425{
3426 dprintf(("USER32: GetShellWindow() not implemented.\n"));
3427
3428 return (0); /* default */
3429}
3430/***********************************************************************
3431 * RegisterTasklist32 [USER32.436]
3432 */
3433DWORD WIN32API RegisterTasklist (DWORD x)
3434{
3435 dprintf(("USER32: RegisterTasklist(%08xh) not implemented.\n",
3436 x));
3437
3438 return TRUE;
3439}
3440
3441
Note: See TracBrowser for help on using the repository browser.