Pregunta

Debido a la necesidad de ejecutar una aplicación de más de 15 años de edad, me gustaría crear un programa de vigilancia para garantizar una aplicación de 16 bits se ejecuta en una versión de 32 bits de Windows XP Pro y empezar si es necesario. Normalmente yo uso EnumWindows () para buscar una ventana de la aplicación. Por desgracia, esto no funciona, o al menos no de forma fiable, para aplicaciones de 16 bits.

Dado que no tengo absolutamente ningún control sobre el código de la aplicación en cuestión, ¿cómo puedo detectar si fiable o no se está ejecutando? Estoy de codificación esto en C (no C ++ o C #).

¿Fue útil?

Solución

Usted probablemente tendrá que Enumerar los procesos (por ejemplo, EnumProcesses con GetModuleFilenameEx o CreateToolhelp32Snapshot con Process32First y Process32Next ). Si no encuentra una instancia de ntvdm.exe, a continuación, no proceso de 16 bits está en marcha, y se puede parar allí. Si encuentra una instancia de ntvdm.exe, puede utilizar VDMEnumTaskWOWEx para enumerar los procesos de 16 bits que se ejecutan en el mismo.

Antes, cuando todavía estaba en los dueños originales, que registró un artículo en CodeGuru demostrando cómo hacer todo esto. Haría falta un poco de trabajo para que se compile bajo un compilador moderno (por ejemplo, es bastante mayor que usa iostream.h en lugar de iostream, pero la parte de proceso de enumeración aún debe ser bastante más justo (sin embargo, ver las cosas, que' ll también que deba activar el SeDebugPrivilege para que funcione en Windows 7).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top