ReactOS 0.4.16-dev-1012-g3fe4b41
input.c
Go to the documentation of this file.
1/*
2 * USER Input processing
3 *
4 * Copyright 1993 Bob Amstadt
5 * Copyright 1996 Albrecht Kleine
6 * Copyright 1997 David Faure
7 * Copyright 1998 Morten Welinder
8 * Copyright 1998 Ulrich Weigand
9 * Copyright 2012 Henri Verbeet
10 * Copyright 2018 Zebediah Figura for CodeWeavers
11 *
12 * This library is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Lesser General Public
14 * License as published by the Free Software Foundation; either
15 * version 2.1 of the License, or (at your option) any later version.
16 *
17 * This library is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * Lesser General Public License for more details.
21 *
22 * You should have received a copy of the GNU Lesser General Public
23 * License along with this library; if not, write to the Free Software
24 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
25 */
26
27#ifdef __REACTOS__
28#define WIN32_NO_STATUS
29#define _INC_WINDOWS
30#define COM_NO_WINDOWS_H
31#include <windef.h>
32#include <wingdi.h>
33#include <winuser.h>
34#include <winbase.h>
35DECLARE_HANDLE(HSYNTHETICPOINTERDEVICE);
36typedef enum
37{
38 POINTER_FEEDBACK_DEFAULT = 1,
39 POINTER_FEEDBACK_INDIRECT = 2,
40 POINTER_FEEDBACK_NONE = 3,
41} POINTER_FEEDBACK_MODE;
42
43typedef enum ORIENTATION_PREFERENCE {
50
51/* Touch input definitions */
52DECLARE_HANDLE(HTOUCHINPUT);
53
54
55typedef struct tagTOUCHINPUT {
56 LONG x;
57 LONG y;
58 HANDLE hSource;
59 DWORD dwID;
61 DWORD dwMask;
63 ULONG_PTR dwExtraInfo;
64 DWORD cxContact;
65 DWORD cyContact;
66} TOUCHINPUT, *PTOUCHINPUT;
67typedef TOUCHINPUT const * PCTOUCHINPUT;
68
69DECLARE_HANDLE(HGESTUREINFO);
70
71#define GF_BEGIN 0x00000001
72#define GF_INERTIA 0x00000002
73#define GF_END 0x00000004
74
75typedef struct tagGESTURECONFIG {
76 DWORD dwID;
77 DWORD dwWant;
78 DWORD dwBlock;
79} GESTURECONFIG, *PGESTURECONFIG;
80
81typedef struct tagGESTUREINFO {
82 UINT cbSize;
84 DWORD dwID;
85 HWND hwndTarget;
86 POINTS ptsLocation;
87 DWORD dwInstanceID;
88 DWORD dwSequenceID;
89 ULONGLONG ullArguments;
90 UINT cbExtraArgs;
91} GESTUREINFO, *PGESTUREINFO;
92typedef GESTUREINFO const * PCGESTUREINFO;
93
94typedef enum tagPOINTER_BUTTON_CHANGE_TYPE
95{
96 POINTER_CHANGE_NONE,
97 POINTER_CHANGE_FIRSTBUTTON_DOWN,
98 POINTER_CHANGE_FIRSTBUTTON_UP,
99 POINTER_CHANGE_SECONDBUTTON_DOWN,
100 POINTER_CHANGE_SECONDBUTTON_UP,
101 POINTER_CHANGE_THIRDBUTTON_DOWN,
102 POINTER_CHANGE_THIRDBUTTON_UP,
103 POINTER_CHANGE_FOURTHBUTTON_DOWN,
104 POINTER_CHANGE_FOURTHBUTTON_UP,
105 POINTER_CHANGE_FIFTHBUTTON_DOWN,
106 POINTER_CHANGE_FIFTHBUTTON_UP,
107} POINTER_BUTTON_CHANGE_TYPE;
109typedef UINT32 POINTER_FLAGS;
110typedef DWORD POINTER_INPUT_TYPE;
111typedef struct tagPOINTER_INFO
112{
113 POINTER_INPUT_TYPE pointerType;
114 UINT32 pointerId;
115 UINT32 frameId;
116 POINTER_FLAGS pointerFlags;
117 HANDLE sourceDevice;
118 HWND hwndTarget;
119 POINT ptPixelLocation;
120 POINT ptHimetricLocation;
121 POINT ptPixelLocationRaw;
122 POINT ptHimetricLocationRaw;
124 UINT32 historyCount;
125 INT32 InputData;
126 DWORD dwKeyStates;
127 UINT64 PerformanceCount;
128 POINTER_BUTTON_CHANGE_TYPE ButtonChangeType;
129} POINTER_INFO;
130
131typedef UINT32 TOUCH_FLAGS;
132#define TOUCH_FLAG_NONE 0x00000000
133
134typedef UINT32 TOUCH_MASK;
135#define TOUCH_MASK_NONE 0x00000000
136#define TOUCH_MASK_CONTACTAREA 0x00000001
137#define TOUCH_MASK_ORIENTATION 0x00000002
138#define TOUCH_MASK_PRESSURE 0x00000004
139
140typedef struct tagPOINTER_TOUCH_INFO
141{
142 POINTER_INFO pointerInfo;
143 TOUCH_FLAGS touchFlags;
144 TOUCH_MASK touchMask;
145 RECT rcContact;
146 RECT rcContactRaw;
147 UINT32 orientation;
148 UINT32 pressure;
149} POINTER_TOUCH_INFO;
150
151#else
152#include "user_private.h"
153#include "dbt.h"
154#endif
155#include "wine/debug.h"
156#ifndef __REACTOS__
157#include "wine/plugplay.h"
158#endif
159
161#ifndef __REACTOS__
163
164/***********************************************************************
165 * get_locale_kbd_layout
166 */
168{
170
171 /* FIXME:
172 *
173 * layout = main_key_tab[kbd_layout].lcid;
174 *
175 * Winword uses return value of GetKeyboardLayout as a codepage
176 * to translate ANSI keyboard messages to unicode. But we have
177 * a problem with it: for instance Polish keyboard layout is
178 * identical to the US one, and therefore instead of the Polish
179 * locale id we return the US one.
180 */
181
184 return (HKL)layout;
185}
186
187
188/***********************************************************************
189 * keybd_event (USER32.@)
190 */
192 DWORD dwFlags, ULONG_PTR dwExtraInfo )
193{
194 INPUT input;
195
196 input.type = INPUT_KEYBOARD;
197 input.ki.wVk = bVk;
198 input.ki.wScan = bScan;
199 input.ki.dwFlags = dwFlags;
200 input.ki.time = 0;
201 input.ki.dwExtraInfo = dwExtraInfo;
202 NtUserSendInput( 1, &input, sizeof(input) );
203}
204
205
206/***********************************************************************
207 * mouse_event (USER32.@)
208 */
210 DWORD dwData, ULONG_PTR dwExtraInfo )
211{
212 INPUT input;
213
214 input.type = INPUT_MOUSE;
215 input.mi.dx = dx;
216 input.mi.dy = dy;
217 input.mi.mouseData = dwData;
218 input.mi.dwFlags = dwFlags;
219 input.mi.time = 0;
220 input.mi.dwExtraInfo = dwExtraInfo;
221 NtUserSendInput( 1, &input, sizeof(input) );
222}
223
224
225/***********************************************************************
226 * GetCursorPos (USER32.@)
227 */
229{
230 return NtUserGetCursorPos( pt );
231}
232
233
234/**********************************************************************
235 * ReleaseCapture (USER32.@)
236 */
238{
239 return NtUserReleaseCapture();
240}
241
242
243/**********************************************************************
244 * GetCapture (USER32.@)
245 */
247{
249 info.cbSize = sizeof(info);
250 return NtUserGetGUIThreadInfo( GetCurrentThreadId(), &info ) ? info.hwndCapture : 0;
251}
252
253
254/*****************************************************************
255 * DestroyCaret (USER32.@)
256 */
258{
259 return NtUserDestroyCaret();
260}
261
262
263/*****************************************************************
264 * SetCaretPos (USER32.@)
265 */
267{
268 return NtUserSetCaretPos( x, y );
269}
270
271
272/*****************************************************************
273 * SetCaretBlinkTime (USER32.@)
274 */
276{
277 return NtUserSetCaretBlinkTime( time );
278}
279
280
281/***********************************************************************
282 * GetInputState (USER32.@)
283 */
285{
286 return NtUserGetInputState();
287}
288
289
290/******************************************************************
291 * GetLastInputInfo (USER32.@)
292 */
294{
295 TRACE("%p\n", plii);
296
297 if (plii->cbSize != sizeof (*plii) )
298 {
300 return FALSE;
301 }
302 plii->dwTime = NtUserGetLastInputTime();
303 return TRUE;
304}
305
306
307/**********************************************************************
308 * VkKeyScanA (USER32.@)
309 *
310 * VkKeyScan translates an ANSI character to a virtual-key and shift code
311 * for the current keyboard.
312 * high-order byte yields :
313 * 0 Unshifted
314 * 1 Shift
315 * 2 Ctrl
316 * 3-5 Shift-key combinations that are not used for characters
317 * 6 Ctrl-Alt
318 * 7 Ctrl-Alt-Shift
319 * I.e. : Shift = 1, Ctrl = 2, Alt = 4.
320 * FIXME : works ok except for dead chars :
321 * VkKeyScan '^'(0x5e, 94) ... got keycode 00 ... returning 00
322 * VkKeyScan '`'(0x60, 96) ... got keycode 00 ... returning 00
323 */
325{
326 WCHAR wChar;
327
328 if (IsDBCSLeadByte(cChar)) return -1;
329
330 MultiByteToWideChar(CP_ACP, 0, &cChar, 1, &wChar, 1);
331 return VkKeyScanW(wChar);
332}
333
334/******************************************************************************
335 * VkKeyScanW (USER32.@)
336 */
338{
339 return NtUserVkKeyScanEx( cChar, NtUserGetKeyboardLayout(0) );
340}
341
342/**********************************************************************
343 * VkKeyScanExA (USER32.@)
344 */
346{
347 WCHAR wChar;
348
349 if (IsDBCSLeadByte(cChar)) return -1;
350
351 MultiByteToWideChar(CP_ACP, 0, &cChar, 1, &wChar, 1);
352 return NtUserVkKeyScanEx( wChar, dwhkl );
353}
354
355/**********************************************************************
356 * OemKeyScan (USER32.@)
357 */
359{
360 WCHAR wchr;
361 DWORD vkey, scan;
362 char oem_char = LOBYTE( oem );
363
364 if (!OemToCharBuffW( &oem_char, &wchr, 1 ))
365 return -1;
366
367 vkey = VkKeyScanW( wchr );
368 scan = MapVirtualKeyW( LOBYTE( vkey ), MAPVK_VK_TO_VSC );
369 if (!scan) return -1;
370
371 vkey &= 0xff00;
372 vkey <<= 8;
373 return vkey | scan;
374}
375
376/******************************************************************************
377 * GetKeyboardType (USER32.@)
378 */
380{
381 TRACE_(keyboard)("(%d)\n", nTypeFlag);
383 {
384 /* scan code for `_', the key left of r-shift, in Japanese 106 keyboard */
385 const UINT JP106_VSC_USCORE = 0x73;
386
387 switch(nTypeFlag)
388 {
389 case 0: /* Keyboard type */
390 return 7; /* Japanese keyboard */
391 case 1: /* Keyboard Subtype */
392 /* Test keyboard mappings to detect Japanese keyboard */
393 if (MapVirtualKeyW(VK_OEM_102, MAPVK_VK_TO_VSC) == JP106_VSC_USCORE
394 && MapVirtualKeyW(JP106_VSC_USCORE, MAPVK_VSC_TO_VK) == VK_OEM_102)
395 return 2; /* Japanese 106 */
396 else
397 return 0; /* AT-101 */
398 case 2: /* Number of F-keys */
399 return 12; /* It has 12 F-keys */
400 }
401 }
402 else
403 {
404 switch(nTypeFlag)
405 {
406 case 0: /* Keyboard type */
407 return 4; /* AT-101 */
408 case 1: /* Keyboard Subtype */
409 return 0; /* There are no defined subtypes */
410 case 2: /* Number of F-keys */
411 return 12; /* We're doing an 101 for now, so return 12 F-keys */
412 }
413 }
414 WARN_(keyboard)("Unknown type\n");
415 return 0; /* The book says 0 here, so 0 */
416}
417
418/******************************************************************************
419 * MapVirtualKeyA (USER32.@)
420 */
422{
423 return MapVirtualKeyExA( code, maptype, NtUserGetKeyboardLayout(0) );
424}
425
426/******************************************************************************
427 * MapVirtualKeyW (USER32.@)
428 */
430{
432}
433
434/******************************************************************************
435 * MapVirtualKeyExA (USER32.@)
436 */
438{
439 UINT ret;
440
441 ret = NtUserMapVirtualKeyEx( code, maptype, hkl );
442 if (maptype == MAPVK_VK_TO_CHAR)
443 {
444 BYTE ch = 0;
445 WCHAR wch = ret;
446
447 WideCharToMultiByte( CP_ACP, 0, &wch, 1, (LPSTR)&ch, 1, NULL, NULL );
448 ret = ch;
449 }
450 return ret;
451}
452
453/****************************************************************************
454 * GetKBCodePage (USER32.@)
455 */
457{
458 return GetOEMCP();
459}
460
461/****************************************************************************
462 * GetKeyboardLayoutNameA (USER32.@)
463 */
465{
467
469 return WideCharToMultiByte( CP_ACP, 0, buf, -1, pszKLID, KL_NAMELENGTH, NULL, NULL ) != 0;
470 return FALSE;
471}
472
473/****************************************************************************
474 * GetKeyNameTextA (USER32.@)
475 */
477{
478 WCHAR buf[256];
479 INT ret;
480
482 {
483 lpBuffer[0] = 0;
484 return 0;
485 }
487 if (!ret && nSize)
488 {
489 ret = nSize - 1;
490 lpBuffer[ret] = 0;
491 }
492 else ret--;
493
494 return ret;
495}
496
497/****************************************************************************
498 * ToUnicode (USER32.@)
499 */
501{
502 return NtUserToUnicodeEx( virt, scan, state, str, size, flags, NtUserGetKeyboardLayout(0) );
503}
504
505/****************************************************************************
506 * ToAscii (USER32.@)
507 */
508INT WINAPI ToAscii( UINT virtKey, UINT scanCode, const BYTE *lpKeyState,
509 LPWORD lpChar, UINT flags )
510{
511 return ToAsciiEx( virtKey, scanCode, lpKeyState, lpChar, flags,
513}
514
515/****************************************************************************
516 * ToAsciiEx (USER32.@)
517 */
518INT WINAPI ToAsciiEx( UINT virtKey, UINT scanCode, const BYTE *lpKeyState,
519 LPWORD lpChar, UINT flags, HKL dwhkl )
520{
521 WCHAR uni_chars[2];
522 INT ret, n_ret;
523
524 ret = NtUserToUnicodeEx( virtKey, scanCode, lpKeyState, uni_chars, 2, flags, dwhkl );
525 if (ret < 0) n_ret = 1; /* FIXME: make ToUnicode return 2 for dead chars */
526 else n_ret = ret;
527 WideCharToMultiByte(CP_ACP, 0, uni_chars, n_ret, (LPSTR)lpChar, 2, NULL, NULL);
528 return ret;
529}
530
531/**********************************************************************
532 * BlockInput (USER32.@)
533 */
535{
536 FIXME_(keyboard)("(%d): stub\n", fBlockIt);
538
539 return FALSE;
540}
541
542
543/***********************************************************************
544 * LoadKeyboardLayoutW (USER32.@)
545 */
547{
548 WCHAR layout_path[MAX_PATH], value[5];
550 DWORD id, value_size, tmp;
551 HKEY hkey;
552 HKL layout;
553
554 FIXME_(keyboard)( "name %s, flags %x, semi-stub!\n", debugstr_w( name ), flags );
555
556 tmp = wcstoul( name, NULL, 16 );
557 if (HIWORD( tmp )) layout = UlongToHandle( tmp );
558 else layout = UlongToHandle( MAKELONG( LOWORD( tmp ), LOWORD( tmp ) ) );
559
560 if (!((UINT_PTR)layout >> 28)) id = LOWORD( tmp );
561 else id = HIWORD( layout ); /* IME or aliased layout */
562
563 wcscpy( layout_path, L"System\\CurrentControlSet\\Control\\Keyboard Layouts\\" );
564 wcscat( layout_path, name );
565
566 if (!RegOpenKeyW( HKEY_LOCAL_MACHINE, layout_path, &hkey ))
567 {
568 value_size = sizeof(value);
569 if (!RegGetValueW( hkey, NULL, L"Layout Id", RRF_RT_REG_SZ, NULL, (void *)&value, &value_size ))
570 id = 0xf000 | (wcstoul( value, NULL, 16 ) & 0xfff);
571
572 RegCloseKey( hkey );
573 }
574
577
578 /* FIXME: semi-stub: returning default layout */
579 return get_locale_kbd_layout();
580}
581
582/***********************************************************************
583 * LoadKeyboardLayoutA (USER32.@)
584 */
586{
587 HKL ret;
588 UNICODE_STRING pwszKLIDW;
589
590 if (pwszKLID) RtlCreateUnicodeStringFromAsciiz(&pwszKLIDW, pwszKLID);
591 else pwszKLIDW.Buffer = NULL;
592
593 ret = LoadKeyboardLayoutW(pwszKLIDW.Buffer, Flags);
594 RtlFreeUnicodeString(&pwszKLIDW);
595 return ret;
596}
597
598
599/***********************************************************************
600 * LoadKeyboardLayoutEx (USER32.@)
601 */
603{
604 FIXME_(keyboard)( "layout %p, name %s, flags %x, semi-stub!\n", layout, debugstr_w( name ), flags );
605
606 if (!layout) return NULL;
607 return LoadKeyboardLayoutW( name, flags );
608}
609
610/***********************************************************************
611 * UnloadKeyboardLayout (USER32.@)
612 */
614{
615 FIXME_(keyboard)( "layout %p, stub!\n", layout );
617 return FALSE;
618}
619
620
622{
624 return 0;
625}
626
628{
629 if (flags & 0x8000)
630 {
631 switch (header->dbch_devicetype)
632 {
634 {
636 size_t lenW = wcslen( ifaceW->dbcc_name );
638 DWORD lenA;
639
640 if (!(ifaceA = malloc( offsetof(DEV_BROADCAST_DEVICEINTERFACE_A, dbcc_name[lenW * 3 + 1]) )))
641 return 0;
642 lenA = WideCharToMultiByte( CP_ACP, 0, ifaceW->dbcc_name, lenW + 1,
643 ifaceA->dbcc_name, lenW * 3 + 1, NULL, NULL );
644
645 ifaceA->dbcc_size = offsetof(DEV_BROADCAST_DEVICEINTERFACE_A, dbcc_name[lenA + 1]);
646 ifaceA->dbcc_devicetype = ifaceW->dbcc_devicetype;
647 ifaceA->dbcc_reserved = ifaceW->dbcc_reserved;
648 ifaceA->dbcc_classguid = ifaceW->dbcc_classguid;
650 free( ifaceA );
651 return 0;
652 }
653
655 {
656 const DEV_BROADCAST_HANDLE *handleW = (const DEV_BROADCAST_HANDLE *)header;
657 UINT sizeW = handleW->dbch_size - offsetof(DEV_BROADCAST_HANDLE, dbch_data[0]), len, offset;
658 DEV_BROADCAST_HANDLE *handleA;
659
660 if (!(handleA = malloc( offsetof(DEV_BROADCAST_HANDLE, dbch_data[sizeW * 3 + 1]) ))) return 0;
661 memcpy( handleA, handleW, offsetof(DEV_BROADCAST_HANDLE, dbch_data[0]) );
662 offset = min( sizeW, handleW->dbch_nameoffset );
663
664 memcpy( handleA->dbch_data, handleW->dbch_data, offset );
665 len = WideCharToMultiByte( CP_ACP, 0, (WCHAR *)(handleW->dbch_data + offset), (sizeW - offset) / sizeof(WCHAR),
666 (char *)handleA->dbch_data + offset, sizeW * 3 + 1 - offset, NULL, NULL );
667 handleA->dbch_size = offsetof(DEV_BROADCAST_HANDLE, dbch_data[offset + len + 1]);
668
670 free( handleA );
671 return 0;
672 }
673
674 case DBT_DEVTYP_OEM:
675 break;
676 default:
677 FIXME( "unimplemented W to A mapping for %#lx\n", header->dbch_devicetype );
678 }
679 }
680
682 return 0;
683}
684
686{
687 FIXME("Support for service handles is not yet implemented!\n");
688 return 0;
689}
690
691/***********************************************************************
692 * RegisterDeviceNotificationA (USER32.@)
693 *
694 * See RegisterDeviceNotificationW.
695 */
697{
699}
700
701/***********************************************************************
702 * RegisterDeviceNotificationW (USER32.@)
703 */
705{
707 device_notify_callback callback;
708
709 TRACE("handle %p, filter %p, flags %#lx\n", handle, filter, flags);
710
711 if (flags & ~(DEVICE_NOTIFY_SERVICE_HANDLE | DEVICE_NOTIFY_ALL_INTERFACE_CLASSES))
712 {
714 return NULL;
715 }
716
717 if (!(flags & DEVICE_NOTIFY_SERVICE_HANDLE) && !IsWindow( handle ))
718 {
720 return NULL;
721 }
722
723 if (flags & DEVICE_NOTIFY_SERVICE_HANDLE)
725 else if (IsWindowUnicode( handle ))
727 else
729
730 if (!header)
731 {
733 return I_ScRegisterDeviceNotification( handle, &dummy, callback );
734 }
735 if (header->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE)
736 {
738
739 if (flags & DEVICE_NOTIFY_ALL_INTERFACE_CLASSES)
740 iface.dbcc_size = offsetof( DEV_BROADCAST_DEVICEINTERFACE_W, dbcc_classguid );
741 else
743
744 return I_ScRegisterDeviceNotification( handle, (DEV_BROADCAST_HDR *)&iface, callback );
745 }
746 if (header->dbch_devicetype == DBT_DEVTYP_HANDLE)
747 {
748 FIXME( "DBT_DEVTYP_HANDLE not implemented\n" );
749 return I_ScRegisterDeviceNotification( handle, header, callback );
750 }
751
752 FIXME( "type %#lx not implemented\n", header->dbch_devicetype );
754 return NULL;
755}
756
757/***********************************************************************
758 * UnregisterDeviceNotification (USER32.@)
759 */
761{
762 TRACE("%p\n", handle);
763
764 return I_ScUnregisterDeviceNotification( handle );
765}
766
767/***********************************************************************
768 * GetRawInputDeviceInfoA (USER32.@)
769 */
771{
772 TRACE( "device %p, command %#x, data %p, size %p.\n", device, command, data, size );
773
774 /* RIDI_DEVICENAME size is in chars, not bytes */
775 if (command == RIDI_DEVICENAME)
776 {
777 WCHAR *nameW;
778 UINT ret, sizeW;
779
780 if (!size) return ~0U;
781
782 sizeW = *size;
783
784 if (data && sizeW > 0)
785 nameW = HeapAlloc( GetProcessHeap(), 0, sizeof(WCHAR) * sizeW );
786 else
787 nameW = NULL;
788
790
791 if (ret && ret != ~0U)
793
794 *size = sizeW;
795
797
798 return ret;
799 }
800
802}
803
804/***********************************************************************
805 * DefRawInputProc (USER32.@)
806 */
807LRESULT WINAPI DefRawInputProc( RAWINPUT **data, INT data_count, UINT header_size )
808{
809 TRACE( "data %p, data_count %d, header_size %u.\n", data, data_count, header_size );
810
811 return header_size == sizeof(RAWINPUTHEADER) ? 0 : -1;
812}
813#endif
814
815/*****************************************************************************
816 * CloseTouchInputHandle (USER32.@)
817 */
819{
820 FIXME( "handle %p stub!\n", handle );
822 return FALSE;
823}
824
825/*****************************************************************************
826 * GetTouchInputInfo (USER32.@)
827 */
828BOOL WINAPI GetTouchInputInfo( HTOUCHINPUT handle, UINT count, TOUCHINPUT *ptr, int size )
829{
830 FIXME( "handle %p, count %u, ptr %p, size %u stub!\n", handle, count, ptr, size );
832 return FALSE;
833}
834
835/**********************************************************************
836 * IsTouchWindow (USER32.@)
837 */
839{
840 FIXME( "hwnd %p, flags %p stub!\n", hwnd, flags );
841 return FALSE;
842}
843
844/*****************************************************************************
845 * RegisterTouchWindow (USER32.@)
846 */
848{
849 FIXME( "hwnd %p, flags %#lx stub!\n", hwnd, flags );
850 return TRUE;
851}
852
853/*****************************************************************************
854 * UnregisterTouchWindow (USER32.@)
855 */
857{
858 FIXME( "hwnd %p stub!\n", hwnd );
859 return TRUE;
860}
861
862/*****************************************************************************
863 * GetGestureInfo (USER32.@)
864 */
866{
867 FIXME( "handle %p stub!\n", handle );
869 return FALSE;
870}
871
872/*****************************************************************************
873 * GetGestureInfo (USER32.@)
874 */
876{
877 FIXME( "handle %p, count %u, args %p stub!\n", handle, count, args );
879 return FALSE;
880}
881
882/*****************************************************************************
883 * GetGestureInfo (USER32.@)
884 */
885BOOL WINAPI GetGestureInfo( HGESTUREINFO handle, GESTUREINFO *ptr )
886{
887 FIXME( "handle %p, ptr %p stub!\n", handle, ptr );
889 return FALSE;
890}
891
892/*****************************************************************************
893 * GetGestureConfig (USER32.@)
894 */
896 GESTURECONFIG *config, UINT size )
897{
898 FIXME( "handle %p, reserved %#lx, flags %#lx, count %p, config %p, size %u stub!\n",
901 return FALSE;
902}
903
904/**********************************************************************
905 * SetGestureConfig (USER32.@)
906 */
908 GESTURECONFIG *config, UINT size )
909{
910 FIXME( "handle %p, reserved %#lx, count %u, config %p, size %u stub!\n",
913 return FALSE;
914}
915
916BOOL WINAPI GetPointerTouchInfo( UINT32 id, POINTER_TOUCH_INFO *info )
917{
918 FIXME( "id %u, info %p stub!\n", id, info );
920 return FALSE;
921}
922
924{
925 FIXME( "id %u, count %p, info %p stub!\n", id, count, info );
927 return FALSE;
928}
929
930#ifndef __REACTOS__
931/*******************************************************************
932 * SetForegroundWindow (USER32.@)
933 */
935{
936 return NtUserSetForegroundWindow( hwnd );
937}
938
939
940/*******************************************************************
941 * GetActiveWindow (USER32.@)
942 */
944{
946 info.cbSize = sizeof(info);
947 return NtUserGetGUIThreadInfo( GetCurrentThreadId(), &info ) ? info.hwndActive : 0;
948}
949
950
951/*****************************************************************
952 * GetFocus (USER32.@)
953 */
955{
957 info.cbSize = sizeof(info);
958 return NtUserGetGUIThreadInfo( GetCurrentThreadId(), &info ) ? info.hwndFocus : 0;
959}
960
961
962/*******************************************************************
963 * SetShellWindow (USER32.@)
964 */
966{
968}
969
970
971/*******************************************************************
972 * GetShellWindow (USER32.@)
973 */
975{
976 return NtUserGetShellWindow();
977}
978
979
980/***********************************************************************
981 * SetProgmanWindow (USER32.@)
982 */
984{
985 return NtUserSetProgmanWindow( hwnd );
986}
987
988
989/***********************************************************************
990 * GetProgmanWindow (USER32.@)
991 */
993{
994 return NtUserGetProgmanWindow();
995}
996
997
998/***********************************************************************
999 * SetTaskmanWindow (USER32.@)
1000 */
1002{
1003 return NtUserSetTaskmanWindow( hwnd );
1004}
1005
1006/***********************************************************************
1007 * GetTaskmanWindow (USER32.@)
1008 */
1010{
1011 return NtUserGetTaskmanWindow();
1012}
1013#endif
1014
1015HSYNTHETICPOINTERDEVICE WINAPI CreateSyntheticPointerDevice(POINTER_INPUT_TYPE type, ULONG max_count, POINTER_FEEDBACK_MODE mode)
1016{
1017 FIXME( "type %ld, max_count %ld, mode %d stub!\n", type, max_count, mode);
1019 return NULL;
1020}
signed int INT32
unsigned long long UINT64
unsigned int UINT32
static int state
Definition: maze.c:121
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
static const WCHAR nameW[]
Definition: main.c:49
#define U(x)
Definition: wordpad.c:45
#define FIXME(fmt,...)
Definition: precomp.h:53
#define UlongToHandle(ul)
Definition: basetsd.h:97
#define RegCloseKey(hKey)
Definition: registry.h:49
Definition: _locale.h:75
LPARAM lParam
Definition: combotst.c:139
wcscat
wcscpy
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
Definition: db.cpp:175
#define DBT_DEVTYP_HANDLE
Definition: dbt.h:25
#define DBT_DEVTYP_DEVICEINTERFACE
Definition: dbt.h:24
#define DBT_DEVTYP_OEM
Definition: dbt.h:19
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
Definition: reg.c:1931
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3268
#define GetProcessHeap()
Definition: compat.h:736
#define ERROR_CALL_NOT_IMPLEMENTED
Definition: compat.h:102
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define FIXME_(x)
Definition: compat.h:77
#define CP_ACP
Definition: compat.h:109
#define TRACE_(x)
Definition: compat.h:76
#define SetLastError(x)
Definition: compat.h:752
#define HeapAlloc
Definition: compat.h:733
#define MAX_PATH
Definition: compat.h:34
#define HeapFree(x, y, z)
Definition: compat.h:735
#define WINE_DECLARE_DEBUG_CHANNEL(x)
Definition: compat.h:45
#define CALLBACK
Definition: compat.h:35
#define WideCharToMultiByte
Definition: compat.h:111
#define MultiByteToWideChar
Definition: compat.h:110
BOOL WINAPI IsDBCSLeadByte(BYTE testchar)
Definition: locale.c:2124
LCID WINAPI GetUserDefaultLCID(void)
Definition: locale.c:1211
UINT WINAPI GetOEMCP(void)
Definition: locale.c:2060
static const WCHAR sizeW[]
Definition: editor.c:79
#define RRF_RT_REG_SZ
Definition: driver.c:575
#define pt(x, y)
Definition: drawing.c:79
r reserved
Definition: btrfs.c:3006
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
Character const *const size_t const max_count
Definition: fullpath.cpp:66
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLsizeiptr size
Definition: glext.h:5919
GLintptr offset
Definition: glext.h:5920
GLenum mode
Definition: glext.h:6217
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition: glext.h:7005
GLbitfield flags
Definition: glext.h:7161
GLenum GLsizei len
Definition: glext.h:6722
GLenum GLenum GLenum input
Definition: glext.h:9031
GLuint id
Definition: glext.h:5910
_Check_return_ unsigned long __cdecl wcstoul(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
HKL NTAPI NtUserActivateKeyboardLayout(HKL hKL, ULONG Flags)
Definition: kbdlayout.c:1226
DWORD NTAPI NtUserVkKeyScanEx(WCHAR wChar, HKL KeyboardLayout, BOOL bUsehHK)
Definition: keyboard.c:1709
DWORD NTAPI NtUserGetKeyNameText(LONG lParam, LPWSTR lpString, int nSize)
Definition: keyboard.c:1584
HKL NTAPI NtUserGetKeyboardLayout(DWORD dwThreadid)
UINT NTAPI NtUserMapVirtualKeyEx(UINT keyCode, UINT transType, DWORD keyboardId, HKL dwhkl)
Definition: keyboard.c:1439
INT NTAPI NtUserToUnicodeEx(UINT wVirtKey, UINT wScanCode, PBYTE lpKeyState, LPWSTR pwszBuff, int cchBuff, UINT wFlags, HKL dwhkl)
DWORD NTAPI NtUserGetRawInputDeviceInfo(HANDLE hDevice, UINT uiCommand, LPVOID pData, PUINT pcbSize)
Definition: ntstubs.c:417
BOOL NTAPI NtUserGetKeyboardLayoutName(_Inout_ PUNICODE_STRING pustrName)
Definition: kbdlayout.c:1092
BOOL NTAPI NtUserGetGUIThreadInfo(DWORD idThread, LPGUITHREADINFO lpgui)
Definition: misc.c:405
BOOL NTAPI NtUserSetShellWindowEx(HWND hwndShell, HWND hwndShellListView)
Definition: window.c:3717
#define LOBYTE(W)
Definition: jmemdos.c:487
#define debugstr_w
Definition: kernel32.h:32
static real win[4][36]
GLint dy
Definition: linetemp.h:97
GLint dx
Definition: linetemp.h:97
#define DECLARE_HANDLE(name)
Definition: mimeole.idl:23
__u16 time
Definition: mkdosfs.c:8
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static PVOID ptr
Definition: dispmode.c:27
static IPrintDialogCallback callback
Definition: printdlg.c:326
static DWORD layout
Definition: bitmap.c:46
static HANDLE ULONG_PTR dwData
Definition: file.c:35
#define min(a, b)
Definition: monoChain.cc:55
HKL hkl
Definition: msctf.idl:650
UINT_PTR HKL
Definition: msctf.idl:143
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
unsigned int UINT
Definition: ndis.h:50
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeStringFromAsciiz(_Out_ PUNICODE_STRING Destination, _In_ PCSZ Source)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
#define L(x)
Definition: ntvdm.h:50
#define LOWORD(l)
Definition: pedump.c:82
short SHORT
Definition: pedump.c:59
long LONG
Definition: pedump.c:60
PVOID * PHPOWERNOTIFY
Definition: powrprof.h:154
PVOID HPOWERNOTIFY
Definition: powrprof.h:154
const WCHAR * str
#define offsetof(TYPE, MEMBER)
#define SUBLANG_JAPANESE_JAPAN
Definition: nls.h:271
#define MAKELANGID(p, s)
Definition: nls.h:15
DWORD LCID
Definition: nls.h:13
#define LANG_JAPANESE
Definition: nls.h:76
#define WARN_(ch,...)
Definition: debug.h:157
#define DECLSPEC_HOTPATCH
Definition: config.h:9
#define TRACE(s)
Definition: solgame.cpp:4
DWORD dwTime
Definition: solitaire.cpp:27
LONG dbch_nameoffset
Definition: dbt.h:128
BYTE dbch_data[1]
Definition: dbt.h:129
Definition: match.c:390
Definition: inflate.c:139
Definition: devices.h:37
Definition: name.c:39
uint16_t * LPWORD
Definition: typedefs.h:56
int32_t INT
Definition: typedefs.h:58
uint32_t ULONG_PTR
Definition: typedefs.h:65
#define MAKELONG(a, b)
Definition: typedefs.h:249
uint32_t ULONG
Definition: typedefs.h:59
uint64_t ULONGLONG
Definition: typedefs.h:67
#define HIWORD(l)
Definition: typedefs.h:247
Definition: pdh_main.c:96
int ret
UINT APIENTRY NtUserSendInput(UINT nInputs, LPINPUT pInput, INT cbSize)
Definition: input.c:708
UINT WINAPI GetRawInputDeviceInfoA(HANDLE hDevice, UINT uiCommand, LPVOID pData, PUINT pcbSize)
Definition: stubs.c:257
SHORT WINAPI VkKeyScanA(CHAR ch)
Definition: input.c:1021
int WINAPI GetKeyboardType(int nTypeFlag)
Definition: input.c:643
UINT WINAPI MapVirtualKeyA(UINT uCode, UINT uMapType)
Definition: input.c:859
HKL WINAPI LoadKeyboardLayoutW(LPCWSTR pwszKLID, UINT Flags)
Definition: input.c:822
HKL WINAPI LoadKeyboardLayoutA(LPCSTR pszKLID, UINT Flags)
Definition: input.c:670
SHORT WINAPI VkKeyScanExA(CHAR ch, HKL dwhkl)
Definition: input.c:1037
HKL WINAPI LoadKeyboardLayoutEx(HKL hklUnload, LPCWSTR pwszKLID, UINT Flags)
Definition: input.c:833
BOOL WINAPI GetLastInputInfo(PLASTINPUTINFO plii)
Definition: input.c:652
BOOL WINAPI UnloadKeyboardLayout(HKL hKL)
Definition: input.c:846
HWND WINAPI SetTaskmanWindow(HWND hwnd)
Definition: input.c:1001
HSYNTHETICPOINTERDEVICE WINAPI CreateSyntheticPointerDevice(POINTER_INPUT_TYPE type, ULONG max_count, POINTER_FEEDBACK_MODE mode)
Definition: input.c:1015
static DWORD CALLBACK devnotify_service_callback(HANDLE handle, DWORD flags, DEV_BROADCAST_HDR *header)
Definition: input.c:685
HDEVNOTIFY WINAPI RegisterDeviceNotificationA(HANDLE handle, void *filter, DWORD flags)
Definition: input.c:696
BOOL WINAPI GetPointerTouchInfo(UINT32 id, POINTER_TOUCH_INFO *info)
Definition: input.c:916
BOOL WINAPI SetShellWindow(HWND hwnd)
Definition: input.c:965
BOOL WINAPI GetGestureInfo(HGESTUREINFO handle, GESTUREINFO *ptr)
Definition: input.c:885
HWND WINAPI GetCapture(void)
Definition: input.c:246
HWND WINAPI GetProgmanWindow(void)
Definition: input.c:992
static HKL get_locale_kbd_layout(void)
Definition: input.c:167
HWND WINAPI SetProgmanWindow(HWND hwnd)
Definition: input.c:983
BOOL WINAPI SetCaretPos(int x, int y)
Definition: input.c:266
BOOL WINAPI GetTouchInputInfo(HTOUCHINPUT handle, UINT count, TOUCHINPUT *ptr, int size)
Definition: input.c:828
HDEVNOTIFY WINAPI RegisterDeviceNotificationW(HANDLE handle, void *filter, DWORD flags)
Definition: input.c:704
BOOL WINAPI RegisterTouchWindow(HWND hwnd, ULONG flags)
Definition: input.c:847
BOOL WINAPI IsTouchWindow(HWND hwnd, ULONG *flags)
Definition: input.c:838
static DWORD CALLBACK devnotify_window_callbackW(HANDLE handle, DWORD flags, DEV_BROADCAST_HDR *header)
Definition: input.c:621
BOOL WINAPI CloseTouchInputHandle(HTOUCHINPUT handle)
Definition: input.c:818
static DWORD CALLBACK devnotify_window_callbackA(HANDLE handle, DWORD flags, DEV_BROADCAST_HDR *header)
Definition: input.c:627
BOOL WINAPI UnregisterTouchWindow(HWND hwnd)
Definition: input.c:856
BOOL WINAPI CloseGestureInfoHandle(HGESTUREINFO handle)
Definition: input.c:865
BOOL WINAPI BlockInput(BOOL fBlockIt)
Definition: input.c:534
HWND WINAPI GetTaskmanWindow(void)
Definition: input.c:1009
BOOL WINAPI GetGestureExtraArgs(HGESTUREINFO handle, UINT count, BYTE *args)
Definition: input.c:875
BOOL WINAPI DestroyCaret(void)
Definition: input.c:257
BOOL WINAPI GetPointerTouchInfoHistory(UINT32 id, UINT32 *count, POINTER_TOUCH_INFO *info)
Definition: input.c:923
BOOL WINAPI GetInputState(void)
Definition: input.c:284
BOOL WINAPI UnregisterDeviceNotification(HDEVNOTIFY handle)
Definition: input.c:760
HWND WINAPI GetShellWindow(void)
Definition: input.c:974
LRESULT WINAPI DefRawInputProc(RAWINPUT **data, INT data_count, UINT header_size)
Definition: input.c:807
BOOL WINAPI SetCaretBlinkTime(unsigned int time)
Definition: input.c:275
BOOL WINAPI GetGestureConfig(HWND hwnd, DWORD reserved, DWORD flags, UINT *count, GESTURECONFIG *config, UINT size)
Definition: input.c:895
BOOL WINAPI SetGestureConfig(HWND hwnd, DWORD reserved, UINT count, GESTURECONFIG *config, UINT size)
Definition: input.c:907
ORIENTATION_PREFERENCE
Definition: sysparams.c:236
@ ORIENTATION_PREFERENCE_LANDSCAPE_FLIPPED
Definition: sysparams.c:240
@ ORIENTATION_PREFERENCE_PORTRAIT_FLIPPED
Definition: sysparams.c:241
@ ORIENTATION_PREFERENCE_LANDSCAPE
Definition: sysparams.c:238
@ ORIENTATION_PREFERENCE_NONE
Definition: sysparams.c:237
@ ORIENTATION_PREFERENCE_PORTRAIT
Definition: sysparams.c:239
#define INPUT_KEYBOARD
Definition: winable.h:10
#define INPUT_MOUSE
Definition: winable.h:9
DWORD WINAPI GetCurrentThreadId(void)
Definition: thread.c:459
*nSize LPSTR _Inout_ LPDWORD nSize
Definition: winbase.h:2115
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
#define WINAPI
Definition: msvc.h:6
#define ERROR_INVALID_DATA
Definition: winerror.h:116
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
HWND WINAPI GetFocus(void)
Definition: window.c:1875
BOOL WINAPI IsWindow(_In_opt_ HWND)
HWND WINAPI GetActiveWindow(void)
Definition: winpos.c:138
void WINAPI mouse_event(_In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ ULONG_PTR)
BOOL WINAPI GetKeyboardLayoutNameA(_Out_writes_(KL_NAMELENGTH) LPSTR)
BOOL WINAPI ReleaseCapture(void)
Definition: message.c:2890
UINT WINAPI MapVirtualKeyExA(_In_ UINT, _In_ UINT, _In_opt_ HKL)
#define KL_NAMELENGTH
Definition: winuser.h:122
int WINAPI GetKeyNameTextA(_In_ LONG lParam, _Out_writes_(cchSize) LPSTR lpString, _In_ int cchSize)
#define KLF_ACTIVATE
Definition: winuser.h:111
int WINAPI ToAscii(_In_ UINT, _In_ UINT, _In_reads_opt_(256) CONST BYTE *, _Out_ LPWORD, _In_ UINT)
BOOL WINAPI SetForegroundWindow(_In_ HWND)
BOOL WINAPI GetCursorPos(_Out_ LPPOINT)
Definition: cursoricon.c:3032
int WINAPI ToUnicode(_In_ UINT wVirtKey, _In_ UINT wScanCode, _In_reads_bytes_opt_(256) CONST BYTE *lpKeyState, _Out_writes_(cchBuff) LPWSTR pwszBuff, _In_ int cchBuff, _In_ UINT wFlags)
#define WM_DEVICECHANGE
Definition: winuser.h:1822
LRESULT WINAPI SendMessageTimeoutW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM, _In_ UINT, _In_ UINT, _Out_opt_ PDWORD_PTR)
#define MAPVK_VSC_TO_VK
Definition: winuser.h:2367
UINT WINAPI MapVirtualKeyW(_In_ UINT, _In_ UINT)
BOOL WINAPI IsWindowUnicode(_In_ HWND)
BOOL WINAPI OemToCharBuffW(_In_ LPCSTR lpszSrc, _Out_writes_(cchDstLength) LPWSTR lpszDst, _In_ DWORD cchDstLength)
LRESULT WINAPI SendMessageTimeoutA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM, _In_ UINT, _In_ UINT, _Out_opt_ PDWORD_PTR)
VOID WINAPI keybd_event(_In_ BYTE, _In_ BYTE, _In_ DWORD, _In_ ULONG_PTR)
#define MAPVK_VK_TO_CHAR
Definition: winuser.h:2368
#define SMTO_ABORTIFHUNG
Definition: winuser.h:1234
#define MAPVK_VK_TO_VSC
Definition: winuser.h:2366
DWORD WINAPI OemKeyScan(_In_ WORD)
int WINAPI ToAsciiEx(_In_ UINT, _In_ UINT, _In_reads_opt_(256) CONST BYTE *, _Out_ LPWORD, _In_ UINT, _In_opt_ HKL)
SHORT WINAPI VkKeyScanW(_In_ WCHAR)
UINT WINAPI GetKBCodePage(void)
Definition: input.c:551
BOOL bScan
Definition: wlanconf.c:23
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList
const char * LPCSTR
Definition: xmlstorage.h:183
char * LPSTR
Definition: xmlstorage.h:182
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
char CHAR
Definition: xmlstorage.h:175
unsigned char BYTE
Definition: xxhash.c:193