我一直試圖讓我的過程的主窗口的引用相當長一段時間。我經歷了很多網站尋找解決方案。但它看起來像每個人都提供了一個解決方案來獲得窗口句柄,而不是窗口本身。如何獲取進程的主窗口(而不是窗口句柄)?
獲得進程的主窗口句柄非常簡單。我似乎也像預期的那樣獲得了Window標題。
我經歷了User32.dll提供的大部分API,但找不到我在找的東西。
我需要對窗口的引用,因爲我想訪問窗口類的幾個成員來完成我的工作。我所指的窗口是一個WPF窗口。
在這方面的任何幫助將不勝感激:)
在此先感謝。
我一直試圖讓我的過程的主窗口的引用相當長一段時間。我經歷了很多網站尋找解決方案。但它看起來像每個人都提供了一個解決方案來獲得窗口句柄,而不是窗口本身。如何獲取進程的主窗口(而不是窗口句柄)?
獲得進程的主窗口句柄非常簡單。我似乎也像預期的那樣獲得了Window標題。
我經歷了User32.dll提供的大部分API,但找不到我在找的東西。
我需要對窗口的引用,因爲我想訪問窗口類的幾個成員來完成我的工作。我所指的窗口是一個WPF窗口。
在這方面的任何幫助將不勝感激:)
在此先感謝。
您可以使用HwndSource.FromHwnd
方法。
這裏有一個簡單的LinqPad,現成的例子:
void Main()
{
var mw = new MainW();
mw.Show();
var hWnd = FindWindowByCaption(IntPtr.Zero, "testwindow");
var rootVisual = System.Windows.Interop.HwndSource.FromHwnd(hWnd).RootVisual;
MainW m2 = (MainW)rootVisual;
Thread.Sleep(500);
m2.Title="is going";
Thread.Sleep(500);
m2.Title="to close...";
Thread.Sleep(500);
m2.Close();
}
[System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint="FindWindow", SetLastError = true)]
static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName);
class MainW: System.Windows.Window
{
public MainW()
{
Title = "testwindow";
Width = 230;
Height = 100;
Background = System.Windows.Media.Brushes.AliceBlue;
}
}
你試圖從在同一應用程序中獲得的主窗口,或從其他應用程序? – dognose
您從句柄中獲取窗口:http://stackoverflow.com/questions/5822026/get-wpf-window-by-hwnd – CKII
您無法獲取對駐留在不同窗口類中的窗口類的實例的引用處理。您只能獲取通過Windows API公開的窗口數據。任何更多需要IPC,例如通過Windows Communication Foundation。 –