如何在C#中获得Process'主窗口句柄?
目标是以编程方式启动Windows窗体,获取其句柄,并使用Win Api的SendMessage()函数将信息发送到其wndProc()函数。
我得到了SendMessage()部分的照顾,但现在的问题是在进程启动后获取表单的句柄。
我的第一个猜测是Process'MainWindowHandle属性会让我得到我正在查找的句柄,但是在我启动过程之后,MainWindowHandle仍然等于0,下面的代码不显示刚刚启动的过程的句柄:
foreach (Process p in Process.GetProcesses())
{
Console.WriteLine(p.MainWindowHandle);
}
有人能告诉我如何做到这一点,以及它是否可以实际完成?
有时进程需要一秒钟设置一切,但对象立即返回。
出于这个原因,你应该稍微等一下,以便让进程真正开始,然后它的MainWindowHandle将被适当地设置,准备好被使用。
var proc = Process.Start("notepad");
Thread.Sleep(1000); // This will wait 1 second
var handle = proc.MainWindowHandle;
另一种更聪明的做法是:
var proc = Process.Start("notepad");
try
{
while (proc.MainWindowHandle == IntPtr.Zero)
{
// Discard cached information about the process
// because MainWindowHandle might be cached.
proc.Refresh();
Thread.Sleep(10);
}
var handle = proc.MainWindowHandle;
}
catch
{
// The process has probably exited,
// so accessing MainWindowHandle threw an exception
}
这将导致进程启动,并等待MainWindowHandle不为空。
链接地址: http://www.djcxy.com/p/38841.html上一篇: How do you get a Process' main window handle in C#?
下一篇: Get component type of custom .NET class from window handle