Пытаюсь зафиксить крайне странный баг.
Суть его такая.
Есть оконный поток, в нём главное окно, всё как обычно.
Запускается рабочий поток, в нём создаётся диалог. (Да, это принципиально: запускать в отдельном рабочем потоке).
И почему-то иногда этот диалог не становится foreground window.
Баг наблюдался на стандартном диалоге винды — о запуске файла из недоверенного источника по ShellExecute.
Я пытаюсь воспроизвести ситуацию вручную и, по возможности, побороть, не субклассируя диалог и минимально вламываясь в код главного окна.
И вот эта зараза воспроизводится через раз!
Главный симптом выглядит так
::SetForegroundWindow(::GetDesktopWindow());
LOG(INFO) << ::GetForegroundWindow(); // NULL - окей.
HWND hwndDlg = ::CreateWindow(
WS_POPUPWINDOW|WS_CAPTION, // стиль
...
::GetDesktopWindow(), // родитель
...);
LOG(INFO) << ::GetForegroundWindow(); // NULL - логично.
::ShowWindow(hwndDlg, SW_SHOW); // по идее, должно выскочить на передний план.
//---- с этого места я не имею права управлять окном - я же эмулирую чужой диалог
LOG(INFO) << ::GetForegroundWindow(); // Либо hwndDlg, либо NULL. :(
Есть какие-нибудь идеи?