+ -
当前位置:首页 → 问答吧 → 如何使用process.start(程序)打开程序并返回程序的句柄(重新发帖)

如何使用process.start(程序)打开程序并返回程序的句柄(重新发帖)

时间:2011-12-09

来源:互联网

我是要通过程序运行不特定的外部程序,并对其窗口进行控制,对于一般的程序,使用下面这段程序就可以正常获取,但是,无法获取像“迅雷、迅雷看看、360”等程序的真正Pid,
Public aa As New Process
Public RunfilenName As String
Dim hwnd As IntPtr
aa.StartInfo.FileName = RunfilenName
aa.Start()
hwnd = aa.Id

Dim i As Int16 = 0
Do While 0 = hwnd And i < 500 ‘循环是为了等待相应程序打开,否则无法获取到
Thread.Sleep(10)
hwnd = aa.Id
i += 1
Loop
经测试使用
Dim Myprocess() As Process = Process.GetProcessesByName(aa.ProcessName),
可以获取进程信息,但Pid和上面的程序一样也不是不真正Pid

作者: zhichao2001   发布时间: 2011-12-09

迅雷5好像是在又启动了一个进程,迅雷7刚才找了下,应该只有一个Thunder.exe
迅雷看看和迅雷类似,360没用过,不知道

作者: bunliney   发布时间: 2011-12-09

很多程序并不是只有一个程序的,比如说我们写一个能够更新的程序,一般包括
更新.exe
主程序.exe
(配置文件.ini)
..其他程序..
我们运行的话一般是启动更新.exe>>然后检测配置文件等等>>若有更新,则更新>>主程序
当然也有先启动主程序.exe>>启动附带程序,自检完整性>>启动 更新.exe>>更新>>...
现在很多程序都比较大,而且都比较独立这样在更新或者检测时会更加方便,例如360安全卫士,
主程序界面和主程序的托盘就是两个程序,他的其他程序都是独立的,但是单独打开是不允许的,
程序之间互相通讯,以保持完整性和相对独立性
所以这样你在检测PID的时候,要注意分析PID进程实际的程序创建者(路径及句柄等等),当然不缺乏很多程序都是实现创建和加载内核驱动,很多都无法检测到句柄

作者: xiaolinyouni   发布时间: 2011-12-09

相关阅读 更多