请教GetWindowThreadProcessId的问题
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Dim a As Long
Private Sub Form_load()
WebBrowser1.Navigate "D:\" '图片仓库\相片集\2004五一青岛\"
a = FindWindowEx(Me.hwnd, 0, "Shell Embedding", vbNullString) 
a = FindWindowEx(a, 0, "SHELLDLL_DefView", vbNullString)
a = FindWindowEx(a, 0, "DUIViewWndClassName", vbNullString)
a = FindWindowEx(a, 0, "DirectUIHWND", vbNullString)
a = FindWindowEx(a, 0, "CtrlNotifySink", vbNullString)
a = FindWindowEx(a, 0, "syslistview32", vbNullString)
End SubPrivate Sub Timer1_Timer()
b = SendMessage(a, LVM_GETSELECTIONMARK, 0, 0)
GetWindowThreadProcessId a, PIdMe.Caption = GetListviewItem(a, PId, 0, b)End Sub
用这段代码在一个程序中可以得到 Pid,但是到了另一个程序中却怎么也得不到Pid。郁闷啊。后来我把代码改成下面这样后,还是显示Me.Caption为空。
Private Sub Form_load()WebBrowser1.Navigate "D:\" '图片仓库\相片集\2004五一青岛\"End SubPrivate Sub Form_activate()
a = FindWindowEx(Me.hwnd, 0, "Shell Embedding", vbNullString) 
a = FindWindowEx(a, 0, "SHELLDLL_DefView", vbNullString)
a = FindWindowEx(a, 0, "DUIViewWndClassName", vbNullString)
a = FindWindowEx(a, 0, "DirectUIHWND", vbNullString)
a = FindWindowEx(a, 0, "CtrlNotifySink", vbNullString)
a = FindWindowEx(a, 0, "syslistview32", vbNullString)
End Sub设置单步调试后却可以得到Pid的值, Me.Caption也不再为空。怎么回事呢?请赐教。

解决方案 »

  1.   

    不知道,你具体加载了什么样的页面,也没法试,但感觉你可能问题也许不是出在GetWindowThreadProcessId上,
    更多可能是,你没有得到正确的a,
    用Me.Caption 可以显示一下a的值,估计是0
    Navigate是异步执行的,页面没加载完成前,FindWindow不会有结果,你可把所有FindWindow放到
    webBrowser1_DocumentCompleted事件中执行
    或者,在Timer事件中,多次查找
      

  2.   

    谢谢homezj.采用了你的建议。Navigate是异步执行的,页面没加载完成前,FindWindow不会有结果,你可把所有FindWindow放到
    webBrowser1_DocumentCompleted事件中执行