Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

[SOLUCIONADO] elementos de un form

Estas en el tema de elementos de un form en el foro de Visual Basic clásico en Foros del Web. hola como estan, lo que me pasa es que necesito sacar obtener los item de un listview, pero este list view esta en otra aplicacion. ...
  #1 (permalink)  
Antiguo 14/06/2011, 19:01
 
Fecha de Ingreso: julio-2008
Mensajes: 366
Antigüedad: 16 años, 3 meses
Puntos: 7
elementos de un form

hola como estan, lo que me pasa es que necesito sacar obtener los item de un listview, pero este list view esta en otra aplicacion.

hasta ahora puedo encontrar el hwnd de la ventana principal por medio de los procesos, pero no puedo sacar los hwnd de los elementos que tiene ese programa,
necesito su ayuda por fa....



Código vb:
Ver original
  1. 'Option Explicit
  2.  
  3. 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
  4.  
  5. Private Declare Function FindWindow _
  6.     Lib "user32" _
  7.     Alias "FindWindowA" ( _
  8.         ByVal lpClassName As String, _
  9.         ByVal lpWindowName As String) As Long
  10.  
  11. Private Declare Function FindWindowEx Lib "user32" _
  12.    Alias "FindWindowExA" _
  13.   (ByVal hWnd1 As Long, _
  14.    ByVal hWnd2 As Long, _
  15.    ByVal lpsz1 As String, _
  16.    ByVal lpsz2 As String) As Long
  17. 'Esta función Api devuelve un valor  Boolean indicando si la ventana es una ventana visible
  18. Private Declare Function IsWindowVisible _
  19.     Lib "user32" ( _
  20.         ByVal hwnd As Long) As Long
  21.  
  22. 'Esta función retorna el número de caracteres del caption de la ventana
  23. Private Declare Function GetWindowTextLength _
  24.     Lib "user32" _
  25.     Alias "GetWindowTextLengthA" ( _
  26.         ByVal hwnd As Long) As Long
  27.  
  28. 'Esta devuelve el texto. Se le pasa el hwnd de la ventana, un buffer donde se
  29. 'almacenará el texto devuelto, y el Lenght de la cadena en el último parámetro
  30. 'que obtuvimos con el Api GetWindowTextLength
  31. Private Declare Function GetWindowText _
  32.     Lib "user32" _
  33.     Alias "GetWindowTextA" ( _
  34.         ByVal hwnd As Long, _
  35.         ByVal lpString As String, _
  36.         ByVal cch As Long) As Long
  37.  
  38. 'Esta es la función Api que busca las ventanas y retorna su handle o Hwnd
  39. Private Declare Function GetWindow _
  40.     Lib "user32" ( _
  41.         ByVal hwnd As Long, _
  42.         ByVal wFlag As Long) As Long
  43.  
  44. 'Constantes para buscar las ventanas mediante el Api GetWindow
  45. Private Const GW_HWNDFIRST = 0&
  46. Private Const GW_HWNDNEXT = 2&
  47. Private Const GW_CHILD = 5&
  48.  
  49. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  50.  
  51. 'Procedimiento que lista las ventanas visibles de Windows
  52. Private Sub Listar()
  53.  
  54. Dim buf As Long, handle As Long, titulo As String, lenT As Long, ret As Long
  55.  
  56.     List1.Clear
  57.     'Obtenemos el Hwnd de la primera ventana, usando la constante GW_HWNDFIRST
  58.    handle = GetWindow(hwnd, GW_HWNDFIRST)
  59.  
  60.     'Este bucle va a recorrer todas las ventanas.
  61.    'cuando GetWindow devielva un 0, es por que no hay mas
  62.    Do While handle <> 0
  63.         'Tenemos que comprobar que la ventana es una de tipo visible
  64.        If IsWindowVisible(handle) Then
  65.             'Obtenemos el número de caracteres de la ventana
  66.            lenT = GetWindowTextLength(handle)
  67.             'si es el número anterior es mayor a 0
  68.            If lenT > 0 Then
  69.                 'Creamos un buffer. Este buffer tendrá el tamaño con la variable LenT
  70.                titulo = String$(lenT, 0)
  71.                 'Ahora recuperamos el texto de la ventana en el buffer que le enviamos
  72.                'y también debemos pasarle el Hwnd de dicha ventana
  73.                ret = GetWindowText(handle, titulo, lenT + 1)
  74.                 titulo$ = Left$(titulo, ret)
  75.                 If titulo = "CosmoCall Supervisor - DEPARTAMENTO SISTEMAS" Then
  76.                     Label3.Caption = titulo$
  77.                     Label4.Caption = handle
  78.                 End If
  79.                 'La agregamos al ListBox
  80.                List1.AddItem titulo$
  81.             End If
  82.         End If
  83.         'Buscamos con GetWindow la próxima ventana usando la constante GW_HWNDNEXT
  84.        handle = GetWindow(handle, GW_HWNDNEXT)
  85.     Loop
  86. End Sub
  87.  
  88. Private Sub Command1_Click()
  89.     'Llamamos a la función Listar
  90.    Call Listar
  91.     Text1.Text = Module1.DevolverTexto(459622)
  92.  
  93. End Sub


este es el .BAS

Código vb:
Ver original
  1. Private Const WM_GETTEXT = &HD
  2. Private Const WM_GETTEXTLENGTH = &HE
  3.  
  4. ' Declaración del Api SendMessage
  5. 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
  6.  
  7. Function DevolverTexto(ByVal Input_hWnd As Long) As String
  8.     Dim longitud As Long
  9.     longitud = SendMessage(Input_hWnd, WM_GETTEXTLENGTH, 0&, 0&)
  10.     If longitud Then
  11.         DevolverTexto = Space(longitud + 1)
  12.         Call SendMessage(Input_hWnd, WM_GETTEXT, ByVal longitud + 1, ByVal DevolverTexto)
  13.     End If
  14. End Function


con el .bas lo que hago es mandarle el hwnd de un textbox y este me regresa el texto de este, en mi caso el control que digo es un listview, ya que solo de vuelve una linea y no todo el contenido......

le juro que esta aplicacion no es para hacer mal a la gente es para el trabajo

Etiquetas: visualbasic
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:32.