Obtenir le handle de bureau / fenêtre shell

Dans un de mes programmes j'ai besoin de tester si l'utilisateur est actuellement en concentrant le bureau/fenêtre shell. Actuellement, je suis en utilisant GetShellWindow() à partir de user32.dll et comparer le résultat à GetForegroundWindow().

Cette approche est de travailler jusqu'à ce que quelqu'un change le papier peint du bureau, mais dès que le fond d'écran est changé la poignée de GetShellWindow() ne correspond pas à celui de GetForegroundWindow() plus et je n'ai pas très bien pourquoi. (OS: Windows 7 32 bits)

Est-il une meilleure approche pour vérifier si le bureau est porté? De préférence un qui ne sera pas rompu si l'utilisateur change le fond d'écran?

EDIT: j'ai conçu une solution de contournement: je suis en essais de la poignée à avoir un enfant de la classe "SHELLDLL_DefView". Si il a, le bureau est sur le focus. Alors qu'il travaille à mon PC qui ne veut pas dire qu'il va travailler tout le temps...

avez-vous essayé GetDesktopWindow à la place?
Je pense que je n'ai pas. Je me trompe peut-être mais j'ai pensé que j'ai lu une fois que le ShellWindow est l'ordinateur de bureau (celui qui est présent depuis Win95) alors que DesktopWindow est celui qui a déjà été disponible avant et est en fait présent à l'arrière de la ShellWindow...
Ouais, vous avez raison, GetShellWindow est la bonne. blogs.microsoft.co.il/blogs/pavely/archive/2011/06/18/... Alors, qui, une fenêtre vous obtenez après avoir changé le fond d'écran?
hmmm... je ne suis pas expérimenté avec Win32, ce qui est le moyen le plus rapide pour obtenir plus d'informations (par exemple, le titre de la fenêtre) à partir d'une poignée? EDIT: essayé Spy++, mais il ne peut pas trouver la poignée de mon système??
Lire le blog de port que j'ai lié, il va vous donner le nom du processus à partir de la poignée.

OriginalL'auteur MFH | 2011-12-03