2009-09-14 58 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