Autor
|
Tema: copiar datos de listview externo con sendmessage ? (Leído 3,021 veces)
|
Tengu
Desconectado
Mensajes: 330
2+1 = 1 , despues de todo , tdo es relativo
|
mi duda es la siguiente lo que quiero hacer es seleccionar una ventana externa teniendo su hwnd y apartir de alli sacar todos los controles que tenga, ya sean frames, labels, textbox, listbox, listview o cualquier tipo de control que pudiera contener strings. para luego con sendmessage extraer dichos datos a mi programa. Ahora , yo ya logre conseguir el hwnd de un listview de esta ventana externa, pero, como seria la forma correcta para copiar sus datos a un listview de mi aplicacion?? Ej: para hacerlo con un listbox ajeno seria segun encontre por alli: 'Declaración Api SendMessage Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ lParam As Any) As Long ' Mensajes y valores para los listbox Private Const LB_GETCOUNT As Long = &H18B Private Const LB_GETTEXTLEN As Long = &H18A Private Const LB_GETTEXT As Long = &H189
Private Sub Command1_Click() Dim n_Items As Long Dim i As Integer Dim Items As String Dim El_Item As String Dim length As Long 'Almacena la cantidad de Items n_Items = SendMessage("262583", LB_GETCOUNT, 0, 0) 'Recorre a la cantidad de elementos para obtener los valores For i = 0 To n_Items - 1 ' Buffer length = SendMessage(262583, LB_GETTEXTLEN, i, 0) ' 262583 SERIA EL HWND DEL LITBOX AJENO El_Item = Space$(length + 1) ' La variable " el_Item " pasada a SendMessage _ retorna el dato del Item actual length = SendMessage(262583, LB_GETTEXT, i, ByVal El_Item) Items = Items & Replace(El_Item, Chr(0), vbNullString) & vbCrLf Next i 'Visualiza todos los items del ListBox MsgBox Items, vbInformation End Sub Alguiwen sabria adaptar esto a listview??, osea como seria la manera correcta de usar sendmessage con listview en esta operacion?
|
|
|
En línea
|
Encuentros por Video y Chat !!
|
|
|
Dessa
Desconectado
Mensajes: 624
|
A ver si te sirve este MODULO Option Explicit
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Private Declare Function VirtualAllocEx Lib "kernel32" (ByVal hProcess As Long, ByVal lpAddress As Long, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long Private Declare Function VirtualFreeEx Lib "kernel32" (ByVal hProcess As Long, lpAddress As Any, ByVal dwSize As Long, ByVal dwFreeType As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Public Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Public Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private Type LVITEM mask As Long iItem As Long iSubitem As Long state As Long stateMask As Long pszText As Long cchTextMax As Long iImage As Long lParam As Long iIndent As Long End Type
Private Const LVIF_IMAGE = &H2 Private Const LVIF_TEXT = &H1 Private Const LVM_FIRST As Long = &H1000 Private Const LVM_GETITEM As Long = (LVM_FIRST + 5) Private Const LVM_GETITEMCOUNT = (LVM_FIRST + 4) Private Const LVM_GETITEMSTATE = (LVM_FIRST + 44) Private Const LVIS_SELECTED = &H2 Private Const LVM_SETITEMSTATE = (LVM_FIRST + 43) Private Const LVIF_STATE = &H8& Private Const PAGE_READWRITE = &H4& Private Const MEM_RESERVE = &H2000 Private Const MEM_COMMIT = &H1000 Private Const MEM_RELEASE = &H8000 Private Const PROCESS_VM_OPERATION = &H8 Private Const PROCESS_VM_READ = &H10 Private Const PROCESS_VM_WRITE = &H20
Private hWndlvw As Long
Function ListViewGetText(ByVal hwnd As Long, ByVal iSubitem As Integer, ByVal iItem As Integer) As String Dim lngProcID As Long, lngProcHandle As Long Dim typLvItem As LVITEM, strLvItem As String Dim lngVarPtr1 As Long, lngVarPtr2 As Long Dim lngMemVar1 As Long, lngMemVar2 As Long Dim lngMemLen1 As Long, lngMemLen2 As Long Call GetWindowThreadProcessId(hwnd, lngProcID) If lngProcID <> 0 Then lngProcHandle = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, lngProcID) If lngProcHandle <> 0 Then strLvItem = String(255, vbNullChar) lngVarPtr1 = StrPtr(strLvItem) lngVarPtr2 = VarPtr(typLvItem) lngMemLen1 = LenB(strLvItem) lngMemLen2 = LenB(typLvItem) lngMemVar1 = VirtualAllocEx(lngProcHandle, 0, lngMemLen1, MEM_RESERVE Or MEM_COMMIT, PAGE_READWRITE) lngMemVar2 = VirtualAllocEx(lngProcHandle, 0, lngMemLen2, MEM_RESERVE Or MEM_COMMIT, PAGE_READWRITE) With typLvItem .cchTextMax = 255 .iItem = iItem .iSubitem = iSubitem .mask = LVIF_TEXT .pszText = lngMemVar1 End With Call WriteProcessMemory(lngProcHandle, ByVal lngMemVar1, ByVal lngVarPtr1, lngMemLen1, 0) Call WriteProcessMemory(lngProcHandle, ByVal lngMemVar2, ByVal lngVarPtr2, lngMemLen2, 0) Call SendMessage(hwnd, LVM_GETITEM, ByVal 0, ByVal lngMemVar2) Call ReadProcessMemory(lngProcHandle, ByVal lngMemVar1, ByVal lngVarPtr1, lngMemLen1, 0) strLvItem = StrConv(strLvItem, vbUnicode) strLvItem = Left(strLvItem, InStr(1, strLvItem, vbNullChar) - 1) ListViewGetText = strLvItem Call VirtualFreeEx(lngProcHandle, ByVal lngMemVar1, lngMemLen1, MEM_RELEASE) Call VirtualFreeEx(lngProcHandle, ByVal lngMemVar2, lngMemLen2, MEM_RELEASE) Call CloseHandle(lngProcHandle) End If End If End Function
Public Function SelectedItem(ByVal hwnd As Long, ItemPos As Long) Dim lProcID As Long Dim hProc As Long Dim lxprocLVITEM As Long Dim LV_ITEM As LVITEM GetWindowThreadProcessId hwnd, lProcID If lProcID <> 0 Then hProc = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, lProcID) ' makwe sure we have read write permissions in the process space If hProc <> 0 Then lxprocLVITEM = VirtualAllocEx(hProc, 0, LenB(LV_ITEM), MEM_RESERVE Or MEM_COMMIT, PAGE_READWRITE) ' Grab enough memory in the other procedure's space to hold our LV_ITEM LV_ITEM.mask = LVIF_STATE LV_ITEM.state = True LV_ITEM.stateMask = LVIS_SELECTED WriteProcessMemory hProc, ByVal lxprocLVITEM, ByVal VarPtr(LV_ITEM), LenB(LV_ITEM), 0 SendMessage hwnd, LVM_SETITEMSTATE, ItemPos, ByVal lxprocLVITEM VirtualFreeEx hProc, ByVal lxprocLVITEM, LenB(LV_ITEM), MEM_RELEASE CloseHandle hProc End If End If End Function
Function GetListViewCount(ByVal hwnd As Long) As Long GetListViewCount = SendMessage(hwnd, LVM_GETITEMCOUNT, 0, ByVal 0) End Function
Function GetItemSelected(hwnd As Long) As Long Dim i As Long, Index As Long For i = 1 To GetListViewCount(hwnd) Index = SendMessage(hwnd, LVM_GETITEMSTATE, i - 1, ByVal LVIS_SELECTED) If Index > 0 Then GetItemSelected = i Exit For End If Next End Function
|
|
|
En línea
|
Adrian Desanti
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Recuperar Datos Server COD4 y poner en ListView (Source)
Programación Visual Basic
|
enterariel
|
5
|
4,634
|
10 Enero 2011, 08:47 am
por Sancho.Mazorka
|
|
|
Clic en imagebox externo sendmessage
« 1 2 »
Programación Visual Basic
|
Cromatico
|
15
|
6,886
|
9 Noviembre 2012, 00:03 am
por Cromatico
|
|
|
ListView - Winsock - Datos VB 6
Análisis y Diseño de Malware
|
Enemy
|
0
|
1,887
|
28 Julio 2014, 03:26 am
por Enemy
|
|
|
Copiar disco externo en un backup
Seguridad
|
Zedmix
|
3
|
3,746
|
15 Junio 2016, 09:06 am
por Zedmix
|
|
|
Android - Componente ListView (grabar sus datos con la clase SharedPreferences)
Java
|
TickTack
|
1
|
1,901
|
7 Marzo 2019, 00:46 am
por srWhiteSkull
|
|