调用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#