Comment obtenir la poignée de travail si je POIGNÉE à l'une des fenêtres de l'emploi
Question
Mon application a essayé de gratter IE8, ici on obtient en quelque sorte POIGNÉE Internet Explorer Fenêtre / interface utilisateur. Maintenant, je veux la poignée de travail pour IE8. Une idée est de - Faut d'abord déterminer le numéro de processus en utilisant la poignée IE fenêtre à l'aide GetWindowThreadProcessId (), mais après cela, je suis coincé.
Il y a une nouvelle mise en œuvre dans IE8, ici chaque onglet ouvert est un processus dans un travail. Ainsi, nous voyons IE8 est géré comme un travail.
La solution
Je ne pouvais pas trouver un moyen documenté pour faire le travail auquel un processus est lié; aussi, je ne pouvais pas trouver un moyen documenté pour énumérer tous les emplois dans le système, à l'exception du OpenJobObject sur chaque nom de travail que vous pouvez obtenir (ou, si vous parvenez à réduire votre travail avec une heuristique sur les noms d'emploi, même mieux) et utiliser le IsProcessInJob pour vérifier si votre poignée de processus (que vous obtenez avec OpenProcess + GetWindowThreadProcessId ) appartient à l'emploi; une fois que vous obtenez un match, vous êtes ensemble. Rappelez-vous de fermer toutes les poignées! :)
Dans le cas malheureux que les objets de travail utilisés par IE8 sont sans nom, alors tout devient plus difficile. Vous avez probablement besoin de recourir à presque non documentés (par Microsoft, mais largement documenté sur le net) des techniques poignée énumération pour énumérer toutes les poignées par rapport à votre processus cible. Vous pouvez filtrer que le travail poignées d'objets, et utiliser la technique décrite ci-dessus pour obtenir le droit.
D'ailleurs, pourquoi avez-vous besoin d'accéder aux objets métier utilisé par IE8?