ハンドル(つまりSystem.IntPtr
値)を使用して特定のウィンドウにアクセスしようとしています:
// Getting the process of Visual Studio program
var process = Process.GetProcessesByName("devenv")[0];
// Showing the handle we've got, we've no problem
MessageBox.Show(this, process.MainWindowHandle.ToString());
// Attempting to get the main window object by its handle
var wnd = NativeWindow.FromHandle(process.MainWindowHandle);
// always fails
if (wnd == null)
MessageBox.Show("Failed");
else
MessageBox.Show(wnd.ToString(), "Yeeeeees!!");
この目的のために作成した別のデモ.netwinformsアプリケーションのメインウィンドウにもアクセスしようとしましたが(つまり、デモアプリケーションを実行し、このアプリケーションでメインウィンドウにアクセスしようとしました)、失敗しましたが、両方ともデモとこのアプリケーションは.NETアプリケーションです。ただし、これは成功します。
var process2 = Process.GetCurrentProcess();
MessageBox.Show(this, process2.MainWindowHandle.ToString());
var wnd2 = NativeWindow.FromHandle(process2.MainWindowHandle);
if (wnd2 == null)
MessageBox.Show("Failed");
else
MessageBox.Show(wnd2.ToString(), "Yes");
同じアプリケーションから呼び出されるので、これは機能すると思います。では、ハンドルを使用して別のプログラムのウィンドウオブジェクトにアクセスするにはどうすればよいですか?C\C++
ヘッダーファイル<windows.h>
を使用してからP\invokeを使用することで機能すると思いました。
できない場合、ウィンドウにアクセスする別の方法はありますか(つまり、ハンドルを使用するのではなく)?
=================== 編集
ウィンドウオブジェクト全体と独自のコントロールを処理したい