Domanda

A causa della necessità di eseguire un 15 + anni di applicazione desidero creare un programma di sorveglianza per assicurare un'applicazione a 16 bit è in esecuzione su una versione a 32 bit di Windows XP Pro e avviarlo se necessario. Normalmente Userei EnumWindows () per cercare la finestra dell'applicazione. Purtroppo, questo non funziona, o almeno non in modo affidabile, per le applicazioni a 16 bit.

Dato che non ho assolutamente alcun controllo sul codice dell'applicazione in questione, come posso rilevare in modo affidabile anche se non è in esecuzione? Sto codifica questo in C (non C ++ o C #).

È stato utile?

Soluzione

avrete probabilmente bisogno di processi (ad esempio Enumerazione, EnumProcesses con GetModuleFilenameEx o CreateToolhelp32Snapshot con Process32First e Process32Next ). Se non trovate un esempio di ntvdm.exe, allora non processo a 16 bit è in esecuzione, e si può fermare lì. Se trovate un esempio di ntvdm.exe, è possibile utilizzare VDMEnumTaskWOWEx per enumerare i processi a 16 bit in esecuzione in esso.

Ai tempi in cui era ancora sotto i proprietari originali, ho postato un articolo su CodeGuru dimostrando come fare tutto questo. Ci vorrebbe un po 'di lavoro per renderlo compilare sotto un compilatore moderno (ad esempio, è abbastanza vecchio che usa iostream.h invece di iostream, ma la parte processo di enumerazione dovrebbe essere ancora praticamente proprio (anche se, a guardare le cose, è' ll anche bisogno di attivare il SeDebugPrivilege per farlo funzionare su Windows 7).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top