当前位置:编程学习 > VB >>

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 ,  控件
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,