如何将从窗体/控件的Handle属性获取的句柄转换为IWin32Window ^?将IntPtr窗口句柄转换为IWin32Window^
回答
(这可以让你控制的对象,它实现了IWin32Window接口。)
EG。
IntPtr myWindowHandle = IntPtr(someVal);
IWin32Window^ w = Control::FromHandle(myWindowHandle);
请注意,这依赖于“从窗体/控件的Handle属性获取的”句柄。你不能在任意的Win32窗口句柄中使用这种技术。
有一个更简单的方法,直接由.NET框架支持,而无需创建自己的自定义类。您可以使用任意任意窗口句柄。
鉴于ptrWindowHandle类型的IntPtr的:
using System.Windows.Forms;
NativeWindow nativeWindow = new NativeWindow();
nativeWindow.AssignHandle(ptrWindowHandle);
System.Windows.Forms.NativeWindow实现IWin32Window接口。
你也可以使用静态'NativeWindow.FromHandle(ptrWindowHandle);' – 2013-01-24 16:23:22
@MattSmith我发现它必须被分配。除非事先使用AssignHandle,否则FromHandle不适用于我。例如,这可以工作:'NativeWindow nativeWindow = new NativeWindow(); nativeWindow.AssignHandle(GetConsoleWindow()); box.ShowDialog(NativeWindow.FromHandle(GetConsoleWindow()));(甚至是'box.ShowDialog(nativeWindow);')...但是这个没有赋值的单行不包含:'box.ShowDialog(NativeWindow。 FromHandle(GetConsoleWindow()));' – Jay 2017-12-14 07:31:16
- 1. 从Selenium webdriver的当前窗口获取窗口句柄(IntPtr)GUID
- 2. 将笔转换为IntPtr
- 3. 将wpf文本框转换为iwin32window(winform)
- 4. 从DataGridViewTextBoxCell获取句柄IntPtr?
- 5. 什么是句柄? IntPtr
- 6. 将ProcessID转换为进程句柄
- 7. 窗口句柄和窗口尺寸
- 8. 将窗口句柄传递给变量
- 9. 窗口句柄C#/。NET
- 10. 获取窗口句柄
- 11. 窗口的主句柄
- 12. 检索Delphi窗口句柄
- 13. 验证Win32窗口句柄
- 14. MFC中的窗口句柄?
- 15. Python pyautogui窗口句柄
- 16. 改变一个窗口的背景色,给定一个IntPtr句柄
- 17. 如何将IntPtr/Int转换为Socket?
- 18. 如何将IntPtr转换为流?
- 19. 如何将IntPtr转换为InteropService.SafeHandle?
- 20. 将类类型对象转换为Intptr
- 21. 在C#中将IntPtr转换为int *?
- 22. 如何将位图转换为intptr C#
- 23. 如何将IntPtr转换为SafeHandle?
- 24. 将字符串转换为IntPtr
- 25. IntPtr转换为字节[] c#
- 26. 帮助将VB.NET“句柄”语句转换为C#
- 27. 将XAML WPF窗口转换为WinForm
- 28. 将JavaScript窗口对象转换为JSON
- 29. 将WPF BitmapSource转换为窗口图标
- 30. 窗口句柄多久重用
James,我在你的答案中编辑了一个资格证书,因为来自对IntPtr和IWin32Window进行更全面搜索的人可能只会阅读问题标题而不理解问题细节中的约束条件。希望这没关系。 – itowlson 2010-03-20 04:21:21
不,这是一个很好的编辑。你可能从几个小时的头脑中想起了为什么他不能奇迹般地从原始HWND创建一个Control/IWin32Window对象,从而挽救了一个倒霉的未来程序员。 :) – 2010-03-20 07:54:28