12#include <private/qthread_p.h>
13#include <private/qlocking_p.h>
49 v = GetModuleFileName(NULL, space.
data(), DWORD(space.
size()));
63#ifndef QT_BOOTSTRAPPED
68 DWORD versionInfoSize = GetFileVersionInfoSize(
buffer.data(),
nullptr);
69 if (versionInfoSize) {
71 if (GetFileVersionInfo(
buffer.data(), 0, versionInfoSize,
info.data())) {
75 if (VerQueryValue(
info.data(), __TEXT(
"\\"),
76 reinterpret_cast<void **
>(&
fi), &
size) &&
size) {
77 const VS_FIXEDFILEINFO *verInfo =
reinterpret_cast<const VS_FIXEDFILEINFO *
>(
fi);
79 .arg(HIWORD(verInfo->dwProductVersionMS))
80 .arg(LOWORD(verInfo->dwProductVersionMS))
81 .arg(HIWORD(verInfo->dwProductVersionLS))
82 .arg(LOWORD(verInfo->dwProductVersionLS));
87 return applicationVersion;
92#if defined(Q_OS_WIN) && !defined(QT_NO_DEBUG_STREAM)
102#if !defined(GET_X_LPARAM)
103# define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp))
104# define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp))
111template <
class IntType>
112struct QWinMessageMapping {
117#define FLAG_ENTRY(x) {x, #x}
120template <
class IntType>
121static const char *findWinMessageMapping(
const QWinMessageMapping<IntType> *haystack,
125 for (
auto p = haystack,
end = haystack + haystackSize;
p <
end; ++
p) {
126 if (
p->value == needle)
133template <
class IntType>
134static QString flagsValue(
const QWinMessageMapping<IntType> *haystack,
135 size_t haystackSize, IntType
value)
138 for (
auto p = haystack,
end = haystack + haystackSize;
p <
end; ++
p) {
139 if ((
p->value &
value) ==
p->value) {
149static const char *findWMstr(
uint msg)
151 static const QWinMessageMapping<uint> knownWM[] =
152{{ 0x0000,
"WM_NULL" },
153 { 0x0001,
"WM_CREATE" },
154 { 0x0002,
"WM_DESTROY" },
155 { 0x0003,
"WM_MOVE" },
156 { 0x0005,
"WM_SIZE" },
157 { 0x0006,
"WM_ACTIVATE" },
158 { 0x0007,
"WM_SETFOCUS" },
159 { 0x0008,
"WM_KILLFOCUS" },
160 { 0x000A,
"WM_ENABLE" },
161 { 0x000B,
"WM_SETREDRAW" },
162 { 0x000C,
"WM_SETTEXT" },
163 { 0x000D,
"WM_GETTEXT" },
164 { 0x000E,
"WM_GETTEXTLENGTH" },
165 { 0x000F,
"WM_PAINT" },
166 { 0x0010,
"WM_CLOSE" },
167 { 0x0011,
"WM_QUERYENDSESSION" },
168 { 0x0013,
"WM_QUERYOPEN" },
169 { 0x0016,
"WM_ENDSESSION" },
170 { 0x0012,
"WM_QUIT" },
171 { 0x0014,
"WM_ERASEBKGND" },
172 { 0x0015,
"WM_SYSCOLORCHANGE" },
173 { 0x0018,
"WM_SHOWWINDOW" },
174 { 0x001A,
"WM_WININICHANGE" },
175 { 0x001B,
"WM_DEVMODECHANGE" },
176 { 0x001C,
"WM_ACTIVATEAPP" },
177 { 0x001D,
"WM_FONTCHANGE" },
178 { 0x001E,
"WM_TIMECHANGE" },
179 { 0x001F,
"WM_CANCELMODE" },
180 { 0x0020,
"WM_SETCURSOR" },
181 { 0x0021,
"WM_MOUSEACTIVATE" },
182 { 0x0022,
"WM_CHILDACTIVATE" },
183 { 0x0023,
"WM_QUEUESYNC" },
184 { 0x0024,
"WM_GETMINMAXINFO" },
185 { 0x0026,
"WM_PAINTICON" },
186 { 0x0027,
"WM_ICONERASEBKGND" },
187 { 0x0028,
"WM_NEXTDLGCTL" },
188 { 0x002A,
"WM_SPOOLERSTATUS" },
189 { 0x002B,
"WM_DRAWITEM" },
190 { 0x002C,
"WM_MEASUREITEM" },
191 { 0x002D,
"WM_DELETEITEM" },
192 { 0x002E,
"WM_VKEYTOITEM" },
193 { 0x002F,
"WM_CHARTOITEM" },
194 { 0x0030,
"WM_SETFONT" },
195 { 0x0031,
"WM_GETFONT" },
196 { 0x0032,
"WM_SETHOTKEY" },
197 { 0x0033,
"WM_GETHOTKEY" },
198 { 0x0037,
"WM_QUERYDRAGICON" },
199 { 0x0039,
"WM_COMPAREITEM" },
200 { 0x003D,
"WM_GETOBJECT" },
201 { 0x0041,
"WM_COMPACTING" },
202 { 0x0044,
"WM_COMMNOTIFY" },
203 { 0x0046,
"WM_WINDOWPOSCHANGING" },
204 { 0x0047,
"WM_WINDOWPOSCHANGED" },
205 { 0x0048,
"WM_POWER" },
206 { 0x004A,
"WM_COPYDATA" },
207 { 0x004B,
"WM_CANCELJOURNAL" },
208 { 0x004E,
"WM_NOTIFY" },
209 { 0x0050,
"WM_INPUTLANGCHANGEREQUEST" },
210 { 0x0051,
"WM_INPUTLANGCHANGE" },
211 { 0x0052,
"WM_TCARD" },
212 { 0x0053,
"WM_HELP" },
213 { 0x0054,
"WM_USERCHANGED" },
214 { 0x0055,
"WM_NOTIFYFORMAT" },
215 { 0x007B,
"WM_CONTEXTMENU" },
216 { 0x007C,
"WM_STYLECHANGING" },
217 { 0x007D,
"WM_STYLECHANGED" },
218 { 0x007E,
"WM_DISPLAYCHANGE" },
219 { 0x007F,
"WM_GETICON" },
220 { 0x0080,
"WM_SETICON" },
221 { 0x0081,
"WM_NCCREATE" },
222 { 0x0082,
"WM_NCDESTROY" },
223 { 0x0083,
"WM_NCCALCSIZE" },
224 { 0x0084,
"WM_NCHITTEST" },
225 { 0x0085,
"WM_NCPAINT" },
226 { 0x0086,
"WM_NCACTIVATE" },
227 { 0x0087,
"WM_GETDLGCODE" },
228 { 0x0088,
"WM_SYNCPAINT" },
229 { 0x00A0,
"WM_NCMOUSEMOVE" },
230 { 0x00A1,
"WM_NCLBUTTONDOWN" },
231 { 0x00A2,
"WM_NCLBUTTONUP" },
232 { 0x00A3,
"WM_NCLBUTTONDBLCLK" },
233 { 0x00A4,
"WM_NCRBUTTONDOWN" },
234 { 0x00A5,
"WM_NCRBUTTONUP" },
235 { 0x00A6,
"WM_NCRBUTTONDBLCLK" },
236 { 0x00A7,
"WM_NCMBUTTONDOWN" },
237 { 0x00A8,
"WM_NCMBUTTONUP" },
238 { 0x00A9,
"WM_NCMBUTTONDBLCLK" },
239 { 0x00AB,
"WM_NCXBUTTONDOWN" },
240 { 0x00AC,
"WM_NCXBUTTONUP" },
241 { 0x00AD,
"WM_NCXBUTTONDBLCLK" },
242 { 0x00FF,
"WM_INPUT" },
243 { 0x0100,
"WM_KEYDOWN" },
244 { 0x0101,
"WM_KEYUP" },
245 { 0x0102,
"WM_CHAR" },
246 { 0x0103,
"WM_DEADCHAR" },
247 { 0x0104,
"WM_SYSKEYDOWN" },
248 { 0x0105,
"WM_SYSKEYUP" },
249 { 0x0106,
"WM_SYSCHAR" },
250 { 0x0107,
"WM_SYSDEADCHAR" },
251 { 0x0109,
"WM_UNICHAR" },
252 { 0x010D,
"WM_IME_STARTCOMPOSITION" },
253 { 0x010E,
"WM_IME_ENDCOMPOSITION" },
254 { 0x010F,
"WM_IME_COMPOSITION" },
255 { 0x0110,
"WM_INITDIALOG" },
256 { 0x0111,
"WM_COMMAND" },
257 { 0x0112,
"WM_SYSCOMMAND" },
258 { 0x0113,
"WM_TIMER" },
259 { 0x0114,
"WM_HSCROLL" },
260 { 0x0115,
"WM_VSCROLL" },
261 { 0x0116,
"WM_INITMENU" },
262 { 0x0117,
"WM_INITMENUPOPUP" },
263 { 0x011F,
"WM_MENUSELECT" },
264 { 0x0120,
"WM_MENUCHAR" },
265 { 0x0121,
"WM_ENTERIDLE" },
266 { 0x0122,
"WM_MENURBUTTONUP" },
267 { 0x0123,
"WM_MENUDRAG" },
268 { 0x0124,
"WM_MENUGETOBJECT" },
269 { 0x0125,
"WM_UNINITMENUPOPUP" },
270 { 0x0126,
"WM_MENUCOMMAND" },
271 { 0x0127,
"WM_CHANGEUISTATE" },
272 { 0x0128,
"WM_UPDATEUISTATE" },
273 { 0x0129,
"WM_QUERYUISTATE" },
274 { 0x0132,
"WM_CTLCOLORMSGBOX" },
275 { 0x0133,
"WM_CTLCOLOREDIT" },
276 { 0x0134,
"WM_CTLCOLORLISTBOX" },
277 { 0x0135,
"WM_CTLCOLORBTN" },
278 { 0x0136,
"WM_CTLCOLORDLG" },
279 { 0x0137,
"WM_CTLCOLORSCROLLBAR" },
280 { 0x0138,
"WM_CTLCOLORSTATIC" },
281 { 0x0200,
"WM_MOUSEMOVE" },
282 { 0x0201,
"WM_LBUTTONDOWN" },
283 { 0x0202,
"WM_LBUTTONUP" },
284 { 0x0203,
"WM_LBUTTONDBLCLK" },
285 { 0x0204,
"WM_RBUTTONDOWN" },
286 { 0x0205,
"WM_RBUTTONUP" },
287 { 0x0206,
"WM_RBUTTONDBLCLK" },
288 { 0x0207,
"WM_MBUTTONDOWN" },
289 { 0x0208,
"WM_MBUTTONUP" },
290 { 0x0209,
"WM_MBUTTONDBLCLK" },
291 { 0x020A,
"WM_MOUSEWHEEL" },
292 { 0x020B,
"WM_XBUTTONDOWN" },
293 { 0x020C,
"WM_XBUTTONUP" },
294 { 0x020D,
"WM_XBUTTONDBLCLK" },
295 { 0x020E,
"WM_MOUSEHWHEEL" },
296 { 0x0210,
"WM_PARENTNOTIFY" },
297 { 0x0211,
"WM_ENTERMENULOOP" },
298 { 0x0212,
"WM_EXITMENULOOP" },
299 { 0x0213,
"WM_NEXTMENU" },
300 { 0x0214,
"WM_SIZING" },
301 { 0x0215,
"WM_CAPTURECHANGED" },
302 { 0x0216,
"WM_MOVING" },
303 { 0x0218,
"WM_POWERBROADCAST" },
304 { 0x0219,
"WM_DEVICECHANGE" },
305 { 0x0220,
"WM_MDICREATE" },
306 { 0x0221,
"WM_MDIDESTROY" },
307 { 0x0222,
"WM_MDIACTIVATE" },
308 { 0x0223,
"WM_MDIRESTORE" },
309 { 0x0224,
"WM_MDINEXT" },
310 { 0x0225,
"WM_MDIMAXIMIZE" },
311 { 0x0226,
"WM_MDITILE" },
312 { 0x0227,
"WM_MDICASCADE" },
313 { 0x0228,
"WM_MDIICONARRANGE" },
314 { 0x0229,
"WM_MDIGETACTIVE" },
315 { 0x0230,
"WM_MDISETMENU" },
316 { 0x0231,
"WM_ENTERSIZEMOVE" },
317 { 0x0232,
"WM_EXITSIZEMOVE" },
318 { 0x0233,
"WM_DROPFILES" },
319 { 0x0234,
"WM_MDIREFRESHMENU" },
320 { 0x0241,
"WM_NCPOINTERUPDATE"},
321 { 0x0242,
"WM_NCPOINTERDOWN"},
322 { 0x0243,
"WM_NCPOINTERUP"},
323 { 0x0245,
"WM_POINTERUPDATE"},
324 { 0x0246,
"WM_POINTERDOWN"},
325 { 0x0247,
"WM_POINTERUP"},
326 { 0x0249,
"WM_POINTERENTER"},
327 { 0x024A,
"WM_POINTERLEAVE"},
328 { 0x0248,
"WM_POINTERACTIVATE"},
329 { 0x024C,
"WM_POINTERCAPTURECHANGED"},
330 { 0x024D,
"WM_TOUCHHITTESTING"},
331 { 0x024E,
"WM_POINTERWHEEL"},
332 { 0x024F,
"WM_POINTERHWHEEL"},
333 { 0x0250,
"DM_POINTERHITTEST"},
334 { 0x0251,
"WM_POINTERROUTEDTO"},
335 { 0x0252,
"WM_POINTERROUTEDAWAY"},
336 { 0x0253,
"WM_POINTERROUTEDRELEASED"},
337 { 0x0281,
"WM_IME_SETCONTEXT" },
338 { 0x0282,
"WM_IME_NOTIFY" },
339 { 0x0283,
"WM_IME_CONTROL" },
340 { 0x0284,
"WM_IME_COMPOSITIONFULL" },
341 { 0x0285,
"WM_IME_SELECT" },
342 { 0x0286,
"WM_IME_CHAR" },
343 { 0x0288,
"WM_IME_REQUEST" },
344 { 0x0290,
"WM_IME_KEYDOWN" },
345 { 0x0291,
"WM_IME_KEYUP" },
346 { 0x02A0,
"WM_NCMOUSEHOVER" },
347 { 0x02A1,
"WM_MOUSEHOVER" },
348 { 0x02A2,
"WM_NCMOUSELEAVE" },
349 { 0x02A3,
"WM_MOUSELEAVE" },
350 { 0x02B1,
"WM_WTSSESSION_CHANGE" },
351 { 0x02C0,
"WM_TABLET_FIRST" },
352 { 0x02C1,
"WM_TABLET_FIRST + 1" },
353 { 0x02C2,
"WM_TABLET_FIRST + 2" },
354 { 0x02C3,
"WM_TABLET_FIRST + 3" },
355 { 0x02C4,
"WM_TABLET_FIRST + 4" },
356 { 0x02C5,
"WM_TABLET_FIRST + 5" },
357 { 0x02C6,
"WM_TABLET_FIRST + 6" },
358 { 0x02C7,
"WM_TABLET_FIRST + 7" },
359 { 0x02C8,
"WM_TABLET_FIRST + 8" },
360 { 0x02C9,
"WM_TABLET_FIRST + 9" },
361 { 0x02CA,
"WM_TABLET_FIRST + 10" },
362 { 0x02CB,
"WM_TABLET_FIRST + 11" },
363 { 0x02CC,
"WM_TABLET_FIRST + 12" },
364 { 0x02CD,
"WM_TABLET_FIRST + 13" },
365 { 0x02CE,
"WM_TABLET_FIRST + 14" },
366 { 0x02CF,
"WM_TABLET_FIRST + 15" },
367 { 0x02D0,
"WM_TABLET_FIRST + 16" },
368 { 0x02D1,
"WM_TABLET_FIRST + 17" },
369 { 0x02D2,
"WM_TABLET_FIRST + 18" },
370 { 0x02D3,
"WM_TABLET_FIRST + 19" },
371 { 0x02D4,
"WM_TABLET_FIRST + 20" },
372 { 0x02D5,
"WM_TABLET_FIRST + 21" },
373 { 0x02D6,
"WM_TABLET_FIRST + 22" },
374 { 0x02D7,
"WM_TABLET_FIRST + 23" },
375 { 0x02D8,
"WM_TABLET_FIRST + 24" },
376 { 0x02D9,
"WM_TABLET_FIRST + 25" },
377 { 0x02DA,
"WM_TABLET_FIRST + 26" },
378 { 0x02DB,
"WM_TABLET_FIRST + 27" },
379 { 0x02DC,
"WM_TABLET_FIRST + 28" },
380 { 0x02DD,
"WM_TABLET_FIRST + 29" },
381 { 0x02DE,
"WM_TABLET_FIRST + 30" },
382 { 0x02DF,
"WM_TABLET_LAST" },
383 { 0x02E0,
"WM_DPICHANGED" },
384 { 0x0300,
"WM_CUT" },
385 { 0x0301,
"WM_COPY" },
386 { 0x0302,
"WM_PASTE" },
387 { 0x0303,
"WM_CLEAR" },
388 { 0x0304,
"WM_UNDO" },
389 { 0x0305,
"WM_RENDERFORMAT" },
390 { 0x0306,
"WM_RENDERALLFORMATS" },
391 { 0x0307,
"WM_DESTROYCLIPBOARD" },
392 { 0x0308,
"WM_DRAWCLIPBOARD" },
393 { 0x0309,
"WM_PAINTCLIPBOARD" },
394 { 0x030A,
"WM_VSCROLLCLIPBOARD" },
395 { 0x030B,
"WM_SIZECLIPBOARD" },
396 { 0x030C,
"WM_ASKCBFORMATNAME" },
397 { 0x030D,
"WM_CHANGECBCHAIN" },
398 { 0x030E,
"WM_HSCROLLCLIPBOARD" },
399 { 0x030F,
"WM_QUERYNEWPALETTE" },
400 { 0x0310,
"WM_PALETTEISCHANGING" },
401 { 0x0311,
"WM_PALETTECHANGED" },
402 { 0x0312,
"WM_HOTKEY" },
403 { 0x0317,
"WM_PRINT" },
404 { 0x0318,
"WM_PRINTCLIENT" },
405 { 0x0319,
"WM_APPCOMMAND" },
406 { 0x031A,
"WM_THEMECHANGED" },
407 { 0x0358,
"WM_HANDHELDFIRST" },
408 { 0x0359,
"WM_HANDHELDFIRST + 1" },
409 { 0x035A,
"WM_HANDHELDFIRST + 2" },
410 { 0x035B,
"WM_HANDHELDFIRST + 3" },
411 { 0x035C,
"WM_HANDHELDFIRST + 4" },
412 { 0x035D,
"WM_HANDHELDFIRST + 5" },
413 { 0x035E,
"WM_HANDHELDFIRST + 6" },
414 { 0x035F,
"WM_HANDHELDLAST" },
415 { 0x0360,
"WM_AFXFIRST" },
416 { 0x0361,
"WM_AFXFIRST + 1" },
417 { 0x0362,
"WM_AFXFIRST + 2" },
418 { 0x0363,
"WM_AFXFIRST + 3" },
419 { 0x0364,
"WM_AFXFIRST + 4" },
420 { 0x0365,
"WM_AFXFIRST + 5" },
421 { 0x0366,
"WM_AFXFIRST + 6" },
422 { 0x0367,
"WM_AFXFIRST + 7" },
423 { 0x0368,
"WM_AFXFIRST + 8" },
424 { 0x0369,
"WM_AFXFIRST + 9" },
425 { 0x036A,
"WM_AFXFIRST + 10" },
426 { 0x036B,
"WM_AFXFIRST + 11" },
427 { 0x036C,
"WM_AFXFIRST + 12" },
428 { 0x036D,
"WM_AFXFIRST + 13" },
429 { 0x036E,
"WM_AFXFIRST + 14" },
430 { 0x036F,
"WM_AFXFIRST + 15" },
431 { 0x0370,
"WM_AFXFIRST + 16" },
432 { 0x0371,
"WM_AFXFIRST + 17" },
433 { 0x0372,
"WM_AFXFIRST + 18" },
434 { 0x0373,
"WM_AFXFIRST + 19" },
435 { 0x0374,
"WM_AFXFIRST + 20" },
436 { 0x0375,
"WM_AFXFIRST + 21" },
437 { 0x0376,
"WM_AFXFIRST + 22" },
438 { 0x0377,
"WM_AFXFIRST + 23" },
439 { 0x0378,
"WM_AFXFIRST + 24" },
440 { 0x0379,
"WM_AFXFIRST + 25" },
441 { 0x037A,
"WM_AFXFIRST + 26" },
442 { 0x037B,
"WM_AFXFIRST + 27" },
443 { 0x037C,
"WM_AFXFIRST + 28" },
444 { 0x037D,
"WM_AFXFIRST + 29" },
445 { 0x037E,
"WM_AFXFIRST + 30" },
446 { 0x037F,
"WM_AFXLAST" },
447 { 0x0380,
"WM_PENWINFIRST" },
448 { 0x0381,
"WM_PENWINFIRST + 1" },
449 { 0x0382,
"WM_PENWINFIRST + 2" },
450 { 0x0383,
"WM_PENWINFIRST + 3" },
451 { 0x0384,
"WM_PENWINFIRST + 4" },
452 { 0x0385,
"WM_PENWINFIRST + 5" },
453 { 0x0386,
"WM_PENWINFIRST + 6" },
454 { 0x0387,
"WM_PENWINFIRST + 7" },
455 { 0x0388,
"WM_PENWINFIRST + 8" },
456 { 0x0389,
"WM_PENWINFIRST + 9" },
457 { 0x038A,
"WM_PENWINFIRST + 10" },
458 { 0x038B,
"WM_PENWINFIRST + 11" },
459 { 0x038C,
"WM_PENWINFIRST + 12" },
460 { 0x038D,
"WM_PENWINFIRST + 13" },
461 { 0x038E,
"WM_PENWINFIRST + 14" },
462 { 0x038F,
"WM_PENWINLAST" },
463 { 0x0400,
"WM_USER" },
467 return findWinMessageMapping(knownWM,
sizeof(knownWM) /
sizeof(knownWM[0]), msg);
470static const char *activateParameter(
uint p)
472 static const QWinMessageMapping<uint> activeEnum[] = {
473 {WA_ACTIVE,
"Activate"}, {WA_INACTIVE,
"Deactivate"},
474 {WA_CLICKACTIVE,
"Activate by mouseclick"}
477 return findWinMessageMapping(activeEnum,
sizeof(activeEnum) /
sizeof(activeEnum[0]),
p);
482 static const QWinMessageMapping<uint> styleFlags[] = {
483 FLAG_ENTRY(WS_BORDER), FLAG_ENTRY(WS_CAPTION), FLAG_ENTRY(WS_CHILD),
484 FLAG_ENTRY(WS_CLIPCHILDREN), FLAG_ENTRY(WS_CLIPSIBLINGS),
485 FLAG_ENTRY(WS_DISABLED), FLAG_ENTRY(WS_DLGFRAME), FLAG_ENTRY(WS_GROUP),
486 FLAG_ENTRY(WS_HSCROLL), FLAG_ENTRY(WS_OVERLAPPED),
487 FLAG_ENTRY(WS_OVERLAPPEDWINDOW), FLAG_ENTRY(WS_ICONIC),
488 FLAG_ENTRY(WS_MAXIMIZE), FLAG_ENTRY(WS_MAXIMIZEBOX),
489 FLAG_ENTRY(WS_MINIMIZE), FLAG_ENTRY(WS_MINIMIZEBOX),
490 FLAG_ENTRY(WS_OVERLAPPEDWINDOW), FLAG_ENTRY(WS_POPUP),
491 FLAG_ENTRY(WS_POPUPWINDOW), FLAG_ENTRY(WS_SIZEBOX),
492 FLAG_ENTRY(WS_SYSMENU), FLAG_ENTRY(WS_TABSTOP), FLAG_ENTRY(WS_THICKFRAME),
493 FLAG_ENTRY(WS_TILED), FLAG_ENTRY(WS_TILEDWINDOW), FLAG_ENTRY(WS_VISIBLE),
494 FLAG_ENTRY(WS_VSCROLL)
497 return flagsValue(styleFlags,
sizeof(styleFlags) /
sizeof(styleFlags[0]), style);
502 static const QWinMessageMapping<uint> exStyleFlags[] = {
503 FLAG_ENTRY(WS_EX_ACCEPTFILES), FLAG_ENTRY(WS_EX_APPWINDOW),
504 FLAG_ENTRY(WS_EX_CLIENTEDGE), FLAG_ENTRY(WS_EX_DLGMODALFRAME),
505 FLAG_ENTRY(WS_EX_LEFT), FLAG_ENTRY(WS_EX_LEFTSCROLLBAR),
506 FLAG_ENTRY(WS_EX_LTRREADING), FLAG_ENTRY(WS_EX_MDICHILD),
507 FLAG_ENTRY(WS_EX_NOACTIVATE), FLAG_ENTRY(WS_EX_NOPARENTNOTIFY),
508 FLAG_ENTRY(WS_EX_OVERLAPPEDWINDOW), FLAG_ENTRY(WS_EX_PALETTEWINDOW),
509 FLAG_ENTRY(WS_EX_RIGHT), FLAG_ENTRY(WS_EX_RIGHTSCROLLBAR),
510 FLAG_ENTRY(WS_EX_RTLREADING), FLAG_ENTRY(WS_EX_STATICEDGE),
511 FLAG_ENTRY(WS_EX_TOOLWINDOW), FLAG_ENTRY(WS_EX_TOPMOST),
512 FLAG_ENTRY(WS_EX_TRANSPARENT), FLAG_ENTRY(WS_EX_WINDOWEDGE)
515 return flagsValue(exStyleFlags,
sizeof(exStyleFlags) /
sizeof(exStyleFlags[0]), exStyle);
518static const char *imeCommand(
uint cmd)
520 static const QWinMessageMapping<uint>
commands[] = {
521 FLAG_ENTRY(IMN_CHANGECANDIDATE), FLAG_ENTRY(IMN_CLOSECANDIDATE),
522 FLAG_ENTRY(IMN_CLOSESTATUSWINDOW), FLAG_ENTRY(IMN_GUIDELINE),
523 FLAG_ENTRY(IMN_OPENCANDIDATE), FLAG_ENTRY(IMN_OPENSTATUSWINDOW),
524 FLAG_ENTRY(IMN_SETCANDIDATEPOS), FLAG_ENTRY(IMN_SETCOMPOSITIONFONT),
525 FLAG_ENTRY(IMN_SETCOMPOSITIONWINDOW), FLAG_ENTRY(IMN_SETCONVERSIONMODE),
526 FLAG_ENTRY(IMN_SETOPENSTATUS), FLAG_ENTRY(IMN_SETSENTENCEMODE),
527 FLAG_ENTRY(IMN_SETSTATUSWINDOWPOS)
535 static const QWinMessageMapping<uint> showFlags[] = {
536 FLAG_ENTRY(ISC_SHOWUICOMPOSITIONWINDOW),
537 FLAG_ENTRY(ISC_SHOWUICANDIDATEWINDOW),
538 FLAG_ENTRY(ISC_SHOWUICANDIDATEWINDOW << 1),
539 FLAG_ENTRY(ISC_SHOWUICANDIDATEWINDOW << 2),
540 FLAG_ENTRY(ISC_SHOWUICANDIDATEWINDOW << 3)
543 return flagsValue(showFlags,
sizeof(showFlags) /
sizeof(showFlags[0]),
flags);
546static const char *wmSizeParam(
uint p)
548 static const QWinMessageMapping<uint> sizeParams[] = {
549 FLAG_ENTRY(SIZE_MAXHIDE), FLAG_ENTRY(SIZE_MAXIMIZED),
550 FLAG_ENTRY(SIZE_MAXSHOW), FLAG_ENTRY(SIZE_MINIMIZED),
551 FLAG_ENTRY(SIZE_RESTORED)
554 return findWinMessageMapping(sizeParams,
sizeof(sizeParams) /
sizeof(sizeParams[0]),
p);
559 static const QWinMessageMapping<uint>
keys[] = {
560 FLAG_ENTRY(MK_CONTROL), FLAG_ENTRY(MK_LBUTTON), FLAG_ENTRY(MK_MBUTTON),
561 FLAG_ENTRY(MK_RBUTTON), FLAG_ENTRY(MK_SHIFT), FLAG_ENTRY(MK_XBUTTON1),
562 FLAG_ENTRY(MK_XBUTTON2)
565 return flagsValue(
keys,
sizeof(
keys) /
sizeof(
keys[0]), vk);
570 static const QWinMessageMapping<uint> winPosValues[] = {
571 FLAG_ENTRY(SWP_DRAWFRAME), FLAG_ENTRY(SWP_FRAMECHANGED),
572 FLAG_ENTRY(SWP_HIDEWINDOW), FLAG_ENTRY(SWP_NOACTIVATE),
573 FLAG_ENTRY(SWP_NOCOPYBITS), FLAG_ENTRY(SWP_NOMOVE),
574 FLAG_ENTRY(SWP_NOOWNERZORDER), FLAG_ENTRY(SWP_NOREDRAW),
575 FLAG_ENTRY(SWP_NOREPOSITION), FLAG_ENTRY(SWP_NOSENDCHANGING),
576 FLAG_ENTRY(SWP_NOSIZE), FLAG_ENTRY(SWP_NOZORDER),
577 FLAG_ENTRY(SWP_SHOWWINDOW)
580 return flagsValue(winPosValues,
sizeof(winPosValues) /
sizeof(winPosValues[0]),
f);
583static const char *winPosInsertAfter(
quintptr h)
585 static const QWinMessageMapping<quintptr> insertAfterValues[] = {
586 {
quintptr(HWND_BOTTOM),
"HWND_BOTTOM"},
587 {
quintptr(HWND_NOTOPMOST),
"HWND_NOTOPMOST"},
589 {
quintptr(HWND_TOPMOST),
"HWND_TOPMOST"}
591 return findWinMessageMapping(insertAfterValues,
sizeof(insertAfterValues) /
sizeof(insertAfterValues[0]),
h);
594static const char *sessionMgrLogOffOption(
uint p)
596#ifndef ENDSESSION_CLOSEAPP
597#define ENDSESSION_CLOSEAPP 0x00000001
599#ifndef ENDSESSION_CRITICAL
600#define ENDSESSION_CRITICAL 0x40000000
602 static const QWinMessageMapping<uint>
values[] = {
603 {ENDSESSION_CLOSEAPP,
"Close application"},
604 {ENDSESSION_CRITICAL,
"Force application end"},
605 {ENDSESSION_LOGOFF,
"User logoff"}
615 const WPARAM wParam = msg.wParam;
616 const LPARAM lParam = msg.lParam;
620 if (msg.message > WM_APP)
622 else if (msg.message > WM_USER)
624 else if (
const char *wmmsgC = findWMstr(msg.message))
641 switch (msg.message) {
643 if (
const char *
a = activateParameter(
uint(wParam)))
645 parameters +=
" Hwnd "_L1 + hwndS;
647 case WM_CAPTURECHANGED:
648 parameters =
"Hwnd gaining capture "_L1 + hwndS;
652 auto lpcs =
reinterpret_cast<LPCREATESTRUCT
>(lParam);
654 if (lpcs->lpszClass !=
nullptr) {
657 :
QString::fromWCharArray(lpcs->lpszClass);
660 const QString windowName = lpcs->lpszName
663 parameters =
QString::asprintf(
"x,y(%4d,%4d) w,h(%4d,%4d) className(%s) windowName(%s) parent(0x%p) style(%s) exStyle(%s)",
664 lpcs->x, lpcs->y, lpcs->cx, lpcs->cy,
667 reinterpret_cast<void *
>(lpcs->hwndParent),
668 styleFlags(
uint(lpcs->style)).toLatin1().constData(),
669 exStyleFlags(lpcs->dwExStyle).toLatin1().constData());
673 parameters =
"Destroy hwnd "_L1 + hwndS;
676 auto rect =
reinterpret_cast<const RECT *
>(lParam);
677 QTextStream(¶meters) <<
"DPI: " << HIWORD(wParam) <<
','
678 << LOWORD(wParam) <<
' ' << (
rect->right -
rect->left) <<
'x'
684 parameters =
"Command("_L1;
685 if (
const char *
c = imeCommand(
uint(wParam)))
687 parameters +=
" : "_L1 + lParamS;
690 case WM_IME_SETCONTEXT:
691 parameters =
"Input context("_L1
692 + (wParam ?
"Active"_L1 :
"Inactive"_L1)
694 + imeShowFlags(DWORD(lParam)) + u
')';
697 parameters =
"Hwnd gaining keyboard focus "_L1 + wParamS;
704 const int nVirtKey = int(wParam);
705 const long lKeyData = long(lParam);
706 int repCount = (lKeyData & 0xffff);
707 int scanCode = (lKeyData & 0xf0000) >> 16;
708 bool contextCode = !!(lKeyData & 0x20000000);
709 bool prevState = !!(lKeyData & 0x40000000);
710 bool transState = !!(lKeyData & 0x80000000);
711 parameters =
QString::asprintf(
"Virtual-key(0x%x) Scancode(%d) Rep(%d) Contextcode(%d), Prev state(%d), Trans state(%d)",
712 nVirtKey, scanCode, repCount,
713 contextCode, prevState, transState);
716 case WM_INPUTLANGCHANGE:
720 parameters = (msg.wParam?
"Active Titlebar"_L1 :
"Inactive Titlebar"_L1);
722 case WM_MOUSEACTIVATE:
724 const char *mouseMsg = findWMstr(HIWORD(lParam));
726 reinterpret_cast<void *
>(wParam),
727 LOWORD(lParam), mouseMsg ? mouseMsg :
"");
735 case WM_LBUTTONDBLCLK:
738 case WM_MBUTTONDBLCLK:
741 case WM_RBUTTONDBLCLK:
746 GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))
747 + virtualKeys(
uint(wParam)) + u
')';
754 parameters =
"hdc"_L1 + wParamS;
756 case WM_QUERYNEWPALETTE:
760 if (
const char *mouseMsg = findWMstr(HIWORD(lParam)))
765 parameters =
"Lost Focus "_L1 + wParamS;
768 parameters =
"Set Text ("_L1
774 LOWORD(lParam), HIWORD(lParam));
775 if (
const char *showMode = wmSizeParam(
uint(wParam)))
779 case WM_WINDOWPOSCHANGED:
781 auto winPos =
reinterpret_cast<LPWINDOWPOS
>(lParam);
784 const auto insertAfter =
quintptr(winPos->hwndInsertAfter);
786 winPos->x, winPos->y, winPos->cx, winPos->cy,
787 winPosFlags(winPos->flags).toLatin1().constData());
788 if (
const char *
h = winPosInsertAfter(insertAfter))
795 case WM_QUERYENDSESSION:
796 parameters =
"End session: "_L1;
797 if (
const char *logoffOption = sessionMgrLogOffOption(
uint(wParam)))
801 parameters =
"wParam"_L1 + wParamS +
" lParam"_L1 + lParamS;
805 return message +
"hwnd"_L1 + hwndS + u
' ' + parameters;
813 dbg << decodeMSG(msg);
821void QCoreApplicationPrivate::removePostedTimerEvent(
QObject *
object,
int timerId)
826 if (
data->postEventList.size() == 0)
828 for (
int i = 0;
i <
data->postEventList.size(); ++
i) {
834 --pe.
receiver->d_func()->postedEvents;
835 pe.
event->m_posted =
false;
const char * constData() const noexcept
Returns a pointer to the const data stored in the byte array.
QString appVersion() const
Type type() const
Returns the event type.
\inmodule QtCore \reentrant
QString baseName() const
Returns the base name of the file without the path.
\macro QT_RESTRICTED_CAST_FROM_ASCII
QByteArray toLatin1() const &
qsizetype toWCharArray(wchar_t *array) const
static QString fromLatin1(QByteArrayView ba)
This is an overloaded member function, provided for convenience. It differs from the above function o...
qsizetype size() const
Returns the number of characters in this string.
QString arg(qlonglong a, int fieldwidth=0, int base=10, QChar fillChar=u' ') const
static QString fromWCharArray(const wchar_t *string, qsizetype size=-1)
static QString number(int, int base=10)
This is an overloaded member function, provided for convenience. It differs from the above function o...
QString & prepend(QChar c)
static QString static QString asprintf(const char *format,...) Q_ATTRIBUTE_FORMAT_PRINTF(1
int timerId() const
Returns the unique timer identifier, which is the same identifier as returned from QObject::startTime...
constexpr size_type size() const noexcept
void resize(qsizetype sz)
Combined button and popup list for selecting options.
Lock qt_scoped_lock(Mutex &mutex)
QTextStream & forcesign(QTextStream &stream)
Calls QTextStream::setNumberFlags(QTextStream::numberFlags() | QTextStream::ForceSign) on stream and ...
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
GLenum GLsizei GLsizei GLint * values
[15]
GLsizei const GLfloat * v
[13]
GLboolean GLboolean GLboolean GLboolean a
[7]
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLsizei const GLubyte * commands
GLuint GLsizei const GLchar * message
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLfloat GLfloat GLfloat GLfloat h
#define QStringLiteral(str)
#define QT_BEGIN_INCLUDE_NAMESPACE
#define QT_END_INCLUDE_NAMESPACE
const char className[16]
[1]
QFileInfo info(fileName)
[8]
QFileInfo fi("c:/temp/foo")
[newstuff]