• Domingo 22 de Diciembre de 2024, 13:29

Autor Tema:  Leer item de ComboBox de otra aplicación  (Leído 2893 veces)

Fran1946

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Leer item de ComboBox de otra aplicación
« en: Jueves 5 de Agosto de 2010, 20:13 »
0
Hola a todos, soy nuevo en el foro, a ver si alguien me puede ayudar.

Estoy haciendo una aplicación en VB6, que lee algunos datos de otra aplicación externa mientras se esta ejecutando.
Para que esté más claro el problema, llamaré a mi aplicación "AplicaciónA"
y "AplicaciónB" a la externa de la que quiero leer datos.

Los datos que no se leer, de la aplicación "AplicaciónB", es el nombre del item cuando se clica de un ComboBox.

Tengo funcionando todas las Apis necesarias para acceder a la "AplicaciónB".
Conozco el hWnd, el nombre de la Clase, el Caption, y las coordenadas de todas las ventanas de la "AplicaciónB".

Pongo un ejemplo, para que se entienda mejor:

1º - Al clicar en un item de un ComboBox, con nombre por ejemplo "Datos A", necesito poder leer y poner ese nombre "Datos A", en un TexBox de mi "AplicaciónA"

Tengo un Timer, que me entrega el hWnd, el nombre de la Clase (que siempre se llama "combolbox", del ComboBox de la "AplicaciónB" que quiero leer.

Este es el código que uso:

Conozco hWnd, y tengo las variables y Constantes declaradas.
 
       
Código: Visual Basic
  1. If ClassName = "combolbox" Then
  2.              CB_Item = SendMessage(hWnd, CB_GETCURSEL, 0, 0)
  3.              l = SendMessage(hWnd, CB_GETLBTEXTLEN, 0, 0)
  4.              El_Item = Space$(l + 1)
  5.              'La variable " el_Item " pasada a SendMessage retorna el dato del Item actual
  6.              l = SendMessage(hWnd, CB_GETLBTEXT, CB_Item, ByVal El_Item)
  7.              Text1.Text=El_Item
  8.      end if
  9.  

Pero no lee nada, que hago mal.
He leido que los ComboBox, son realmente tres controles, Un Combo (El botón triangulito), Un Edit (el título) y Un button (cada nombre de los items), y este útimo, button (cada nombre de los items), es el que quiero poder leer,y ahí me pierdo.


Un saludo y espero que alguien me pueda ayudar.

F_rank_cisco

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Leer item de ComboBox de otra aplicación
« Respuesta #1 en: Miércoles 18 de Agosto de 2010, 20:34 »
0
Despues de muchas pruebas, lo he solucionado.

Jimbenit

  • Miembro MUY activo
  • ***
  • Mensajes: 269
  • Nacionalidad: co
    • Ver Perfil
    • http://ingenieriacivil.foroactivo.com
Re: Leer item de ComboBox de otra aplicación
« Respuesta #2 en: Jueves 19 de Agosto de 2010, 17:50 »
0
Cita de: "F_rank_cisco"
Despues de muchas pruebas, lo he solucionado.
podrias decir como lo hiciste ?


Yo quiero mucho a Toph ---> Mi Web]http://ingenieriacivil.foroactivo.com[/url]

F_rank_cisco

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Leer item de ComboBox de otra aplicación
« Respuesta #3 en: Jueves 19 de Agosto de 2010, 18:51 »
0
Este no vale
« última modificación: Jueves 19 de Agosto de 2010, 19:17 por F_rank_cisco »

F_rank_cisco

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Leer item de ComboBox de otra aplicación
« Respuesta #4 en: Jueves 19 de Agosto de 2010, 19:17 »
0
Si claro, pero como no obtuve respuestas creia que esto no le interesaba a nadie, a pesar de que me ha costado mucho conseguirlo a base de prueba/error.

Código: Visual Basic
  1.      Public Declare Function GetComboBoxInfo Lib "user32" _
  2.               (ByVal hwndCombo As Long, _
  3.               CBInfo As COMBOBOXINFO) As Long
  4.  
  5.     Private Type RECT
  6.           Left As Long
  7.           Top As Long
  8.           Right As Long
  9.           Bottom As Long
  10.     End Type
  11.  
  12.     Public Type POINTAPI
  13.          x As Long
  14.          y As Long
  15.     End Type
  16.  
  17.       Public CBI As COMBOBOXINFO
  18.       Public Type COMBOBOXINFO
  19.             cbSize As Long
  20.             rcItem As RECT
  21.             rcButton As RECT
  22.             stateButton As Long
  23.             hwndCombo As Long
  24.             hwndEdit As Long
  25.             hwndList As Long
  26.     End Type
  27.  
  28.         Public n_Items As Long, Item_n As Long
  29.         Public Items As String
  30.         Public El_Item As String
  31.         Public length As Long
  32.         Public Handle as Long     'hWnd de la ventana del combo
  33.  
  34.      ' Mensajes y valores  para los ComboBox
  35.      Public Const CB_GETCOUNT = &H146
  36.      Public Const CB_GETCURSEL = &H147
  37.      Public Const CB_GETLBTEXT = &H148
  38.      Public Const CB_GETLBTEXTLEN = &H149
  39.  
  40.     Public Cor As POINTAPI,Ret as Long
  41.     Public hParent As Long, ClassName As String
  42.  
  43. Private Sub Timer1_Timer()
  44.     'Obtiene la coordenada del Mouse
  45.     Ret = GetCursorPos(Cor)
  46.     'Recuperamos el HWND de la ventana asociada a esa coordenada
  47.     Handle = WindowFromPoint(Cor.x, Cor.y)
  48.     'Handle de la ventana padre
  49.     hParent = GetParent(Handle)
  50.     'Llenamos un Buffer
  51.     ClassName = Space$(128)
  52.     'Recupera el Classname y lo devuelve en el Buffer
  53.     Ret = GetClassName(Handle, ClassName, 128)    
  54.  
  55.     'Extraemos el nombre de la clase
  56.     ClassName = LCase(Left$(ClassName, Ret))
  57.    
  58.     ' Cantidad de caracteres del texto
  59.     Caption_Ventana = String(GetWindowTextLength(Handle), Chr$(0))
  60.     'Retorna el caption
  61.     Call GetWindowText(Handle, Caption_Ventana, 100)
  62.     'Obtiene la coordenada del Mouse de la ventana activa
  63.     Call ScreenToClient(Handle, Cor)
  64.        
  65.     'Esta es la rutina que lee el combobox
  66.      If ClassName = "combolbox" Then
  67.         CBI.cbSize = Len(CBI)
  68.         Call GetComboBoxInfo(Handle, CBI)
  69.         Item_n = SendMessage(CBI.hwndEdit, CB_GETCURSEL, 0, 0)
  70.         length = SendMessage(CBI.hwndEdit, CB_GETLBTEXTLEN, Item_n, 0)
  71.         El_Item = Space$(length + 1)
  72.         ' La variable " el_Item " pasada a SendMessage retorna el dato del Item actual
  73.         length = SendMessage(CBI.hwndEdit, CB_GETLBTEXT, Item_n, ByVal El_Item)
  74.         El_Item = Left(El_Item, Len(El_Item) - 1)
  75.     End Sub
  76. End Sub
  77.  

Las otras declaraciones que figuran no las pongo por que son de uso común.