vb.net WIN32API 获取listview的值

Public Class Form1
    Public Const LVM_FIRST As Short = &H1000S
    Public Const LVM_GETITEMCOUNT As Integer = (LVM_FIRST + 4)
    Public Const LVM_GETITEM As Integer = (LVM_FIRST + 5)
    Public Const LVM_GETSTRINGWIDTH As Integer = (LVM_FIRST + 17)
    Public Const LVM_GETCOLUMN As Integer = (LVM_FIRST + 25)
    Public Const LVM_GETITEMTEXT As Integer = (LVM_FIRST + 45)
    Public Const LVM_GETHEADER As Integer = LVM_FIRST + 31
    Public Const WC_HEADERA As String = "SysHeader32"
    Public Const WC_HEADER As String = WC_HEADERA
    Public Const HDM_FIRST As Short = &H1200S '// Header messages
    Public Const HDM_GETITEMCOUNT As Integer = (HDM_FIRST + 0)
    Public Const HDM_ORDERTOINDEX As Integer = (HDM_FIRST + 15)
    Public Const PROCESS_QUERY_INFORMATION As Short = 1024
    Public Const PROCESS_VM_OPERATION As Short = &H8S
    Public Const PROCESS_VM_READ As Short = &H10S
    Public Const PROCESS_VM_WRITE As Short = &H20S
    Public Const STANDARD_RIGHTS_REQUIRED As Integer = &HF0000
    Public Const MAX_LVMSTRING As Integer = 255 '可根椐读取数据长度设置适当的数值
    Public Const MEM_COMMIT As Short = &H1000S
    Public Const MEM_RELEASE As Short = &H8000S
    Public Const PAGE_READWRITE As Short = &H4S
    Public Const LVIF_TEXT As Integer = &H1S
    Public Structure LV_ITEMA
        Dim mask As Integer
        Dim iItem As Integer
        Dim iSubItem As Integer
        Dim state As Integer
        Dim stateMask As Integer
        Dim pszText As Integer
        Dim cchTextMax As Integer
        Dim iImage As Integer
        Dim lParam As Integer
        Dim iIndent As Integer
    End Structure

    Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Integer, ByVal bInheritHandle As Integer, ByVal dwProcId As Integer) As Integer
    Private Declare Function VirtualAllocEx Lib "kernel32" (ByVal hProcess As Integer, ByVal lpAddress As Integer, ByVal dwSize As Integer, ByVal flAllocationType As Integer, ByVal flProtect As Integer) As Integer
    Private Declare Function VirtualFreeEx Lib "kernel32" (ByVal hProcess As Integer, ByVal lpAddress As Integer, ByVal dwSize As Integer, ByVal dwFreeType As Integer) As Integer


    Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As LV_ITEMA, ByVal nSize As Integer, ByVal lpNumberOfBytesWritten As Integer) As Integer

    Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Integer, ByVal lpBaseAddress As Object, ByRef lpBuffer As Object, ByVal nSize As Integer, ByVal lpNumberOfBytesWritten As Integer) As Integer


    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer




    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Integer) As Integer
    Private Declare Function GetCurrentProcessId Lib "kernel32" () As Integer
    Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
    Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Integer, ByVal hWnd2 As Integer, ByVal lpsz1 As String, ByVal lpsz2 As String) As Integer
    Public Declare Function GetWindowThreadProcessId Lib "user32" Alias "GetWindowThreadProcessId" (ByVal hwnd As Integer, ByRef lpdwProcessId As Integer) As Integer

   


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim lngHwnd As Integer
        Dim lngHwnd0 As Integer
        Dim lngHwnd1 As Integer
        Dim lngHeaderHwnd As Integer
        Dim lngPId As Integer
        Dim lngRows As Integer
        Dim lngCols As Integer
        Dim lngRow As Integer
        Dim lngCol As Integer
        Dim strItem As String

        lngHwnd = FindWindow("#32770", "Windows 任务管理器")
        lngHwnd0 = FindWindowEx(lngHwnd, 0, "#32770", "Applications") '获取任务管理器窗口句柄

        lngHwnd1 = FindWindowEx(lngHwnd0, 0, "SysListView32", "任务") '获取进程列表框句柄

        'lngHwnd0 = FindWindowEx(lngHwnd, 0, "WTWindow", "巅峰批量卡iPhone新版 V1.8")
        'lngHwnd1 = FindWindowEx(lngHwnd0, 0, "SysListView32", "")
        '第二个参数是 LVM_GETHEADER,获得LISTVIEW的HEADER句柄
        lngHeaderHwnd = SendMessage(lngHwnd1, LVM_GETHEADER, 0, 0)

        lngRows = SendMessage(lngHwnd1, LVM_GETITEMCOUNT, 0, 0) '获取ListView项目数
        Debug.Print("总行数是:" & lngRows)

        If lngHeaderHwnd > 0 Then
            lngCols = SendMessage(lngHeaderHwnd, HDM_GETITEMCOUNT, 0, 0) '获取ListView表头项目数
            Debug.Print("总列数是:" & lngCols)

        Else
            lngCols = 1
        End If

        GetWindowThreadProcessId(lngHwnd, lngPId) '获取与指定窗口关联在一起的一个进程和线程标识符ID

        Dim count As Integer



        Dim strBuffer() As Byte, pHandle As Integer, myItem() As LV_ITEMA, i As Integer, j As Integer
        Dim pStrBufferMemory As Integer, pMyItemMemory As Integer, result As Integer, tmpString As String
        Dim strLength As Integer



        ReDim strBuffer(MAX_LVMSTRING)

        pHandle = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, lngPId)

        ReDim myItem(lngCols)



        For i = 0 To lngRows - 1
            For j = 0 To lngCols
                pStrBufferMemory = VirtualAllocEx(pHandle, 0, MAX_LVMSTRING, MEM_COMMIT, PAGE_READWRITE)
                myItem(j).mask = LVIF_TEXT
                myItem(j).iSubItem = j
                myItem(j).pszText = pStrBufferMemory
                myItem(j).cchTextMax = MAX_LVMSTRING
                pMyItemMemory = VirtualAllocEx(pHandle, 0, Len(myItem(j)), MEM_COMMIT, PAGE_READWRITE)
                result = WriteProcessMemory(pHandle, pMyItemMemory, myItem(j), Len(myItem(j)), 0&)

                strLength = SendMessage(lngHwnd1, LVM_GETITEMTEXT, i, pMyItemMemory)
                If result = 0 Then
                    result = VirtualFreeEx(pHandle, pStrBufferMemory, 0, MEM_RELEASE)
                    result = VirtualFreeEx(pHandle, pMyItemMemory, 0, MEM_RELEASE)
                    Exit For
                End If
                result = ReadProcessMemory(pHandle, pStrBufferMemory, strBuffer(0), MAX_LVMSTRING, 0)
                result = ReadProcessMemory(pHandle, pMyItemMemory, myItem(j), Len(myItem(j)), 0)
                tmpString = StrConv(System.Text.Encoding.Default.GetString(strBuffer), 0)
              
                result = VirtualFreeEx(pHandle, pStrBufferMemory, 0, MEM_RELEASE)
                result = VirtualFreeEx(pHandle, pMyItemMemory, 0, MEM_RELEASE)
 
            Next


            
        Next

        result = CloseHandle(pHandle)
  
    End Sub


 






    
End Class

  

转载于:https://www.cnblogs.com/xiaoliao/p/10030390.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值