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
Ir a la versión completa