Я пытаюсь получить доступ к конкретному окну, используя его ручку (то есть 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.
Если я не могу, есть ли другой способ доступа к окну (т. Е. Вместо использования ручек)?
=================== EDIT
Я хочу иметь дело со всем оконного объекта и его собственных элементов управления
не могли бы вы использовать user32.dll и вызвать FindWindow (NULL, "Window Title")? –
- это другое приложение приложений Windows .NET? – Tigran
@Tigran Да, это –