c# - 从 HWND 到控制

标签 c# winforms

我正在使用 user32.dll 中的 FindWindow 方法查找窗口并获取句柄,但是是否可以从句柄中获取窗体控件?并像普通表格一样使用它?示例:

int myhwnd = FindWindow(null, "MyWindow");
form myform = SomeMagic.GetFormFromHandle(myhwnd);
myform.Visible = false;

还是必须继续使用user32.dll中的方法向窗口发送消息?

最佳答案

如果它是一个托管窗口(您使用 System.Windows.Forms 创建它,并且它继承自 System.Windows.Forms.Control),您可以使用

获取对 Control 对象的引用
Control.FromHandle(myIntPtr);

然后您只需获取控件的父控件,直到获取表单。

如果没有,您将无法获得 Control 对象,但您可以做的是创建一个 NativeWindow,并使用 AssignHandle 将 IntPtr 句柄分配给该对象。这至少会让您获得对 WndProc 和类似内容的一些访问权限,仅此而已。

关于c# - 从 HWND 到控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3996547/

相关文章:

c# - 不安全的 C# 代码会导致 64 位平台上的堆损坏,除非为 x86 平台构建

C# Windows 服务替代方案

c# - JwtToken - 声明名称 JwtTokenTypes.Subject 解析为 ClaimTypes.NameIdentifier,这是为什么以及如何防止?

c# - 如何从另一个类访问 form1 变量?

c# - 最坏情况操作系统时钟精度?

c# - RNGCryptoServiceProvider 不会为相同的 PWD、Salt、Iteration 组合生成相同的哈希值

c# - parallel.for 循环中的异步任务

c# - 如何制作没有界面的应用程序?

c# - FileSystemWatcher 锁定文件夹

.net - 您用什么来创建和打印表格/文档?