Hallo Jungs,
nachdem das Thema ja wirklich interessant ist und ich mich eine Weile damit beschäftig habe möchte ich mal das Ergebnis posten.
Ich möchte eine Fremdanwendung steuern und dazu informationen aus einem SysListView32 Element auslesen.
Das normale Sendmessage geht dabei nicht. Man verwendet Cross-Process Data Extraction auch SharedMemory
Ich habe mal das Beispielprojekt auf meinen Server gelegt. Wer interesse hat kann ja mal einen Bilck drauf werfen.
Ich probiere z.Z. mit verschiedenen Techinken und habe schon einige, bei denen es funktioniert.
Mein Problem:
Es funktionier mit den meisten Anwendungen - jedoch nicht mit der auf die ich Zugreifen möchte (WinMX)
So funktioniert es ....
Public Function GetLVWLabel(lHwnD As Long, lNum As Long) As String
Dim pid As Long, tid As Long
Dim hProcess As Long
Dim lpSysSharedA As Long, dwSizeI As Long
Dim lpSysSharedB As Long, dwSizeT As Long
Dim hFileMappingA As Long
Dim hFileMappingB As Long
Dim lWritten As Long
Dim LV As LV_ITEM
Dim LT As LV_TEXT
LV.cchTextMax = 800
dwSizeI = Len(LV)
dwSizeT = Len(LT)
tid = GetWindowThreadProcessId(lHwnD, pid)
If IsWindowsNT Then
lpSysSharedA = GetMemSharedNT(pid, dwSizeI, hProcess)
lpSysSharedB = GetMemSharedNT(pid, dwSizeT, hProcess)
With LV
.mask = LVIF_TEXT
.lpszText = lpSysSharedB
.cchTextMax = 80
.iItem = lNum
End With
WriteProcessMemory hProcess, ByVal lpSysSharedA, LV, dwSizeI, _
lWritten
WriteProcessMemory hProcess, ByVal lpSysSharedB, LT, dwSizeT, _
lWritten
SendMessage lHwnD, LVM_GETITEMW, 0, ByVal lpSysSharedA
ReadProcessMemory hProcess, ByVal lpSysSharedB, LT, dwSizeT, _
lWritten
GetLVWLabel = TrimNull(StrConv(LT.sItemText, vbFromUnicode))
FreeMemSharedNT hProcess, lpSysSharedA, dwSizeI
FreeMemSharedNT hProcess, lpSysSharedB, dwSizeT
Else
lpSysSharedA = GetMemShared95(dwSizeI, hFileMappingA)
lpSysSharedB = GetMemShared95(dwSizeT, hFileMappingB)
LV.lpszText = lpSysSharedB
CopyMemory ByVal lpSysSharedA, LV, dwSizeI
CopyMemory ByVal lpSysSharedB, LT, dwSizeT
SendMessage lHwnD, LVM_GETITEMTEXTA, lNum, ByVal lpSysSharedA
CopyMemory LT, ByVal lpSysSharedB, dwSizeT
GetLVWLabel = TrimNull(LT.sItemText)
FreeMemShared95 hFileMappingA, lpSysSharedA
FreeMemShared95 hFileMappingB, lpSysSharedB
End If
End Function Treeview.zip
Jojo |