2009-09-14 59 views

回答

3

使用

process.MainWindowHandle; 

它可能是0启动应用程序的时候,所以,直到它被填满你可能要循环和睡眠。

+1

嗨Jan, 对我来说,句柄始终为零,即使在无限循环之后,句柄永远不会变为任何其他值。我使用以下代码: proc.StartInfo.FileName = @“C:\ Documents and Settings \ SUM \ Desktop \ PortableApps \ Notepad ++ Portable \ Notepad ++ Portable.exe”; proc.StartInfo.Arguments = String.Empty; proc.Start(); IntPtr appHwnd = proc.MainWindowHandle; (appHwnd == IntPtr.Zero) while(appHwnd == IntPtr.Zero) Thread.Sleep(100); appHwnd = proc.MainWindowHandle; } 有什么不对? – Marcel 2010-01-04 09:55:10

+0

根据此(http://www.xtremedotnettalk.com/showpost.php?s=b115a21c0601804f80c9a2680db9c38f&p=461829&postcount=4)它也可能为零,因为应用程序确实显示一个对话框或首先初始化Flash。 – Marcel 2010-01-04 10:23:39

2

你也可以在过程调用刷新(),以确保准确的

+0

好信息,我会记住 – 2009-09-14 14:31:52

3

这是不是最近的话题,但答案是不完整的信息。

我同意Process.MainWindowHandle解决方案,并等待值,但不与睡眠。

如果您刚启动一个进程并希望使用其主窗口句柄,请考虑使用WaitForInputIdle方法来允许进程完成启动,以确保已创建主窗口句柄。

Process.WaitForInputIdle

此重载仅适用于处理与用户接口,因此,一个消息循环。

+0

我认为这实际上应该是一个评论。 – 2016-05-16 13:51:55

+0

我很抱歉,由于某些原因,这个等待....函数抛出异常(只有一个),我将解决睡眠和刷新 – Sam 2016-05-16 16:53:57

+0

也许错误是只在我的应用程序,或不 – Sam 2016-05-16 16:59:13