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

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

我是要通过程序运行不特定的外部程序,并对其窗口进行控制,对于一般的程序,使用下面这段程序就可以正常获取,但是,无法获取像“迅雷、迅雷看看、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 --------------------编程问答-------------------- 迅雷5好像是在又启动了一个进程,迅雷7刚才找了下,应该只有一个Thunder.exe
迅雷看看和迅雷类似,360没用过,不知道 --------------------编程问答-------------------- 很多程序并不是只有一个程序的,比如说我们写一个能够更新的程序,一般包括
更新.exe
主程序.exe
(配置文件.ini)
..其他程序..
我们运行的话一般是启动更新.exe>>然后检测配置文件等等>>若有更新,则更新>>主程序
当然也有先启动主程序.exe>>启动附带程序,自检完整性>>启动 更新.exe>>更新>>...
现在很多程序都比较大,而且都比较独立这样在更新或者检测时会更加方便,例如360安全卫士,
主程序界面和主程序的托盘就是两个程序,他的其他程序都是独立的,但是单独打开是不允许的,
程序之间互相通讯,以保持完整性和相对独立性
所以这样你在检测PID的时候,要注意分析PID进程实际的程序创建者(路径及句柄等等),当然不缺乏很多程序都是实现创建和加载内核驱动,很多都无法检测到句柄 --------------------编程问答-------------------- 我有个思路觉得可行,就是检查进程列表,最新的一般情况下就是那个打开的程序
补充:.NET技术 ,  VB.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,