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

Last change on this file since 934 was 934, checked in by sandervl, 26 years ago

Implemented Enum(Thread/Child)Windows

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