如何向另一程序的SysListView32发送消息,实现选中特定行(或者项目),比如序号为6的项目
1、现在取得值以及序号已经实现,就是如何选中,不进行操作????
2、选中后鼠标点击??

解决方案 »

  1.   

    http://topic.csdn.net/u/20091021/12/680d7495-dcac-4e11-8446-90c49e41e2b8.html
      

  2.   

    我试验过了 这个
    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
      

  3.   

     
    caozhy 帮忙看看啦 你发的页面内容 我试验啊
      

  4.   

    发现任务管理器程序不会记录上一次的选中状态,但是这个pcAnywhere里面的SysListView32会记录上一次选中的状态,如果再选中了与上一次不一样的项目的话,他就会一起被选中。我只想选中单个
      

  5.   

    你指望他?他的牌牌是VC的,不是VB的
      

  6.   

    SysListView32里面项目怎么让它一个都不选中呢
      

  7.   

    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