0

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

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

4

1 に答える 1

2

おそらく、プロセスを列挙する必要があります (たとえば、EnumProcesseswithGetModuleFilenameExまたはCreateToolhelp32SnapshotwithProcess32FirstおよびProcess32Next)。のインスタンスが見つからない場合はntvdm.exe、16 ビット プロセスが実行されていないため、そこで停止できます。のインスタンスが見つかった場合は、 を使用して、その中で実行されている 16 ビット プロセスを列挙できます。ntvdm.exeVDMEnumTaskWOWEx

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

于 2010-11-08T05:07:11.817 に答える