VB怎么点击外部程序中ListView的某一行
我已经可以获取到此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 If
End Function
以上代码只是表面上选中某一项了,就像多选一样,可我要的不是这个效果,我要的是像鼠标点击一样,选中某一行,listindex也跟着变;
参考:SendMessage(71072, LVM_GETSELECTIONMARK, 0, ByVal 0&)用这一句可以获取出选定的索引的位置,在调用ListView_SetItemState后,查看索引位置,仍然没变;
呵呵,我说的好像罗嗦点,但意思应该是讲明白了 --------------------编程问答-------------------- api 模拟鼠标点击事件
--------------------编程问答-------------------- 调用AutoHotKey脚本?
http://www.autohotkey.com --------------------编程问答-------------------- LVM_GETSELECTIONMARK只是获取标记selected的最后一项吧 --------------------编程问答-------------------- 除
补充:VB , 控件