Получить SysListView32 из иностранного приложения в Excel (64-битная система) - PullRequest
0 голосов
/ 14 декабря 2018

В 64-битной системе (есть известный дескриптор SysListView32).Я хочу перенести элементы этого списка на лист Excel, но этого не произошло.У меня в руке следующие коды, но я не получаю необходимые значения.Я нашел и попробовал много разных кодов в Интернете, ни один из них не был успешным.В комментариях, сделанных на различных форумах, написано, что в 64-битных элементах SysListView32 не реальные, а виртуальные, и список невозможно прочитать (как я понимаю).Я был бы признателен, если бы это могло помочь.Большое вам спасибо

Option Explicit
Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal Hwnd As LongPtr, ByVal wMsg As LongPtr, ByVal wParam As LongPtr, lParam As Any) As Long

Private Const LVM_FIRST = &H1000
Private Const LVM_GETITEMCOUNT = (LVM_FIRST + 4)
Private Const LVM_GETITEM = (LVM_FIRST + 5)
Public Const LVM_GETITEMTEXT As Long = (LVM_FIRST + 20)

Private Sub Command1_Click()
    Dim A, result      As Long
    Dim b           As Long
    Dim Hwnd    As Long
    Dim lvi     As LVITEM
    Hwnd = 395682 'SysListView32 handle'i
    b = SendMessage(Hwnd, LVM_GETITEMCOUNT, 0, 0)
    b = b - 1
    For A = 0 To b - 1
        lvi.mask = LVIF_TEXT
        lvi.iItem = A
        ListView_GetItem Hwnd, lvi
        Cells(A + 1, 1) = lvi.pszText
        Cells(A + 1, 2) = SendMessage(Hwnd, LVM_GETITEMTEXT, A, lvi)
        Cells(A + 1, 3) = LVM_GETITEMTEXT
    Next
End Sub

Results:
b=90 (SysListView32 item counting is working)
All of Column 2 cells = 0 '<= my goal, but no zero
All of Column 3 cells = 4116 'what is this
...