Programación General > Visual Basic para principiantes

 Leer item de ComboBox de otra aplicación

(1/1)

Fran1946:
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 ---If ClassName = "combolbox" Then             CB_Item = SendMessage(hWnd, CB_GETCURSEL, 0, 0)             l = SendMessage(hWnd, CB_GETLBTEXTLEN, 0, 0)             El_Item = Space$(l + 1)             'La variable " el_Item " pasada a SendMessage retorna el dato del Item actual             l = SendMessage(hWnd, CB_GETLBTEXT, CB_Item, ByVal El_Item)             Text1.Text=El_Item     end if 
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:
Despues de muchas pruebas, lo he solucionado.

Jimbenit:

--- Cita de: "F_rank_cisco" ---Despues de muchas pruebas, lo he solucionado.
--- Fin de la cita ---
podrias decir como lo hiciste ?

F_rank_cisco:
Este no vale

F_rank_cisco:
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 ---     Public Declare Function GetComboBoxInfo Lib "user32" _              (ByVal hwndCombo As Long, _              CBInfo As COMBOBOXINFO) As Long     Private Type RECT          Left As Long          Top As Long          Right As Long          Bottom As Long    End Type     Public Type POINTAPI         x As Long         y As Long    End Type       Public CBI As COMBOBOXINFO      Public Type COMBOBOXINFO            cbSize As Long            rcItem As RECT            rcButton As RECT            stateButton As Long            hwndCombo As Long            hwndEdit As Long            hwndList As Long    End Type         Public n_Items As Long, Item_n As Long        Public Items As String        Public El_Item As String        Public length As Long        Public Handle as Long     'hWnd de la ventana del combo      ' Mensajes y valores  para los ComboBox     Public Const CB_GETCOUNT = &H146     Public Const CB_GETCURSEL = &H147     Public Const CB_GETLBTEXT = &H148     Public Const CB_GETLBTEXTLEN = &H149     Public Cor As POINTAPI,Ret as Long    Public hParent As Long, ClassName As String Private Sub Timer1_Timer()    'Obtiene la coordenada del Mouse    Ret = GetCursorPos(Cor)    'Recuperamos el HWND de la ventana asociada a esa coordenada    Handle = WindowFromPoint(Cor.x, Cor.y)    'Handle de la ventana padre    hParent = GetParent(Handle)    'Llenamos un Buffer    ClassName = Space$(128)    'Recupera el Classname y lo devuelve en el Buffer    Ret = GetClassName(Handle, ClassName, 128)         'Extraemos el nombre de la clase    ClassName = LCase(Left$(ClassName, Ret))        ' Cantidad de caracteres del texto    Caption_Ventana = String(GetWindowTextLength(Handle), Chr$(0))    'Retorna el caption    Call GetWindowText(Handle, Caption_Ventana, 100)    'Obtiene la coordenada del Mouse de la ventana activa    Call ScreenToClient(Handle, Cor)            'Esta es la rutina que lee el combobox     If ClassName = "combolbox" Then        CBI.cbSize = Len(CBI)        Call GetComboBoxInfo(Handle, CBI)        Item_n = SendMessage(CBI.hwndEdit, CB_GETCURSEL, 0, 0)        length = SendMessage(CBI.hwndEdit, CB_GETLBTEXTLEN, Item_n, 0)        El_Item = Space$(length + 1)        ' La variable " el_Item " pasada a SendMessage retorna el dato del Item actual        length = SendMessage(CBI.hwndEdit, CB_GETLBTEXT, Item_n, ByVal El_Item)        El_Item = Left(El_Item, Len(El_Item) - 1)    End SubEnd Sub 
Las otras declaraciones que figuran no las pongo por que son de uso común.

Navegación

[0] Índice de Mensajes

Ir a la versión completa