GetWindowThreadProcessId,它根据窗口的句柄来获取进程和线程ID,VB原型如下
创新互联是专业的汪清网站建设公司,汪清接单;提供成都网站建设、成都网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行汪清网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
'Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
'参数:
'hwnd:目标窗口的句柄
'lpdwProcessId:一个接受返回进程ID的Long变量,
'顺便提一下,在我们调用API的时候,如果一个变量不是ByVal传递,则表示这个变量是用来接受返回值的(但也不是绝对的)
'返回值:
'窗口的线程ID
用time控件啊,获取threadstate后,按指定时间间隔规定向界面刷新,线程必须是全局变量
用一个有退出条件的无限循环的sub也行。
线程开始就触发该过程,用无限循环来刷新状态,线程完成即退出无限循环。局部变量的线程也可以用这种方式。
不过用法要正确,否则会出问题。
。。一个进程下面可以有多个线程,你怎么能“这个PID的值的线程ID”?
你最多只能做到枚举这个进程下面的所有线程,然后你自己查找合适的线程。
要枚举进程中的所有线程,要先用
CreateToolHelp32Snapshot
创建一个快照,然后用
Thread32First
和
Thread32Next
一项一项遍历。
试试这段代码,测试正确:
Module Module1
Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Integer, ByRef lpdwProcessId As Integer) As Integer
Sub Main()
Dim pid As Integer, rtv As Integer, xlapp As Object
xlapp = CreateObject("excel.application")
rtv = GetWindowThreadProcessId(xlapp.hwnd, pid)
MsgBox(pid)
MsgBox(xlapp.hwnd)
xlapp.quit()
End Sub
End Module