source: trunk/src/user32/new/user32.cpp@ 903

Last change on this file since 903 was 903, checked in by dengert, 26 years ago

some more DC related functions

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