接上一篇。
再说一遍需求:写一个程序A,去启动一个指定的程序B,设置它的窗口大小并把它放到指定位置。
既然CreateProcess指定的程序启动参数,对于GUI程序无效(我暂时真的不知道为什么…),那可以让程序启动以后,获取它的Handle,然后模拟操作系统向它发送消息,让其响应。
CreateProcess可以得到被启动的程序的PID,但得不到handle。(我也不知道怎么回事,明明说返回的是个handle,但确实和B的handle不是一个数,另外尝试了各种办法,比如openProcess返回的也不是B的handle的数)
那么,如果根据PID找到它对应的handle呢?
方法一,调用GetWindowThreadProcessId函数。
有可能有死循环…,就是可能一直都找不到。
一个坑!
如果开启的不是gui程序,只是开个控制台,也找不到!启动以后,CreateProcess立即返回了。wait那个函数没有生效!就算是Sleep以后,也找不到……
vc++6.0编译,xp系统和win8系统,测试通过。
注意,因为前面是getForeground,所以后面是写GetNextWindow的参数传的是Prev…
有几个函数,getWindow,getTopWindow,getForeground...
GetNext...的参数有prev、next。