В одной из моих программ мне нужно проверить, фокусируется ли пользователь в данный момент на рабочем столе/окне оболочки. Сейчас я использую GetShellWindow() из user32.dll и сравниваю результат с GetForegroundWindow().
Этот подход работает до тех пор, пока кто-нибудь не сменит обои рабочего стола, но как только обои меняются, хэндл из GetShellWindow() больше не совпадает с хэндлом из GetForegroundWindow(), и я не совсем понимаю, почему так происходит. (OS: Windows 7 32bit)
Есть ли лучший подход для проверки фокусировки рабочего стола? Желательно такой, который не будет сломан, если пользователь сменит обои?
EDIT: Я придумал обходной путь: Я проверяю хэндл на наличие дочернего элемента класса "SHELLDLL_DefView". Если он есть, то рабочий стол находится в фокусе. Хотя это работает на моем компьютере, это не значит, что это будет работать все время...