Windows窗体有一个属性win1。句柄,如果我没记错的话,返回主窗口句柄的句柄?是否有一个等效的方法来获得一个WPF窗口的句柄?我在网上找到了下面的代码
IntPtr windowHandle = new WindowInteropHelper(Application.Current.MainWindow).Handle;
但我不认为这对我有帮助,因为我的应用程序有多个窗口。
xt0899hw1#
好吧,而不是传递Application.Current.MainWindow,只是传递一个引用到你想要的任何窗口:new WindowInteropHelper(this).Handle等等。
Application.Current.MainWindow
new WindowInteropHelper(this).Handle
wixjitnu2#
只需使用带有WindowsInteropHelper类的窗口:
// ... Window myWindow = get your Window instance... IntPtr windowHandle = new WindowInteropHelper(myWindow).Handle;
现在,您正在请求应用程序的主窗口,其中将始终有一个。你可以在任何Windows上使用同样的技术,只要它是一个系统。Window派生的Window类。
gcxthw6b3#
您可以用途:
Process.GetCurrentProcess().MainWindowHandle
798qvoo84#
如果出于某种原因,您需要应用程序的所有Window的窗口句柄,您可以使用Application.Windows属性获取所有Windows,然后使用WindowInteropHandler获取它们的句柄,正如您已经演示的那样。
Window
Application.Windows
WindowInteropHandler
c6ubokkw5#
在我的用例中,我在启动时需要一个主窗口的句柄,无论我做什么,我都不能让new WindowInteropHelper(...).Handle返回除了null句柄之外的任何东西,因为窗口还没有初始化。您可以使用EnsureHandle()方法,如果句柄不存在,该方法将创建句柄,如果句柄存在,则返回当前句柄。
new WindowInteropHelper(...).Handle
EnsureHandle()
var hWnd = new WindowInteropHelper(Application.Current.MainWindow).EnsureHandle();
一旦应用程序启动,它将继续使用相同的句柄而不会出现问题。
nhn9ugyo6#
在我的情况下,在OnLoaded()事件之后工作。在构造函数中,它给出一个零句柄。
var winHandle = new WindowInteropHelper(this).Handle;
6条答案
按热度按时间xt0899hw1#
好吧,而不是传递
Application.Current.MainWindow
,只是传递一个引用到你想要的任何窗口:new WindowInteropHelper(this).Handle
等等。wixjitnu2#
只需使用带有WindowsInteropHelper类的窗口:
现在,您正在请求应用程序的主窗口,其中将始终有一个。你可以在任何Windows上使用同样的技术,只要它是一个系统。Window派生的Window类。
gcxthw6b3#
您可以用途:
798qvoo84#
如果出于某种原因,您需要应用程序的所有
Window
的窗口句柄,您可以使用Application.Windows
属性获取所有Windows,然后使用WindowInteropHandler
获取它们的句柄,正如您已经演示的那样。c6ubokkw5#
在我的用例中,我在启动时需要一个主窗口的句柄,无论我做什么,我都不能让
new WindowInteropHelper(...).Handle
返回除了null句柄之外的任何东西,因为窗口还没有初始化。您可以使用
EnsureHandle()
方法,如果句柄不存在,该方法将创建句柄,如果句柄存在,则返回当前句柄。一旦应用程序启动,它将继续使用相同的句柄而不会出现问题。
nhn9ugyo6#
在我的情况下,在OnLoaded()事件之后工作。在构造函数中,它给出一个零句柄。