子ダイアログ ウィンドウのハンドルを取得しようとしています。FindWindowEx を使用してみましたが、うまくいきませんでした。代わりに、FindWindow が機能しました。
次のコードを使用して、ビジュアル スタジオのオプション ウィンドウで実験を行いました。
IntPtr vsHandle = Process.GetProcessById(vsProcessId).MainWindowHandle; // consistent with spy++'s parent handle of options window
IntPtr optionsHandle = FindWindowEx(vsHandle, IntPtr.Zero, "#32770", "Options"); // returns 0
IntPtr optionsHandle2 = FindWindow("#32770", "Options"); // returns correct handle
私の理解では、FindWindowEx は動作するはずでした。これは子ウィンドウです。
Windows XP を実行していますが、FindWindowEx(vsHandle, IntPtr.Zero, "#32770", null) も使用してみました。うまくいきませんでした。それを取得する唯一の方法は、同じダイアログを持つ2つの親インスタンスを開くことができるため、FindWindowを使用することです。
これは宣言です:
[DllImport("user32.dll")]
Private static extern IntPtr FindWindow(string className, string windowTitle);
[DllImport("user32.dll")]
Private static extern IntPtr FindWindowEx(IntPtr parentHWnd, IntPtr childAfterHWnd, string className, string windowTitle);
前もって感謝します。