我有一个控制台应用程序(SRMan.exe
),它源自System.Windows.Forms.Form
。我可以在exe运行时隐藏表单。我用过的代码就在这里
this.Opacity = 0;
this.Size = new Size(0, 0);
this.Location = new Point(-100, -100);
this.Visible = false;
Aslo,将表单属性ShowIcon
和ShowInTaskbar
配置为false。
但是我无法获得正在运行的process.code的Window句柄。我使用的是
Process[] process1 = Process.GetProcessesByName("SRMan");
IntPtr pt = process1[0].MainWindowHandle;
感谢任何帮助!
谢谢,
卡里姆。
答案 0 :(得分:2)
你在什么时候打电话:
Process[] process1 = Process.GetProcessesByName("SRMan");
IntPtr pt = process1[0].MainWindowHandle;
如果尚未创建主窗口句柄,pt将返回为零或“MainWindowHandle”可能会抛出异常。
尝试将代码更改为:
Process[] process1 = Process.GetProcessesByName("SRMan");
process1[0].WaitForInputIdle();
IntPtr pt = process1[0].MainWindowHandle;
因为这会强制您的代码等待进程完全加载。 (MSDN article)
举个例子,下面的代码对我来说很好用:
private Thread thd;
private void Form1_Load(object sender, EventArgs e)
{
thd = new Thread(new ThreadStart(GetHandle));
thd.Start();
this.Opacity = 0;
this.Size = new Size(0, 0);
this.Location = new Point(-100, -100);
this.Visible = false;
}
private void GetHandle()
{
Process[] process1 = Process.GetProcessesByName("WindowsFormsApplication12.vshost");
process1[0].WaitForInputIdle();
IntPtr pt = process1[0].MainWindowHandle;
MessageBox.Show(pt.ToString());
}
答案 1 :(得分:0)
你有什么理由不能从表单的Handle
属性中获取句柄吗?
任何派生自Control
类的东西都有Handle
属性。
你为什么要从过程中抓住它?