当前位置:编程学习 > C#/ASP.NET >>

调用FindWindow时机问题?

我用Process.Start(appName);启动一个外部程序。
随后用FindWindow查找窗体。程序如下。
Process.Start(appName);
//Delay(500);
while (WinAPI.FindWindow(null,p.MainWindowTitle) == IntPtr.Zero);
ParenthWnd = WinAPI.FindWindow(null,p.MainWindowTitle);

发现如果没有用Delay(500);这个延时函数,获得的ParenthWnd与spy++的不一致。
只有延时后,再FindWindow,才能获得与spy++的一致的句柄。

这是什么原因呢?
另外,如果不用延时,如何获得正确的句柄呢?

谢谢 --------------------编程问答-------------------- 因为启动外部程序需要时间,尤其是外部程序是大程序的话...计算机再快执行也需要时间的,何况Windows是抢占式多任务系统... --------------------编程问答-------------------- 哦,那如何保证我的外部程序已经完全启动后,再去findwindow呢? --------------------编程问答-------------------- 试试加上...

Process.WaitForExit(); --------------------编程问答-------------------- Process.WaitForExit();
指示 Process 组件无限期地等待关联进程退出。
该如何用在我的程序中呢,来判断外部程序启动完成。
Process.Start(appName); 
//Delay(500); 
while (WinAPI.FindWindow(null,p.MainWindowTitle) == IntPtr.Zero); 
ParenthWnd = WinAPI.FindWindow(null,p.MainWindowTitle); 

--------------------编程问答-------------------- 启动外部程序后用一个循环反复查找窗体,直到找到为止或者超时失败 --------------------编程问答-------------------- 不用太麻烦, p.MainWindowHandle就是你想获取的ParenthWnd  --------------------编程问答-------------------- Process.Start(appName);后返回 Process    然后写个while循环去读MainWindowHandle  直到句柄不为Intptr.Zero则继续向下执行 --------------------编程问答-------------------- 要么延迟
要么循环判断状态。。。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,