由于需要运行一个15年以上的旧应用程序,我希望创建一个监督程序,以确保有16位应用程序运行于一个32位版本的Windows XP亲和启动它,如果有必要的。通常我会用EnumWindows()寻找的应用程序的窗口。不幸的是,这不起作用,或者至少是不可靠的,对于16位应用程序。

鉴于我绝对没有任何控制代码的应用问题,我怎么能够可靠地探测是否运行?我编这个在C(而不是C++或C#)。

有帮助吗?

解决方案

你可能会需要一一列举过程(例如, EnumProcessesGetModuleFilenameExCreateToolhelp32SnapshotProcess32FirstProcess32Next).如果你找不到的一个实例 ntvdm.exe, 然后 没有 16位的运行过程,并且你可以停在那里。如果你找到一个实例 ntvdm.exe, 你可以使用 VDMEnumTaskWOWEx 列举的16位的进程的运行。

回来时,它仍在原始所有者,我公布 一篇文章 在CodeGuru展示了,如何做到这一切。它会采取一些工作,以使编制下一个现代化的编译器(例如,它是旧不够,它使用 iostream.h 而不是的 iostream, 但过程中枚举的部分应该仍然被很多的权利(不过,在寻找的东西,你还需要启用的 SeDebugPrivilege 它的工作,在Windows7).

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top