ここに同様の質問を投稿しましたが、質問の一部に焦点を当てて再投稿することにしました。
32 ビット WinForms アプリケーションから 64 ビット Windows 7 で EnumWindows と EnumChildWindows を使用してウィンドウを列挙しています。宣言は次のとおりです。
public delegate int EnumWindowsCallback (System.IntPtr hWnd, System.IntPtr lParam);
[DllImport("user32.Dll")]
public static extern bool EnumWindows (EnumWindowsCallback lpEnumCallbackFunc, IntPtr lParam);
[DllImport("user32")]
public static extern bool EnumChildWindows (IntPtr hWnd, EnumWindowsCallback lpEnumCallbackFunc, IntPtr lParam);
すべてのプロセスのすべての子ウィンドウを列挙[Process.GetProcesses()[i].MainWindowHandle]
するために、パラメーターとして送信します。[EnumWindows]
[EnumChildWindows]
が呼び出されたとき、[hWnd]
パラメータは 32 ビットまたは 64 ビット プロセスで実行されているウィンドウへのハンドルである可能性があります。私のアプリは 32 ビットなので、呼び出す[hWnd.ToInt32()]
か[hWnd.ToInt64()]
. IntPtr を別の IntPtr と比較するには、2 つの関数のいずれかを呼び出す必要があります。
コンテキスト: Windows 7 (64 ビット)、VS 2010、WinForms (32 ビット)。