查找WPF窗口的句柄

bxgwgixi  于 2023-05-01  发布在  其他
关注(0)|答案(6)|浏览(177)

Windows窗体有一个属性win1。句柄,如果我没记错的话,返回主窗口句柄的句柄?
是否有一个等效的方法来获得一个WPF窗口的句柄?
我在网上找到了下面的代码

IntPtr windowHandle = 
    new WindowInteropHelper(Application.Current.MainWindow).Handle;

但我不认为这对我有帮助,因为我的应用程序有多个窗口。

xt0899hw

xt0899hw1#

好吧,而不是传递Application.Current.MainWindow,只是传递一个引用到你想要的任何窗口:new WindowInteropHelper(this).Handle等等。

wixjitnu

wixjitnu2#

只需使用带有WindowsInteropHelper类的窗口:

// ... Window myWindow = get your Window instance...
IntPtr windowHandle = new WindowInteropHelper(myWindow).Handle;

现在,您正在请求应用程序的主窗口,其中将始终有一个。你可以在任何Windows上使用同样的技术,只要它是一个系统。Window派生的Window类。

gcxthw6b

gcxthw6b3#

您可以用途:

Process.GetCurrentProcess().MainWindowHandle
798qvoo8

798qvoo84#

如果出于某种原因,您需要应用程序的所有Window的窗口句柄,您可以使用Application.Windows属性获取所有Windows,然后使用WindowInteropHandler获取它们的句柄,正如您已经演示的那样。

c6ubokkw

c6ubokkw5#

在我的用例中,我在启动时需要一个主窗口的句柄,无论我做什么,我都不能让new WindowInteropHelper(...).Handle返回除了null句柄之外的任何东西,因为窗口还没有初始化。
您可以使用EnsureHandle()方法,如果句柄不存在,该方法将创建句柄,如果句柄存在,则返回当前句柄。

var hWnd = new WindowInteropHelper(Application.Current.MainWindow).EnsureHandle();

一旦应用程序启动,它将继续使用相同的句柄而不会出现问题。

nhn9ugyo

nhn9ugyo6#

在我的情况下,在OnLoaded()事件之后工作。在构造函数中,它给出一个零句柄。

var winHandle = new WindowInteropHelper(this).Handle;

相关问题