Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 1 | /* |
Alexandre Julliard | 6a78c16 | 2004-12-08 18:06:14 +0000 | [diff] [blame] | 2 | * USER private definitions |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 3 | * |
| 4 | * Copyright 1993 Alexandre Julliard |
Alexandre Julliard | 0799c1a | 2002-03-09 23:29:33 +0000 | [diff] [blame] | 5 | * |
| 6 | * This library is free software; you can redistribute it and/or |
| 7 | * modify it under the terms of the GNU Lesser General Public |
| 8 | * License as published by the Free Software Foundation; either |
| 9 | * version 2.1 of the License, or (at your option) any later version. |
| 10 | * |
| 11 | * This library is distributed in the hope that it will be useful, |
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 14 | * Lesser General Public License for more details. |
| 15 | * |
| 16 | * You should have received a copy of the GNU Lesser General Public |
| 17 | * License along with this library; if not, write to the Free Software |
Jonathan Ernst | 360a3f9 | 2006-05-18 14:49:52 +0200 | [diff] [blame] | 18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 19 | */ |
| 20 | |
Alexandre Julliard | 6a78c16 | 2004-12-08 18:06:14 +0000 | [diff] [blame] | 21 | #ifndef __WINE_USER_PRIVATE_H |
| 22 | #define __WINE_USER_PRIVATE_H |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 23 | |
Alexandre Julliard | e37c6e1 | 2003-09-05 23:08:26 +0000 | [diff] [blame] | 24 | #include <stdarg.h> |
Alexandre Julliard | 6a78c16 | 2004-12-08 18:06:14 +0000 | [diff] [blame] | 25 | #include "windef.h" |
| 26 | #include "winbase.h" |
| 27 | #include "wingdi.h" |
| 28 | #include "winuser.h" |
Alexandre Julliard | 86be9f2 | 2005-04-27 08:18:20 +0000 | [diff] [blame] | 29 | #include "winreg.h" |
| 30 | #include "winternl.h" |
Dimi Paun | 8ad6c25 | 2005-05-19 11:12:57 +0000 | [diff] [blame] | 31 | #include "wine/windef16.h" |
| 32 | #include "wine/winbase16.h" |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 33 | |
Alexandre Julliard | c57b505 | 2007-11-07 18:05:49 +0100 | [diff] [blame^] | 34 | extern WORD USER_HeapSel DECLSPEC_HIDDEN; |
Alexandre Julliard | 401710d | 1993-09-04 10:09:32 +0000 | [diff] [blame] | 35 | |
Dimi Paun | 8ad6c25 | 2005-05-19 11:12:57 +0000 | [diff] [blame] | 36 | static inline HLOCAL16 LOCAL_Alloc( HANDLE16 ds, UINT16 flags, WORD size ) |
| 37 | { |
Dmitry Timoshkov | 9a295e7 | 2007-05-30 19:32:24 +0900 | [diff] [blame] | 38 | STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved)); |
Dimi Paun | 8ad6c25 | 2005-05-19 11:12:57 +0000 | [diff] [blame] | 39 | HANDLE16 oldDS = stack16->ds; |
| 40 | HLOCAL16 ret; |
| 41 | |
| 42 | stack16->ds = ds; |
| 43 | ret = LocalAlloc16 (flags, size); |
| 44 | stack16->ds = oldDS; |
| 45 | return ret; |
| 46 | } |
| 47 | |
| 48 | static inline HLOCAL16 LOCAL_ReAlloc( HANDLE16 ds, HLOCAL16 handle, WORD size, UINT16 flags ) |
| 49 | { |
Dmitry Timoshkov | 9a295e7 | 2007-05-30 19:32:24 +0900 | [diff] [blame] | 50 | STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved)); |
Dimi Paun | 8ad6c25 | 2005-05-19 11:12:57 +0000 | [diff] [blame] | 51 | HANDLE16 oldDS = stack16->ds; |
| 52 | HLOCAL16 ret; |
| 53 | |
| 54 | stack16->ds = ds; |
| 55 | ret = LocalReAlloc16 (handle, size, flags); |
| 56 | stack16->ds = oldDS; |
| 57 | return ret; |
| 58 | } |
| 59 | |
| 60 | static inline HLOCAL16 LOCAL_Free( HANDLE16 ds, HLOCAL16 handle ) |
| 61 | { |
Dmitry Timoshkov | 9a295e7 | 2007-05-30 19:32:24 +0900 | [diff] [blame] | 62 | STACK16FRAME* stack16 = MapSL(PtrToUlong(NtCurrentTeb()->WOW32Reserved)); |
Dimi Paun | 8ad6c25 | 2005-05-19 11:12:57 +0000 | [diff] [blame] | 63 | HANDLE16 oldDS = stack16->ds; |
| 64 | HLOCAL16 ret; |
| 65 | |
| 66 | stack16->ds = ds; |
| 67 | ret = LocalFree16 (handle); |
| 68 | stack16->ds = oldDS; |
| 69 | return ret; |
| 70 | } |
| 71 | |
Alexandre Julliard | e2abbb1 | 1995-03-19 17:39:39 +0000 | [diff] [blame] | 72 | #define USER_HEAP_ALLOC(size) \ |
Alexandre Julliard | 7521a42 | 2002-10-19 00:55:34 +0000 | [diff] [blame] | 73 | ((HANDLE)(ULONG_PTR)LOCAL_Alloc( USER_HeapSel, LMEM_FIXED, (size) )) |
Alexandre Julliard | e2abbb1 | 1995-03-19 17:39:39 +0000 | [diff] [blame] | 74 | #define USER_HEAP_REALLOC(handle,size) \ |
Alexandre Julliard | 7521a42 | 2002-10-19 00:55:34 +0000 | [diff] [blame] | 75 | ((HANDLE)(ULONG_PTR)LOCAL_ReAlloc( USER_HeapSel, LOWORD(handle), (size), LMEM_FIXED )) |
Alexandre Julliard | e2abbb1 | 1995-03-19 17:39:39 +0000 | [diff] [blame] | 76 | #define USER_HEAP_FREE(handle) \ |
Alexandre Julliard | 7521a42 | 2002-10-19 00:55:34 +0000 | [diff] [blame] | 77 | LOCAL_Free( USER_HeapSel, LOWORD(handle) ) |
Alexandre Julliard | e2abbb1 | 1995-03-19 17:39:39 +0000 | [diff] [blame] | 78 | #define USER_HEAP_LIN_ADDR(handle) \ |
Alexandre Julliard | 7521a42 | 2002-10-19 00:55:34 +0000 | [diff] [blame] | 79 | ((handle) ? MapSL(MAKESEGPTR(USER_HeapSel, LOWORD(handle))) : NULL) |
Alexandre Julliard | fb9a919 | 1994-03-01 19:48:04 +0000 | [diff] [blame] | 80 | |
Eric Pouech | 294835a | 2004-12-06 20:43:55 +0000 | [diff] [blame] | 81 | #define GET_WORD(ptr) (*(const WORD *)(ptr)) |
| 82 | #define GET_DWORD(ptr) (*(const DWORD *)(ptr)) |
Alexandre Julliard | 7fbd74e | 2002-05-23 02:53:10 +0000 | [diff] [blame] | 83 | |
Francois Gouget | eab56a5 | 2006-11-09 11:24:16 +0100 | [diff] [blame] | 84 | #define WM_SYSTIMER 0x0118 |
| 85 | |
Alexandre Julliard | fb0ff05 | 2001-10-16 21:58:58 +0000 | [diff] [blame] | 86 | /* internal messages codes */ |
| 87 | enum wine_internal_message |
| 88 | { |
| 89 | WM_WINE_DESTROYWINDOW = 0x80000000, |
| 90 | WM_WINE_SETWINDOWPOS, |
| 91 | WM_WINE_SHOWWINDOW, |
Alexandre Julliard | ddc3317 | 2001-10-22 19:08:33 +0000 | [diff] [blame] | 92 | WM_WINE_SETPARENT, |
| 93 | WM_WINE_SETWINDOWLONG, |
Alexandre Julliard | 5030bda | 2002-10-11 23:41:06 +0000 | [diff] [blame] | 94 | WM_WINE_ENABLEWINDOW, |
Alexandre Julliard | ca3ac8f | 2003-07-11 21:55:58 +0000 | [diff] [blame] | 95 | WM_WINE_SETACTIVEWINDOW, |
| 96 | WM_WINE_KEYBOARD_LL_HOOK, |
Alexandre Julliard | 97d6e7f | 2005-03-07 17:19:24 +0000 | [diff] [blame] | 97 | WM_WINE_MOUSE_LL_HOOK, |
| 98 | WM_WINE_FIRST_DRIVER_MSG = 0x80001000, /* range of messages reserved for the USER driver */ |
| 99 | WM_WINE_LAST_DRIVER_MSG = 0x80001fff |
Alexandre Julliard | fb0ff05 | 2001-10-16 21:58:58 +0000 | [diff] [blame] | 100 | }; |
Alexandre Julliard | 42d20f9 | 2000-08-10 01:16:19 +0000 | [diff] [blame] | 101 | |
Alexandre Julliard | 6a78c16 | 2004-12-08 18:06:14 +0000 | [diff] [blame] | 102 | struct tagCURSORICONINFO; |
Alexandre Julliard | 32fb580 | 2001-10-18 21:38:59 +0000 | [diff] [blame] | 103 | |
Patrik Stridvall | b87fe2e | 1999-04-01 08:16:08 +0000 | [diff] [blame] | 104 | typedef struct tagUSER_DRIVER { |
Alexandre Julliard | 28c3a1b | 2000-03-20 18:21:19 +0000 | [diff] [blame] | 105 | /* keyboard functions */ |
Alexandre Julliard | aef19ab | 2005-03-09 16:45:23 +0000 | [diff] [blame] | 106 | HKL (*pActivateKeyboardLayout)(HKL, UINT); |
| 107 | void (*pBeep)(void); |
| 108 | SHORT (*pGetAsyncKeyState)(INT); |
Dmitry Timoshkov | b0c2e54 | 2003-11-14 03:32:43 +0000 | [diff] [blame] | 109 | INT (*pGetKeyNameText)(LONG, LPWSTR, INT); |
Dmitry Timoshkov | b0c2e54 | 2003-11-14 03:32:43 +0000 | [diff] [blame] | 110 | HKL (*pGetKeyboardLayout)(DWORD); |
Alexandre Julliard | aef19ab | 2005-03-09 16:45:23 +0000 | [diff] [blame] | 111 | UINT (*pGetKeyboardLayoutList)(INT, HKL *); |
Dmitry Timoshkov | b0c2e54 | 2003-11-14 03:32:43 +0000 | [diff] [blame] | 112 | BOOL (*pGetKeyboardLayoutName)(LPWSTR); |
| 113 | HKL (*pLoadKeyboardLayout)(LPCWSTR, UINT); |
Alexandre Julliard | aef19ab | 2005-03-09 16:45:23 +0000 | [diff] [blame] | 114 | UINT (*pMapVirtualKeyEx)(UINT, UINT, HKL); |
| 115 | UINT (*pSendInput)(UINT, LPINPUT, int); |
| 116 | INT (*pToUnicodeEx)(UINT, UINT, LPBYTE, LPWSTR, int, UINT, HKL); |
Dmitry Timoshkov | b0c2e54 | 2003-11-14 03:32:43 +0000 | [diff] [blame] | 117 | BOOL (*pUnloadKeyboardLayout)(HKL); |
Alexandre Julliard | aef19ab | 2005-03-09 16:45:23 +0000 | [diff] [blame] | 118 | SHORT (*pVkKeyScanEx)(WCHAR, HKL); |
Alexandre Julliard | 28c3a1b | 2000-03-20 18:21:19 +0000 | [diff] [blame] | 119 | /* mouse functions */ |
Alexandre Julliard | 28c3a1b | 2000-03-20 18:21:19 +0000 | [diff] [blame] | 120 | void (*pSetCursor)(struct tagCURSORICONINFO *); |
Alexandre Julliard | aef19ab | 2005-03-09 16:45:23 +0000 | [diff] [blame] | 121 | BOOL (*pGetCursorPos)(LPPOINT); |
| 122 | BOOL (*pSetCursorPos)(INT,INT); |
Vitaliy Margolen | c3dc692 | 2007-01-04 12:24:50 -0700 | [diff] [blame] | 123 | BOOL (*pClipCursor)(LPCRECT); |
Alexandre Julliard | 7f3418f | 2000-03-25 17:30:13 +0000 | [diff] [blame] | 124 | /* screen saver functions */ |
| 125 | BOOL (*pGetScreenSaveActive)(void); |
| 126 | void (*pSetScreenSaveActive)(BOOL); |
Alexandre Julliard | 42d20f9 | 2000-08-10 01:16:19 +0000 | [diff] [blame] | 127 | /* clipboard functions */ |
Ulrich Czekalla | 0c468c8 | 2006-06-05 11:55:14 -0400 | [diff] [blame] | 128 | INT (*pAcquireClipboard)(HWND); /* Acquire selection */ |
Ulrich Czekalla | b2df5f9 | 2003-06-23 23:02:02 +0000 | [diff] [blame] | 129 | BOOL (*pCountClipboardFormats)(void); /* Count available clipboard formats */ |
Ulrich Czekalla | b41466b | 2004-05-06 23:40:30 +0000 | [diff] [blame] | 130 | void (*pEmptyClipboard)(BOOL); /* Empty clipboard data */ |
Alexandre Julliard | 2997fc5 | 2005-07-18 13:20:18 +0000 | [diff] [blame] | 131 | void (*pEndClipboardUpdate)(void); /* End clipboard update */ |
| 132 | UINT (*pEnumClipboardFormats)(UINT); /* Enumerate clipboard formats */ |
Ulrich Czekalla | b2df5f9 | 2003-06-23 23:02:02 +0000 | [diff] [blame] | 133 | BOOL (*pGetClipboardData)(UINT, HANDLE16*, HANDLE*); /* Get specified selection data */ |
Alexandre Julliard | 2997fc5 | 2005-07-18 13:20:18 +0000 | [diff] [blame] | 134 | INT (*pGetClipboardFormatName)(UINT, LPWSTR, UINT); /* Get a clipboard format name */ |
Ulrich Czekalla | b2df5f9 | 2003-06-23 23:02:02 +0000 | [diff] [blame] | 135 | BOOL (*pIsClipboardFormatAvailable)(UINT); /* Check if specified format is available */ |
Alexandre Julliard | 2997fc5 | 2005-07-18 13:20:18 +0000 | [diff] [blame] | 136 | UINT (*pRegisterClipboardFormat)(LPCWSTR); /* Register a clipboard format */ |
Ulrich Czekalla | b41466b | 2004-05-06 23:40:30 +0000 | [diff] [blame] | 137 | BOOL (*pSetClipboardData)(UINT, HANDLE16, HANDLE, BOOL); /* Set specified selection data */ |
Alex Pasadyn | 330179f | 2003-04-22 00:15:48 +0000 | [diff] [blame] | 138 | /* display modes */ |
Alexandre Julliard | 2997fc5 | 2005-07-18 13:20:18 +0000 | [diff] [blame] | 139 | LONG (*pChangeDisplaySettingsEx)(LPCWSTR,LPDEVMODEW,HWND,DWORD,LPVOID); |
Alexandre Julliard | 8a89035 | 2006-10-23 13:51:30 +0200 | [diff] [blame] | 140 | BOOL (*pEnumDisplayMonitors)(HDC,LPRECT,MONITORENUMPROC,LPARAM); |
Alexandre Julliard | 2997fc5 | 2005-07-18 13:20:18 +0000 | [diff] [blame] | 141 | BOOL (*pEnumDisplaySettingsEx)(LPCWSTR,DWORD,LPDEVMODEW,DWORD); |
Alexandre Julliard | 8a89035 | 2006-10-23 13:51:30 +0200 | [diff] [blame] | 142 | BOOL (*pGetMonitorInfo)(HMONITOR,MONITORINFO*); |
Alexandre Julliard | 9ae0fe5 | 2001-04-24 23:28:52 +0000 | [diff] [blame] | 143 | /* windowing functions */ |
Alexandre Julliard | e419cb8 | 2005-07-07 20:33:29 +0000 | [diff] [blame] | 144 | BOOL (*pCreateDesktopWindow)(HWND); |
Gerard Patel | ad36303 | 2001-06-06 21:26:50 +0000 | [diff] [blame] | 145 | BOOL (*pCreateWindow)(HWND,CREATESTRUCTA*,BOOL); |
Alexandre Julliard | 2997fc5 | 2005-07-18 13:20:18 +0000 | [diff] [blame] | 146 | void (*pDestroyWindow)(HWND); |
Alexandre Julliard | 2fb7c87 | 2005-03-25 16:47:04 +0000 | [diff] [blame] | 147 | HDC (*pGetDCEx)(HWND,HRGN,DWORD); |
Alexandre Julliard | 51ab43b | 2001-05-18 22:51:56 +0000 | [diff] [blame] | 148 | DWORD (*pMsgWaitForMultipleObjectsEx)(DWORD,const HANDLE*,DWORD,DWORD,DWORD); |
Alexandre Julliard | 2997fc5 | 2005-07-18 13:20:18 +0000 | [diff] [blame] | 149 | INT (*pReleaseDC)(HWND,HDC,BOOL); |
Ulrich Czekalla | 06a6062 | 2004-06-15 17:04:02 +0000 | [diff] [blame] | 150 | BOOL (*pScrollDC)(HDC, INT, INT, const RECT *, const RECT *, HRGN, LPRECT); |
Alexandre Julliard | 9ae0fe5 | 2001-04-24 23:28:52 +0000 | [diff] [blame] | 151 | void (*pSetFocus)(HWND); |
Pierre d'Herbemont | 221b044 | 2006-12-10 23:21:28 +0100 | [diff] [blame] | 152 | void (*pSetParent)(HWND,HWND,HWND); |
Pierre d'Herbemont | e5e58a6 | 2006-11-26 23:21:02 +0100 | [diff] [blame] | 153 | BOOL (*pSetWindowPos)(HWND,HWND,const RECT *,const RECT *,UINT,const RECT *); |
Alexandre Julliard | ddc3317 | 2001-10-22 19:08:33 +0000 | [diff] [blame] | 154 | int (*pSetWindowRgn)(HWND,HRGN,BOOL); |
Alexandre Julliard | 446d832 | 2003-12-31 23:51:52 +0000 | [diff] [blame] | 155 | void (*pSetWindowIcon)(HWND,UINT,HICON); |
Gerard Patel | 94ce2a3 | 2001-10-03 18:44:02 +0000 | [diff] [blame] | 156 | void (*pSetWindowStyle)(HWND,DWORD); |
Alexandre Julliard | 2997fc5 | 2005-07-18 13:20:18 +0000 | [diff] [blame] | 157 | void (*pSetWindowText)(HWND,LPCWSTR); |
Alexandre Julliard | dc4fe77 | 2001-06-04 21:55:17 +0000 | [diff] [blame] | 158 | BOOL (*pShowWindow)(HWND,INT); |
Alexandre Julliard | 3abeae8 | 2001-05-09 17:21:04 +0000 | [diff] [blame] | 159 | void (*pSysCommandSizeMove)(HWND,WPARAM); |
Alexandre Julliard | 2fb7c87 | 2005-03-25 16:47:04 +0000 | [diff] [blame] | 160 | HWND (*pWindowFromDC)(HDC); |
Alexandre Julliard | 97d6e7f | 2005-03-07 17:19:24 +0000 | [diff] [blame] | 161 | LRESULT (*pWindowMessage)(HWND,UINT,WPARAM,LPARAM); |
Patrik Stridvall | b87fe2e | 1999-04-01 08:16:08 +0000 | [diff] [blame] | 162 | } USER_DRIVER; |
| 163 | |
Alexandre Julliard | c57b505 | 2007-11-07 18:05:49 +0100 | [diff] [blame^] | 164 | extern const USER_DRIVER *USER_Driver DECLSPEC_HIDDEN; |
Patrik Stridvall | b87fe2e | 1999-04-01 08:16:08 +0000 | [diff] [blame] | 165 | |
Alexandre Julliard | c57b505 | 2007-11-07 18:05:49 +0100 | [diff] [blame^] | 166 | extern void USER_unload_driver(void) DECLSPEC_HIDDEN; |
Alexandre Julliard | 1f90b5c | 2005-08-10 09:56:23 +0000 | [diff] [blame] | 167 | |
Alexandre Julliard | 86be9f2 | 2005-04-27 08:18:20 +0000 | [diff] [blame] | 168 | struct received_message_info; |
| 169 | struct hook16_queue_info; |
| 170 | |
Alexandre Julliard | 82964f5 | 2007-08-08 18:25:38 +0200 | [diff] [blame] | 171 | /* type of message-sending functions that need special WM_CHAR handling */ |
| 172 | enum wm_char_mapping |
| 173 | { |
| 174 | WMCHAR_MAP_POSTMESSAGE, |
| 175 | WMCHAR_MAP_SENDMESSAGE, |
| 176 | WMCHAR_MAP_SENDMESSAGETIMEOUT, |
| 177 | WMCHAR_MAP_RECVMESSAGE, |
| 178 | WMCHAR_MAP_DISPATCHMESSAGE, |
| 179 | WMCHAR_MAP_CALLWINDOWPROC, |
| 180 | WMCHAR_MAP_COUNT, |
| 181 | WMCHAR_MAP_NOMAPPING = WMCHAR_MAP_COUNT |
| 182 | }; |
| 183 | |
| 184 | /* data to store state for A/W mappings of WM_CHAR */ |
| 185 | struct wm_char_mapping_data |
| 186 | { |
| 187 | BYTE lead_byte[WMCHAR_MAP_COUNT]; |
Alexandre Julliard | 2ce799c | 2007-08-08 20:35:24 +0200 | [diff] [blame] | 188 | MSG get_msg; |
Alexandre Julliard | 82964f5 | 2007-08-08 18:25:38 +0200 | [diff] [blame] | 189 | }; |
| 190 | |
Alexandre Julliard | 86be9f2 | 2005-04-27 08:18:20 +0000 | [diff] [blame] | 191 | /* this is the structure stored in TEB->Win32ClientInfo */ |
| 192 | /* no attempt is made to keep the layout compatible with the Windows one */ |
| 193 | struct user_thread_info |
| 194 | { |
Alexandre Julliard | 533f519 | 2006-10-05 14:04:25 +0200 | [diff] [blame] | 195 | HANDLE server_queue; /* Handle to server-side queue */ |
| 196 | DWORD recursion_count; /* SendMessage recursion counter */ |
| 197 | BOOL hook_unicode; /* Is current hook unicode? */ |
| 198 | HHOOK hook; /* Current hook */ |
| 199 | struct received_message_info *receive_info; /* Message being currently received */ |
| 200 | struct hook16_queue_info *hook16_info; /* Opaque pointer for 16-bit hook support */ |
Alexandre Julliard | 82964f5 | 2007-08-08 18:25:38 +0200 | [diff] [blame] | 201 | struct wm_char_mapping_data *wmchar_data; /* Data for WM_CHAR mappings */ |
Alexandre Julliard | 533f519 | 2006-10-05 14:04:25 +0200 | [diff] [blame] | 202 | DWORD GetMessageTimeVal; /* Value for GetMessageTime */ |
| 203 | DWORD GetMessagePosVal; /* Value for GetMessagePos */ |
| 204 | ULONG_PTR GetMessageExtraInfoVal; /* Value for GetMessageExtraInfo */ |
| 205 | HCURSOR cursor; /* Current cursor */ |
| 206 | INT cursor_count; /* Cursor show count */ |
| 207 | UINT active_hooks; /* Bitmap of active hooks */ |
| 208 | HWND desktop; /* Desktop window */ |
| 209 | |
Alexandre Julliard | 82964f5 | 2007-08-08 18:25:38 +0200 | [diff] [blame] | 210 | ULONG pad[10]; /* Available for more data */ |
Alexandre Julliard | 86be9f2 | 2005-04-27 08:18:20 +0000 | [diff] [blame] | 211 | }; |
| 212 | |
Vitaliy Margolen | bc55b75 | 2006-10-04 21:27:09 -0600 | [diff] [blame] | 213 | struct hook_extra_info |
| 214 | { |
| 215 | HHOOK handle; |
| 216 | LPARAM lparam; |
| 217 | }; |
| 218 | |
Alexandre Julliard | 86be9f2 | 2005-04-27 08:18:20 +0000 | [diff] [blame] | 219 | static inline struct user_thread_info *get_user_thread_info(void) |
| 220 | { |
| 221 | return (struct user_thread_info *)NtCurrentTeb()->Win32ClientInfo; |
| 222 | } |
| 223 | |
Alexandre Julliard | 6b4c02e | 2005-04-27 10:23:24 +0000 | [diff] [blame] | 224 | /* check if hwnd is a broadcast magic handle */ |
| 225 | static inline BOOL is_broadcast( HWND hwnd ) |
| 226 | { |
| 227 | return (hwnd == HWND_BROADCAST || hwnd == HWND_TOPMOST); |
| 228 | } |
| 229 | |
Alexandre Julliard | c57b505 | 2007-11-07 18:05:49 +0100 | [diff] [blame^] | 230 | extern HMODULE user32_module DECLSPEC_HIDDEN; |
| 231 | extern DWORD USER16_AlertableWait DECLSPEC_HIDDEN; |
| 232 | extern HBRUSH SYSCOLOR_55AABrush DECLSPEC_HIDDEN; |
Alexandre Julliard | 18d0297 | 2002-12-03 23:34:52 +0000 | [diff] [blame] | 233 | |
Alexandre Julliard | c57b505 | 2007-11-07 18:05:49 +0100 | [diff] [blame^] | 234 | extern BOOL CLIPBOARD_ReleaseOwner(void) DECLSPEC_HIDDEN; |
| 235 | extern BOOL FOCUS_MouseActivate( HWND hwnd ) DECLSPEC_HIDDEN; |
| 236 | extern BOOL HOOK_IsHooked( INT id ) DECLSPEC_HIDDEN; |
| 237 | extern void erase_now( HWND hwnd, UINT rdw_flags ) DECLSPEC_HIDDEN; |
| 238 | extern LRESULT call_current_hook( HHOOK hhook, INT code, WPARAM wparam, LPARAM lparam ) DECLSPEC_HIDDEN; |
| 239 | extern BOOL map_wparam_AtoW( UINT message, WPARAM *wparam, enum wm_char_mapping mapping ) DECLSPEC_HIDDEN; |
Alexandre Julliard | 6b4c02e | 2005-04-27 10:23:24 +0000 | [diff] [blame] | 240 | extern LRESULT MSG_SendInternalMessageTimeout( DWORD dest_pid, DWORD dest_tid, |
| 241 | UINT msg, WPARAM wparam, LPARAM lparam, |
Alexandre Julliard | c57b505 | 2007-11-07 18:05:49 +0100 | [diff] [blame^] | 242 | UINT flags, UINT timeout, PDWORD_PTR res_ptr ) DECLSPEC_HIDDEN; |
| 243 | extern HPEN SYSCOLOR_GetPen( INT index ) DECLSPEC_HIDDEN; |
| 244 | extern void SYSPARAMS_Init(void) DECLSPEC_HIDDEN; |
| 245 | extern void USER_CheckNotLock(void) DECLSPEC_HIDDEN; |
| 246 | extern BOOL USER_IsExitingThread( DWORD tid ) DECLSPEC_HIDDEN; |
Mike McCormack | 096524c | 2001-12-26 19:46:40 +0000 | [diff] [blame] | 247 | |
Alexandre Julliard | c57b505 | 2007-11-07 18:05:49 +0100 | [diff] [blame^] | 248 | extern BOOL USER_SetWindowPos( WINDOWPOS * winpos ) DECLSPEC_HIDDEN; |
Pierre d'Herbemont | e5e58a6 | 2006-11-26 23:21:02 +0100 | [diff] [blame] | 249 | |
Alexandre Julliard | d00d54e | 2007-08-07 21:01:55 +0200 | [diff] [blame] | 250 | typedef LRESULT (*winproc_callback_t)( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp, |
| 251 | LRESULT *result, void *arg ); |
| 252 | typedef LRESULT (*winproc_callback16_t)( HWND16 hwnd, UINT16 msg, WPARAM16 wp, LPARAM lp, |
| 253 | LRESULT *result, void *arg ); |
| 254 | |
Alexandre Julliard | c57b505 | 2007-11-07 18:05:49 +0100 | [diff] [blame^] | 255 | extern WNDPROC16 WINPROC_GetProc16( WNDPROC proc, BOOL unicode ) DECLSPEC_HIDDEN; |
| 256 | extern WNDPROC WINPROC_AllocProc16( WNDPROC16 func ) DECLSPEC_HIDDEN; |
| 257 | extern WNDPROC WINPROC_GetProc( WNDPROC proc, BOOL unicode ) DECLSPEC_HIDDEN; |
| 258 | extern WNDPROC WINPROC_AllocProc( WNDPROC funcA, WNDPROC funcW ) DECLSPEC_HIDDEN; |
| 259 | extern BOOL WINPROC_IsUnicode( WNDPROC proc, BOOL def_val ) DECLSPEC_HIDDEN; |
Alexandre Julliard | d00d54e | 2007-08-07 21:01:55 +0200 | [diff] [blame] | 260 | |
| 261 | extern LRESULT WINPROC_CallProcAtoW( winproc_callback_t callback, HWND hwnd, UINT msg, |
Alexandre Julliard | 82964f5 | 2007-08-08 18:25:38 +0200 | [diff] [blame] | 262 | WPARAM wParam, LPARAM lParam, LRESULT *result, void *arg, |
Alexandre Julliard | c57b505 | 2007-11-07 18:05:49 +0100 | [diff] [blame^] | 263 | enum wm_char_mapping mapping ) DECLSPEC_HIDDEN; |
Alexandre Julliard | d00d54e | 2007-08-07 21:01:55 +0200 | [diff] [blame] | 264 | extern LRESULT WINPROC_CallProc16To32A( winproc_callback_t callback, HWND16 hwnd, UINT16 msg, |
Alexandre Julliard | c57b505 | 2007-11-07 18:05:49 +0100 | [diff] [blame^] | 265 | WPARAM16 wParam, LPARAM lParam, LRESULT *result, void *arg ) DECLSPEC_HIDDEN; |
Alexandre Julliard | d00d54e | 2007-08-07 21:01:55 +0200 | [diff] [blame] | 266 | extern LRESULT WINPROC_CallProc32ATo16( winproc_callback16_t callback, HWND hwnd, UINT msg, |
Alexandre Julliard | c57b505 | 2007-11-07 18:05:49 +0100 | [diff] [blame^] | 267 | WPARAM wParam, LPARAM lParam, LRESULT *result, void *arg ) DECLSPEC_HIDDEN; |
Alexandre Julliard | d00d54e | 2007-08-07 21:01:55 +0200 | [diff] [blame] | 268 | |
Alexandre Julliard | c57b505 | 2007-11-07 18:05:49 +0100 | [diff] [blame^] | 269 | extern INT_PTR WINPROC_CallDlgProc16( DLGPROC16 func, HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam ) DECLSPEC_HIDDEN; |
| 270 | extern INT_PTR WINPROC_CallDlgProcA( DLGPROC func, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) DECLSPEC_HIDDEN; |
| 271 | extern INT_PTR WINPROC_CallDlgProcW( DLGPROC func, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) DECLSPEC_HIDDEN; |
Alexandre Julliard | 334ede4 | 2007-08-08 17:02:42 +0200 | [diff] [blame] | 272 | extern BOOL WINPROC_call_window( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, |
Alexandre Julliard | c57b505 | 2007-11-07 18:05:49 +0100 | [diff] [blame^] | 273 | LRESULT *result, BOOL unicode, enum wm_char_mapping mapping ) DECLSPEC_HIDDEN; |
Alexandre Julliard | d00d54e | 2007-08-07 21:01:55 +0200 | [diff] [blame] | 274 | |
Alexandre Julliard | 6b4c02e | 2005-04-27 10:23:24 +0000 | [diff] [blame] | 275 | /* message spy definitions */ |
| 276 | |
| 277 | #define SPY_DISPATCHMESSAGE16 0x0100 |
| 278 | #define SPY_DISPATCHMESSAGE 0x0101 |
| 279 | #define SPY_SENDMESSAGE16 0x0102 |
| 280 | #define SPY_SENDMESSAGE 0x0103 |
| 281 | #define SPY_DEFWNDPROC16 0x0104 |
| 282 | #define SPY_DEFWNDPROC 0x0105 |
| 283 | |
| 284 | #define SPY_RESULT_OK16 0x0000 |
| 285 | #define SPY_RESULT_OK 0x0001 |
| 286 | #define SPY_RESULT_INVALIDHWND16 0x0002 |
| 287 | #define SPY_RESULT_INVALIDHWND 0x0003 |
| 288 | #define SPY_RESULT_DEFWND16 0x0004 |
| 289 | #define SPY_RESULT_DEFWND 0x0005 |
| 290 | |
Alexandre Julliard | c57b505 | 2007-11-07 18:05:49 +0100 | [diff] [blame^] | 291 | extern const char *SPY_GetClassLongOffsetName( INT offset ) DECLSPEC_HIDDEN; |
| 292 | extern const char *SPY_GetMsgName( UINT msg, HWND hWnd ) DECLSPEC_HIDDEN; |
| 293 | extern const char *SPY_GetVKeyName(WPARAM wParam) DECLSPEC_HIDDEN; |
| 294 | extern void SPY_EnterMessage( INT iFlag, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ) DECLSPEC_HIDDEN; |
Alexandre Julliard | 6b4c02e | 2005-04-27 10:23:24 +0000 | [diff] [blame] | 295 | extern void SPY_ExitMessage( INT iFlag, HWND hwnd, UINT msg, |
Alexandre Julliard | c57b505 | 2007-11-07 18:05:49 +0100 | [diff] [blame^] | 296 | LRESULT lReturn, WPARAM wParam, LPARAM lParam ) DECLSPEC_HIDDEN; |
| 297 | extern int SPY_Init(void) DECLSPEC_HIDDEN; |
Alexandre Julliard | 6b4c02e | 2005-04-27 10:23:24 +0000 | [diff] [blame] | 298 | |
Michael Stefaniuc | 4a75c5c | 2002-08-28 00:39:39 +0000 | [diff] [blame] | 299 | /* HANDLE16 <-> HANDLE conversions */ |
Alexandre Julliard | a8a422f | 2002-11-22 20:43:01 +0000 | [diff] [blame] | 300 | #define HCURSOR_16(h32) (LOWORD(h32)) |
| 301 | #define HICON_16(h32) (LOWORD(h32)) |
| 302 | #define HINSTANCE_16(h32) (LOWORD(h32)) |
Michael Stefaniuc | bc54d78 | 2002-10-10 21:22:09 +0000 | [diff] [blame] | 303 | |
Alexandre Julliard | a8a422f | 2002-11-22 20:43:01 +0000 | [diff] [blame] | 304 | #define HCURSOR_32(h16) ((HCURSOR)(ULONG_PTR)(h16)) |
| 305 | #define HICON_32(h16) ((HICON)(ULONG_PTR)(h16)) |
| 306 | #define HINSTANCE_32(h16) ((HINSTANCE)(ULONG_PTR)(h16)) |
| 307 | #define HMODULE_32(h16) ((HMODULE)(ULONG_PTR)(h16)) |
Michael Stefaniuc | 4a75c5c | 2002-08-28 00:39:39 +0000 | [diff] [blame] | 308 | |
Alexandre Julliard | dac1976 | 2005-07-20 10:31:37 +0000 | [diff] [blame] | 309 | #include "pshpack1.h" |
| 310 | |
| 311 | typedef struct |
| 312 | { |
| 313 | BYTE bWidth; |
| 314 | BYTE bHeight; |
| 315 | BYTE bColorCount; |
| 316 | BYTE bReserved; |
| 317 | } ICONRESDIR; |
| 318 | |
| 319 | typedef struct |
| 320 | { |
| 321 | WORD wWidth; |
| 322 | WORD wHeight; |
| 323 | } CURSORDIR; |
| 324 | |
| 325 | typedef struct |
| 326 | { union |
| 327 | { ICONRESDIR icon; |
| 328 | CURSORDIR cursor; |
| 329 | } ResInfo; |
| 330 | WORD wPlanes; |
| 331 | WORD wBitCount; |
| 332 | DWORD dwBytesInRes; |
| 333 | WORD wResId; |
| 334 | } CURSORICONDIRENTRY; |
| 335 | |
| 336 | typedef struct |
| 337 | { |
| 338 | WORD idReserved; |
| 339 | WORD idType; |
| 340 | WORD idCount; |
| 341 | CURSORICONDIRENTRY idEntries[1]; |
| 342 | } CURSORICONDIR; |
| 343 | |
| 344 | #include "poppack.h" |
| 345 | |
Alexandre Julliard | c57b505 | 2007-11-07 18:05:49 +0100 | [diff] [blame^] | 346 | extern void CURSORICON_FreeModuleIcons( HMODULE16 hModule ) DECLSPEC_HIDDEN; |
Alexandre Julliard | dac1976 | 2005-07-20 10:31:37 +0000 | [diff] [blame] | 347 | |
Alexandre Julliard | 6a78c16 | 2004-12-08 18:06:14 +0000 | [diff] [blame] | 348 | #endif /* __WINE_USER_PRIVATE_H */ |