|
发表于 2008-11-27 15:28:51
|
显示全部楼层
<div class="msgheader">QUOTE:</div><div class="msgborder"><b><font face="Verdana">Option Explicit</font>
<p><font face="Verdana">Private Declare Function PostMessage& Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)<br/>Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _<br/> ByVal lpClassName As String, _<br/> ByVal lpWindowName As String) As Long<br/>Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" ( _<br/> ByVal hWnd1 As Long, _<br/> ByVal hWnd2 As Long, _<br/> ByVal lpsz1 As String, _<br/> ByVal lpsz2 As String) As Long<br/>Private Const WM_LBUTTONDBLCLK As Long = &H203</font></p>
<p><font face="Verdana">Private Sub Command1_Click()<br/> Dim tWnd1 As Long, tWnd2 As Long<br/> <br/> tWnd1 = FindWindow(vbNullString, "你程序的标题,iNode什么的")<br/> If tWnd1 = 0 Then<br/> MsgBox "未找到iNode!", vbOKOnly Or vbInformation<br/> Exit Sub<br/> End If<br/> tWnd2 = FindWindowEx(tWnd1, ByVal 0&, "SysListView32", vbNullString) '只有一个SysListView32就可以这样做<br/> If tWnd2 = 0 Then<br/> MsgBox "未找到SysListView32!", vbOKOnly Or vbInformation<br/> Exit Sub<br/> End If<br/> Call PostMessage(tWnd2, WM_LBUTTONDBLCLK, 0, ByVal (187 And &HFFFF) + (47 And &HFFFF) * &H10000)<br/> '187,47,是从你那图里得到的,即鼠标当前坐标(515,353)减去SysListView32的左上角坐标(328,306)<br/> '这是一个相对坐标.<br/>End Sub</font></b></p></div>
<p> </p>
<p>用这个代码试一下.</p>
<p> </p>
<p>句柄在每次对象建立时都是临时申请的,因此两次运行得到相同句柄的机率接近0.</p>
<p> </p>
<p>所以要使用窗体名+类名来定位你的SysListView32,然后再发送双击消息.</p>
<p> </p>
<p>以上代码仅是思路,具体需要你自己调试,但已经差不了多少了.</p> |
|