任务管理器显示进程是SysTreeView32,我已经可以定位到某一行,但怎么获得该行的坐标及发送右键弹出菜单及点击指定的菜单命令。

解决方案 »

  1.   

    为何不直接用 TerminateProcess() 终止进程?
      

  2.   

    顶。都定位到了,ProcessID应该也得到了 可以直接结束
      

  3.   

    得到 ProcessID ,还可以 shell taskkill  搞定它。
      

  4.   

    坐标用GetCursorPos获得呗,知道了坐标,把自己的菜单popup到该坐标即可。强行终止进程可以用楼上几个说的那个函数。
      

  5.   

    完全模拟鼠标点击?既然定位到了,那么就直接SendKeys吧
      

  6.   


    '托盘开始
    Private Type NOTIFYICONDATA
        cbSize As Long
        hwnd As Long
        uId As Long
        uFlags As Long
        ucallbackMessage As Long
        hIcon As Long
        szTip As String * 64
    End Type
    Private t As NOTIFYICONDATAPrivate Const NIM_ADD = &H0
    Private Const NIM_MODIFY = &H1
    Private Const NIM_DELETE = &H2
    Private Const WM_MOUSEMOVE = &H200
    Private Const WM_LBUTTONUP = &H202
    Private Const WM_RBUTTONUP = &H205
    Private Const WM_LBUTTONDBLCLK = &H203Private Const NIF_MESSAGE = &H1
    Private Const NIF_ICON = &H2
    Private Const NIF_TIP = &H4Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As BooleanPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, Y As Single)
        Dim lmsg As Single
        lmsg = x / Screen.TwipsPerPixelX
    '    Debug.Print lmsg
        Select Case lmsg
         Case WM_LBUTTONUP
    '    "msgbox "请用鼠标右键点击图标!", vbinformation, "实时播音专家"
    '    "单击左键,显示窗体
    '    "下面两句的目的是把窗口显示在窗口最顶层
    '    "me.show
    '       Me.SetFocus
        Case WM_RBUTTONUP
    '        MsgBox "a"
           PopupMenu menu_Tools '如果是在系统tray图标上点右键,则弹出菜单menutray
    '    "" case wm_mousemove
    '    "" case wm_lbuttondown
        Case WM_LBUTTONDBLCLK
            Me.WindowState = 0
            '下面两句的目的是把窗口显示在窗口最顶层
            Me.Show
            Me.SetFocus
                    
    '    "" case wm_rbuttondown
    '    "" case wm_rbuttondblclk
    '    "" case else
       End SelectEnd Sub
    关键代码...
      

  7.   

    我自已实现了,谢谢大家的参与,结贴。
    Re33 = SendMessage(hWindow, LVM_ENSUREVISIBLE, j, 1)''滚动到指定行
    Re33 = SendMessage(hWindow, LVM_SETITEMSTATE, j, ByVal pMyItemMemory)'选中
    Call SendMessage(hWindow, LVM_GETITEMPOSITION, j, ByVal AddressOfFileMap)'获得坐标
    ReadProcessMemory pHandle, ByVal AddressOfFileMap, TempRect, 8&, 0
    Call ClientToScreen(hWindow, TempRect)'转换屏幕坐标
    Call SetCursorPos(TempRect.x + 20, TempRect.y + 5)''移动鼠标到指定点
    mouse_event MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0
    Sleep 10
    mouse_event MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0'按下右键弹出菜单
    Sleep 500'等待弹出
    Call SetCursorPos(TempRect.x + 50, TempRect.y + 20)'移到菜单
    mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
    Sleep 10
    mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0'点击菜单