午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

如何通過句柄獲取外部程序的窗口的內容

 dinghj 2017-04-13
Option Explicit
'常數(shù)申明
Public Const LVM_FIRST As Long = &H1000
Public Const LVM_GETHEADER As Long = LVM_FIRST + 31
Public Const LVM_GETITEMCOUNT As Long = LVM_FIRST + 4
Public Const LVM_GETITEMTEXT As Long = LVM_FIRST + 45
Public Const HDM_FIRST As Long = &H1200
Public Const HDM_GETITEMCOUNT As Long = (HDM_FIRST + 0)
Public Const PROCESS_VM_OPERATION As Long = &H8
Public Const PROCESS_VM_READ As Long = &H10
Public Const PROCESS_VM_WRITE As Long = &H20
Public Const MAX_LVMSTRING As Long = 255
Public Const MEM_COMMIT As Long = &H1000
Public Const MEM_RELEASE As Long = &H8000&
Public Const PAGE_READWRITE As Long = &H4
Public Const LVIF_TEXT As Long = &H1
'類型申明
Public Type LV_ITEMA
    mask        As Long
    iItem        As Long
    iSubItem    As Long
    State        As Long
    stateMask    As Long
    pszText      As Long
    cchTextMax  As Long
End Type
'API申明
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As LongByVal bInheritHandle As LongByVal dwProcId As LongAs Long '打開進程
Public Declare Function VirtualAllocEx Lib "kernel32" (ByVal hProcess As LongByVal lpAddress As LongByVal dwSize As LongByVal flAllocationType As Long, _
                        ByVal flProtect As LongAs Long '獲取內存空間
Public Declare Function VirtualFreeEx Lib "kernel32" (ByVal hProcess As LongByVal lpAddress As LongByVal dwSize As LongByVal dwFreeType As LongAs Long '釋放內存空間
Public Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As LongByVal lpBaseAddress As LongByRef lpBuffer As LV_ITEMA, ByVal nSize As Long, _
                        lpNumberOfBytesWritten As LongAs Long '向內存寫數(shù)據(jù)
Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As LongByVal lpBaseAddress As LongByRef lpBuffer As Any, ByVal nSize As Long, _
                        lpNumberOfBytesWritten As LongAs Long '向內存讀數(shù)據(jù)
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As LongByVal wMsg As LongByVal wParam As LongByRef lParam As Any) As Long '發(fā)送消息
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As LongAs Long '關閉進程
Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As LongAs Long '獲得進程ID
Public Function GetListViewTextArray(ByVal hWindow As LongAs String()
  Dim myItem()           As LV_ITEMA
  Dim PHandle            As Long
  Dim ProcessId          As Long
  Dim PStrBufferMemory   As Long
  Dim PMyItemMemory      As Long
  Dim StrBuffer(MAX_LVMSTRING) As Byte
  Dim TmpString          As String
  Dim Ih As Long, J As Long, HCount As Long
  Dim StrArr() As String, ItemString As String
  Dim Ji As Long, MyItemLength() As Long
    GetWindowThreadProcessId hWindow, ProcessId
    HCount = SendMessage(hWindow, LVM_GETHEADER, 0, 0) '獲取列數(shù)
    If HCount > 0 Then
        HCount = SendMessage(HCount, HDM_GETITEMCOUNT, 0, 0) - 1
      Else 'NOT HCOUNT...
        HCount = 0
    End If
    PHandle = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, 0, ProcessId)
    ReDim myItem(HCount)
    ReDim MyItemLength(HCount)
    PStrBufferMemory = VirtualAllocEx(PHandle, 0, MAX_LVMSTRING, MEM_COMMIT, PAGE_READWRITE)
    PMyItemMemory = VirtualAllocEx(PHandle, 0, MAX_LVMSTRING, MEM_COMMIT, PAGE_READWRITE)
    Ji = SendMessage(hWindow, LVM_GETITEMCOUNT, 0, 0) - 1
    On Error GoTo err1
    ReDim StrArr(Ji)
     
    For Ih = 0 To HCount
        myItem(Ih).mask = LVIF_TEXT
        myItem(Ih).iSubItem = Ih
        myItem(Ih).pszText = PStrBufferMemory
        myItem(Ih).cchTextMax = MAX_LVMSTRING
        MyItemLength(Ih) = Len(myItem(Ih))
    Next Ih
     
    For J = 0 To Ji
        ItemString = ""
        For Ih = 0 To HCount
            WriteProcessMemory PHandle, PMyItemMemory, myItem(Ih), MyItemLength(Ih), 0
            If SendMessage(hWindow, LVM_GETITEMTEXT, J, ByVal PMyItemMemory) > 0 Then
                ReadProcessMemory PHandle, PStrBufferMemory, StrBuffer(0), MAX_LVMSTRING, 0
                TmpString = StrConv(StrBuffer, vbUnicode)
                TmpString = Left(TmpString, InStr(TmpString, vbNullChar) - 1)
                ItemString = ItemString & TmpString & Chr(9) ' Chr$(32)
            End If
        Next Ih
        If ItemString <> "" Then
            StrArr(J) = Left(ItemString, Len(ItemString) - 1)
        End If
    Next J
     
    VirtualFreeEx PHandle, PMyItemMemory, 0, MEM_RELEASE
    VirtualFreeEx PHandle, PStrBufferMemory, 0, MEM_RELEASE
    CloseHandle (PHandle)
    ItemString = ""
    GetListViewTextArray = StrArr
     
    Exit Function
err1:
    MsgBox "不是Listview類吧?", vbInformation
End Function
上面是vb6的模塊,你對照轉換下

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約