12#include <private/qthread_p.h>
13#include <private/qlocking_p.h>
43 QVarLengthArray<wchar_t, MAX_PATH + 1> space;
48 space.resize(
int(
size));
49 v = GetModuleFileName(NULL, space.data(), DWORD(space.size()));
63#ifndef QT_BOOTSTRAPPED
65 QVarLengthArray<wchar_t>
buffer(appFileName.size() + 1);
68 DWORD versionInfoSize = GetFileVersionInfoSize(
buffer.data(),
nullptr);
69 if (versionInfoSize) {
70 QVarLengthArray<BYTE>
info(
static_cast<int>(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,
666 windowName.toLatin1().constData(),
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) {
830 if (pe.receiver ==
object
834 --pe.
receiver->d_func()->postedEvents;
835 pe.
event->m_posted =
false;
QString appVersion() const
QString baseName() const
Returns the base name of the file without the path.
virtual bool event(QEvent *event)
This virtual function receives events to an object and should return true if the event e was recogniz...
\macro QT_RESTRICTED_CAST_FROM_ASCII
static QString fromLatin1(QByteArrayView ba)
This is an overloaded member function, provided for convenience. It differs from the above function o...
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...
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...
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
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLuint GLsizei const GLchar * message
GLfloat GLfloat GLfloat GLfloat h
#define QStringLiteral(str)
#define QT_BEGIN_INCLUDE_NAMESPACE
#define QT_END_INCLUDE_NAMESPACE
const char className[16]
[1]