質問

15年以上のアプリケーションを実行する必要があるため、Windows XP Proの32ビットバージョンで16ビットアプリケーションが実行され、必要に応じて起動するようにWatchDogプログラムを作成したいと思います。通常、enumwindows()を使用してアプリケーションのウィンドウを探します。残念ながら、これは16ビットアプリでは機能しないか、少なくとも確実にはありません。

問題のアプリケーションのコードをまったく制御できないことを考えると、実行中かどうかをどのように確実に検出できますか?これをCでコーディングしています(C ++またはC#ではありません)。

役に立ちましたか?

解決

おそらくプロセスを列挙する必要があります(例: EnumProcessesGetModuleFilenameEx また CreateToolhelp32SnapshotProcess32FirstProcess32Next)。のインスタンスが見つからない場合 ntvdm.exe, 、 それから いいえ 16ビットプロセスが実行されており、そこで停止できます。のインスタンスが見つかった場合 ntvdm.exe, 、使用できます VDMEnumTaskWOWEx その中で実行されている16ビットプロセスを列挙します。

それがまだ元の所有者の下にあったとき、私は投稿しました 記事 CodeGuruでは、これらすべてを行う方法を示しています。モダンなコンパイラの下でコンパイルするのに少し作業が必要です(たとえば、それはそれが使用するほど古いものです iostream.h それ以外の iostream, 、しかし、プロセス列挙の部分はまだかなり正しいはずです(ただし、物事を見ると、 SeDebugPrivilege Windows 7で動作するため)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top