我正在尝试使用其句柄(即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!!");
我还尝试访问另一个演示 .net winforms 应用程序的主窗口,这是我为此目的而制作的(即我运行演示应用程序,并尝试通过该应用程序访问其主窗口),但也失败了,尽管两者演示和此应用程序是 .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 来工作。
如果我不能,是否有另一种访问窗口的方法(即,而不是使用句柄)?
==================== 编辑
我想处理整个窗口对象和它自己的控件