我试验过了 这个 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会有点问题 就是我第一次选择了一个(比如我第一次选中了序号为2的一个),下一次比如我要选中4,但是情况变成了2和4都选中了 ,我想要的就是选择4
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
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会有点问题 就是我第一次选择了一个(比如我第一次选中了序号为2的一个),下一次比如我要选中4,但是情况变成了2和4都选中了 ,我想要的就是选择4
caozhy 帮忙看看啦 你发的页面内容 我试验啊
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