Question

En raison de la nécessité d'exécuter une application ancienne 15+ ans je souhaite créer un programme de surveillance pour assurer une application 16 bits est en cours d'exécution sur une version 32 bits de Windows XP Pro et démarrer si nécessaire. Normalement, j'utiliser EnumWindows () pour rechercher la fenêtre de l'application. Malheureusement, cela ne fonctionne pas, ou du moins pas de manière fiable, pour 16 applications de bit.

Étant donné que je n'ai absolument aucun contrôle sur le code dans l'application en question, comment puis-je détecter de manière fiable si oui ou non il est en cours d'exécution? Je coder cela en C (non C ++ ou C #).

Était-ce utile?

La solution

Vous aurez probablement besoin de processus Énumérer (par exemple, EnumProcesses avec ou GetModuleFilenameEx CreateToolhelp32Snapshot avec Process32First et Process32Next ). Si vous ne trouvez pas une instance de ntvdm.exe, puis pas processus 16 bits est en cours d'exécution, et vous pouvez arrêter là. Si vous ne trouvez pas une instance de ntvdm.exe, vous pouvez utiliser VDMEnumTaskWOWEx pour énumérer les processus 16 bits en cours d'exécution en elle.

Retour quand il était encore sous les propriétaires d'origine, j'ai posté une article sur CodeGuru montrant comment faire tout cela. Ce serait prendre un peu de travail à faire compiler sous un compilateur moderne (par exemple, il est assez vieux qu'il utilise iostream.h au lieu de iostream, mais la partie de l'énumération des processus devrait être encore à peu près droit (mais, en regardant les choses, vous ll faut également permettre au SeDebugPrivilege pour qu'il fonctionne sous Windows 7).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top