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
'Option Explicit 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 Private Declare Function FindWindow _ Lib "user32" _ Alias "FindWindowA" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long Private Declare Function FindWindowEx Lib "user32" _ Alias "FindWindowExA" _ (ByVal hWnd1 As Long, _ ByVal hWnd2 As Long, _ ByVal lpsz1 As String, _ ByVal lpsz2 As String) As Long 'Esta función Api devuelve un valor Boolean indicando si la ventana es una ventana visible Private Declare Function IsWindowVisible _ Lib "user32" ( _ ByVal hwnd As Long) As Long 'Esta función retorna el número de caracteres del caption de la ventana Private Declare Function GetWindowTextLength _ Lib "user32" _ Alias "GetWindowTextLengthA" ( _ ByVal hwnd As Long) As Long 'Esta devuelve el texto. Se le pasa el hwnd de la ventana, un buffer donde se 'almacenará el texto devuelto, y el Lenght de la cadena en el último parámetro 'que obtuvimos con el Api GetWindowTextLength Private Declare Function GetWindowText _ Lib "user32" _ Alias "GetWindowTextA" ( _ ByVal hwnd As Long, _ ByVal lpString As String, _ ByVal cch As Long) As Long 'Esta es la función Api que busca las ventanas y retorna su handle o Hwnd Private Declare Function GetWindow _ Lib "user32" ( _ ByVal hwnd As Long, _ ByVal wFlag As Long) As Long 'Constantes para buscar las ventanas mediante el Api GetWindow Private Const GW_HWNDFIRST = 0& Private Const GW_HWNDNEXT = 2& Private Const GW_CHILD = 5& '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'Procedimiento que lista las ventanas visibles de Windows Private Sub Listar() Dim buf As Long, handle As Long, titulo As String, lenT As Long, ret As Long List1.Clear 'Obtenemos el Hwnd de la primera ventana, usando la constante GW_HWNDFIRST handle = GetWindow(hwnd, GW_HWNDFIRST) 'Este bucle va a recorrer todas las ventanas. 'cuando GetWindow devielva un 0, es por que no hay mas Do While handle <> 0 'Tenemos que comprobar que la ventana es una de tipo visible If IsWindowVisible(handle) Then 'Obtenemos el número de caracteres de la ventana lenT = GetWindowTextLength(handle) 'si es el número anterior es mayor a 0 If lenT > 0 Then 'Creamos un buffer. Este buffer tendrá el tamaño con la variable LenT titulo = String$(lenT, 0) 'Ahora recuperamos el texto de la ventana en el buffer que le enviamos 'y también debemos pasarle el Hwnd de dicha ventana ret = GetWindowText(handle, titulo, lenT + 1) titulo$ = Left$(titulo, ret) If titulo = "CosmoCall Supervisor - DEPARTAMENTO SISTEMAS" Then Label3.Caption = titulo$ Label4.Caption = handle End If 'La agregamos al ListBox List1.AddItem titulo$ End If End If 'Buscamos con GetWindow la próxima ventana usando la constante GW_HWNDNEXT handle = GetWindow(handle, GW_HWNDNEXT) Loop End Sub Private Sub Command1_Click() 'Llamamos a la función Listar Call Listar Text1.Text = Module1.DevolverTexto(459622) End Sub
este es el .BAS
Código vb:
Ver original
Private Const WM_GETTEXT = &HD Private Const WM_GETTEXTLENGTH = &HE ' Declaración del 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 Function DevolverTexto(ByVal Input_hWnd As Long) As String Dim longitud As Long longitud = SendMessage(Input_hWnd, WM_GETTEXTLENGTH, 0&, 0&) If longitud Then DevolverTexto = Space(longitud + 1) Call SendMessage(Input_hWnd, WM_GETTEXT, ByVal longitud + 1, ByVal DevolverTexto) End If 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