【问题标题】:How to create hidden form and get it's handle?如何创建隐藏表单并获得它的句柄?
【发布时间】:2015-08-13 11:59:11
【问题描述】:

我需要创建隐藏表单并获取它的句柄以通过我的控制台应用程序接收消息。所以,我尝试了这个(不确定实际表单是否正在运行):

HiddenForm form = new HiddenForm();

并定义形式:

public partial class HiddenForm : Form
    {
        public HiddenForm()
        {
            InitializeComponent();
            this.Text = System.DateTime.Now.Ticks.ToString();
            int currentWindowHandle = (int)FindWindow(null, title);
        }
    }

currentWindowHandle 正在获取 0

我做错了什么?什么是正确的方法?

由于某种原因,这不起作用(新表单实际上是可见的):

HiddenForm form = new HiddenForm();
Application.Run(form);
form.Visible = false;

如果我在 HiddenForm 构造函数中添加这个:

this.Visible = false;

【问题讨论】:

  • 只需添加this.CreateHandle(); 就足以强制创建本机窗口。也许,各种搞砸的方法,当你不解释为什么需要这个时,你就无法得到很好的帮助。
  • @HansPassant,在问题的开头解释了。
  • 嗯,你真正解释的是你应该使用命名管道或套接字或 WCF 而不是窗口。
  • 嗯...谢谢。但是出于紧急原因(这是紧急教育项目)窗口是最快速和最简单的解决方案(可能),因为它只需要定义接收方法。
  • 另外,this.CreateHandle(); 有效!您可以创建与解决问题相同的答案。

标签: c# forms window-handles


【解决方案1】:

我做过一次。像这样。

[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

string title = "Microsoft Visual SourceSafe";
IntPtr hWnd = FindWindow(null, title);

我正确地得到了窗口的句柄。 如果您想查看有关表单的更多信息,可以使用 Spy++。

希望对你有帮助。

【讨论】:

  • 好吧,我实际上从一开始就使用它。只是忘了提及方法声明。
【解决方案2】:

正如@HansPassant 所提到的,只要这样做就足以使一切正常:

this.CreateHandle();

【讨论】:

    猜你喜欢
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    相关资源
    最近更新 更多