Описание проблемы:
Окно со стилем WS_EX_TOOLWINDOW неожиданно появляется при нажатии Alt+Tab после перезапуска explorer.exe, но только тогда, когда приложение запускается с токеном доступа к пользовательскому интерфейсу. Этого не происходит при непосредственном запуске приложения.
Шаги по воспроизведению:
- Запустите приложение WPF через службу, используя SetTokenInformation с TokenUIAccess.
- Создайте прозрачное самое верхнее окно со стилем WS_EX_TOOLWINDOW.
- Уничтожьте explorer.exe из диспетчера задач (подробнее). tab)
- Запустите explorer.exe с помощью «Выполнить новую задачу».
- Нажмите Alt+Tab — окно появится, несмотря на стиль WS_EX_TOOLWINDOW.
Я проверил с помощью Spy++, что стили остаются неизменными после перезапуска explorer.exe: https://i.sstatic.net/9roQafKN.png
На изображении показано, что стили окон (0x680000) и расширенные стили (0x80A8) остаются согласованными до и после воспроизведения проблемы, что подтверждает, что WS_EX_TOOLWINDOW все еще применяется.
Код:
// Setting UI Access token
uint dwUIAccess = 1;
SetTokenInformation(hUserToken, TOKEN_INFORMATION_CLASS.TokenUIAccess, ref dwUIAccess, sizeof(uint));
// Window styles
var hwnd = new WindowInteropHelper(this).Handle;
var extendedStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
SetWindowLong(hwnd, GWL_EXSTYLE, extendedStyle | WS_EX_TOOLWINDOW | WS_EX_TRANSPARENT);
Подробнее здесь: https://stackoverflow.com/questions/792 ... -restart-w