Get handle to desktop / shell window

В одной из моих программ мне нужно проверить, фокусируется ли пользователь в данный момент на рабочем столе/окне оболочки. Сейчас я использую GetShellWindow() из user32.dll и сравниваю результат с GetForegroundWindow().

Этот подход работает до тех пор, пока кто-нибудь не сменит обои рабочего стола, но как только обои меняются, хэндл из GetShellWindow() больше не совпадает с хэндлом из GetForegroundWindow(), и я не совсем понимаю, почему так происходит. (OS: Windows 7 32bit)

Есть ли лучший подход для проверки фокусировки рабочего стола? Желательно такой, который не будет сломан, если пользователь сменит обои?

EDIT: Я придумал обходной путь: Я проверяю хэндл на наличие дочернего элемента класса "SHELLDLL_DefView". Если он есть, то рабочий стол находится в фокусе. Хотя это работает на моем компьютере, это не значит, что это будет работать все время...

6
задан MFH 3 December 2011 в 15:49
поделиться