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

自在修行 2011-12-09 08:04:46
我是要通过程序运行不特定的外部程序,并对其窗口进行控制,对于一般的程序,使用下面这段程序就可以正常获取,但是,无法获取像“迅雷、迅雷看看、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
...全文
280 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
自在修行 2011-12-15
  • 打赏
  • 举报
回复
我有个思路觉得可行,就是检查进程列表,最新的一般情况下就是那个打开的程序
Bullatus 2011-12-09
  • 打赏
  • 举报
回复
迅雷5好像是在又启动了一个进程,迅雷7刚才找了下,应该只有一个Thunder.exe
迅雷看看和迅雷类似,360没用过,不知道
苦苦的潜行者 2011-12-09
  • 打赏
  • 举报
回复
很多程序并不是只有一个程序的,比如说我们写一个能够更新的程序,一般包括
更新.exe
主程序.exe
(配置文件.ini)
..其他程序..
我们运行的话一般是启动更新.exe>>然后检测配置文件等等>>若有更新,则更新>>主程序
当然也有先启动主程序.exe>>启动附带程序,自检完整性>>启动 更新.exe>>更新>>...
现在很多程序都比较大,而且都比较独立这样在更新或者检测时会更加方便,例如360安全卫士,
主程序界面和主程序的托盘就是两个程序,他的其他程序都是独立的,但是单独打开是不允许的,
程序之间互相通讯,以保持完整性和相对独立性
所以这样你在检测PID的时候,要注意分析PID进程实际的程序创建者(路径及句柄等等),当然不缺乏很多程序都是实现创建和加载内核驱动,很多都无法检测到句柄

16,722

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧