我已经可以获取到此listview的句柄,并且可以获取出内容,现在需要用SendMessage发送消息选中某一行,它默认是选中在第1行的,在网上找的资料虽然可以选中,但是并没有真正的选中,和鼠标点击某行不一样,也就是说它的的listindex还是没有变Public Function ListView_SetItemState(ByVal hwnd As Long, Optional ByVal iItem As Long = -1) As Boolean
Dim PID As Long
Dim hProcess As Long
Dim plvItem As Long
Dim myItem As LV_ITEMA GetWindowThreadProcessId hwnd, PID '获取与指定窗口关联在一起的一个进程和线程标识符
hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, PID) '打开一个现有进程的句柄 If hProcess <> 0 Then
plvItem = VirtualAllocEx(hProcess, 0, Len(myItem), MEM_COMMIT, PAGE_READWRITE) '分配内存 myItem.state = LVIS_SELECTED Or LVIS_ACTIVATING
myItem.stateMask = LVIS_SELECTED Or LVIS_ACTIVATING If plvItem <> 0 Then
Call WriteProcessMemory(hProcess, plvItem, myItem, Len(myItem), 0) '写入内存
Call SendMessage(hwnd, LVM_SETITEMSTATE, iItem, ByVal plvItem)
ListView_SetItemState = True
'释放内存
CloseHandle (hwnd)
CloseHandle (hProcess)
Call VirtualFreeEx(hProcess, plvItem, 0, MEM_RELEASE)
End If
End IfEnd Function
以上代码只是表面上选中某一项了,就像多选一样,可我要的不是这个效果,我要的是像鼠标点击一样,选中某一行,listindex也跟着变;
参考:SendMessage(71072, LVM_GETSELECTIONMARK, 0, ByVal 0&)用这一句可以获取出选定的索引的位置,在调用ListView_SetItemState后,查看索引位置,仍然没变; 呵呵,我说的好像罗嗦点,但意思应该是讲明白了
Dim PID As Long
Dim hProcess As Long
Dim plvItem As Long
Dim myItem As LV_ITEMA GetWindowThreadProcessId hwnd, PID '获取与指定窗口关联在一起的一个进程和线程标识符
hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, PID) '打开一个现有进程的句柄 If hProcess <> 0 Then
plvItem = VirtualAllocEx(hProcess, 0, Len(myItem), MEM_COMMIT, PAGE_READWRITE) '分配内存 myItem.state = LVIS_SELECTED Or LVIS_ACTIVATING
myItem.stateMask = LVIS_SELECTED Or LVIS_ACTIVATING If plvItem <> 0 Then
Call WriteProcessMemory(hProcess, plvItem, myItem, Len(myItem), 0) '写入内存
Call SendMessage(hwnd, LVM_SETITEMSTATE, iItem, ByVal plvItem)
ListView_SetItemState = True
'释放内存
CloseHandle (hwnd)
CloseHandle (hProcess)
Call VirtualFreeEx(hProcess, plvItem, 0, MEM_RELEASE)
End If
End IfEnd Function
以上代码只是表面上选中某一项了,就像多选一样,可我要的不是这个效果,我要的是像鼠标点击一样,选中某一行,listindex也跟着变;
参考:SendMessage(71072, LVM_GETSELECTIONMARK, 0, ByVal 0&)用这一句可以获取出选定的索引的位置,在调用ListView_SetItemState后,查看索引位置,仍然没变; 呵呵,我说的好像罗嗦点,但意思应该是讲明白了
http://www.autohotkey.com