怎么向另一程序的SysListView32里的某一行发送消息,实现选中特定行(或者项目),取得值,双击他
如何向另一程序的SysListView32里的某一行发送消息,实现选中特定行(或者项目),取得值,双击他
如何向另一程序的SysListView32发送消息,实现选中特定行(或者项目),取得值,双击他。
Shell "C:\Program Files\Symantec\pcAnywhere\winaw32.exe", vbNormalFocus
Dim hwn As Long
hwn = FindWindow(vbNullString, "pcAnywhere 管理器") '获取pcAnywhere 管理器窗口句柄
Label1.Caption = "[pcAnywhere 管理器] 窗口句柄为 " & hwn
hwn = FindWindowEx(hwn, 0, "Afx:400000:8:10011:0:0", "ContainerWnd")
Label2.Caption = hwn
hwn = FindWindowEx(hwn, 0, "AWCONTAINER", vbNullString)
Label3.Caption = hwn
hwn = FindWindowEx(hwn, 0, "SysListView32", vbNullString) '获取列表框句柄
Label4.Caption = "列表框句柄 " & hwn
SysListView32的句柄已经得到实现选中特定行(或者项目
------解决方案--------------------
参考这个
http://blog.****.net/VisualEleven/archive/2011/04/11/6314779.aspx
------解决方案--------------------
Public Sub ListView_ItemSelect(ByVal hWnd As Long, Optional ByVal iItem As Long = 0)
Dim dwProcessId As Long
Dim hProcess As Long
Dim plvItem As Long
Dim LVITEM As LV_ITEMA
GetWindowThreadProcessId hWnd, dwProcessId '获取与指定窗口关联在一起的一个进程和线程标识符
'' hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, dwProcessId) '打开一个现有进程的句柄
hProcess = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, dwProcessId)
If hProcess Then
plvItem = VirtualAllocEx(hProcess, ByVal 0, LenB(LVITEM), MEM_COMMIT, PAGE_READWRITE) '分配内存
If plvItem Then
LVITEM.state = LVIS_SELECTED Or LVIS_FOCUSED Or LVIS_ACTIVATING
'lvItem.state = LVIS_SELECTED
LVITEM.stateMask = LVIS_SELECTED
Call WriteProcessMemory(hProcess, ByVal plvItem, LVITEM, LenB(LVITEM), 0) '写入内存
Dim t As Long
t = SendMessage(hWnd, LVM_SETITEMSTATE, iItem, ByVal plvItem)
'' MsgBox t
Call VirtualFreeEx(hProcess, ByVal plvItem, 0, MEM_RELEASE)
End If
Call CloseHandle(hProcess)
End If
End Sub
如何向另一程序的SysListView32发送消息,实现选中特定行(或者项目),取得值,双击他。
Shell "C:\Program Files\Symantec\pcAnywhere\winaw32.exe", vbNormalFocus
Dim hwn As Long
hwn = FindWindow(vbNullString, "pcAnywhere 管理器") '获取pcAnywhere 管理器窗口句柄
Label1.Caption = "[pcAnywhere 管理器] 窗口句柄为 " & hwn
hwn = FindWindowEx(hwn, 0, "Afx:400000:8:10011:0:0", "ContainerWnd")
Label2.Caption = hwn
hwn = FindWindowEx(hwn, 0, "AWCONTAINER", vbNullString)
Label3.Caption = hwn
hwn = FindWindowEx(hwn, 0, "SysListView32", vbNullString) '获取列表框句柄
Label4.Caption = "列表框句柄 " & hwn
SysListView32的句柄已经得到实现选中特定行(或者项目
------解决方案--------------------
参考这个
http://blog.****.net/VisualEleven/archive/2011/04/11/6314779.aspx
------解决方案--------------------
Public Sub ListView_ItemSelect(ByVal hWnd As Long, Optional ByVal iItem As Long = 0)
Dim dwProcessId As Long
Dim hProcess As Long
Dim plvItem As Long
Dim LVITEM As LV_ITEMA
GetWindowThreadProcessId hWnd, dwProcessId '获取与指定窗口关联在一起的一个进程和线程标识符
'' hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, dwProcessId) '打开一个现有进程的句柄
hProcess = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, dwProcessId)
If hProcess Then
plvItem = VirtualAllocEx(hProcess, ByVal 0, LenB(LVITEM), MEM_COMMIT, PAGE_READWRITE) '分配内存
If plvItem Then
LVITEM.state = LVIS_SELECTED Or LVIS_FOCUSED Or LVIS_ACTIVATING
'lvItem.state = LVIS_SELECTED
LVITEM.stateMask = LVIS_SELECTED
Call WriteProcessMemory(hProcess, ByVal plvItem, LVITEM, LenB(LVITEM), 0) '写入内存
Dim t As Long
t = SendMessage(hWnd, LVM_SETITEMSTATE, iItem, ByVal plvItem)
'' MsgBox t
Call VirtualFreeEx(hProcess, ByVal plvItem, 0, MEM_RELEASE)
End If
Call CloseHandle(hProcess)
End If
End Sub