Obtener el identificador de una segunda ventana hija

Iniciado por lobo3072, 12 Julio 2013, 00:44 AM

0 Miembros y 1 Visitante están viendo este tema.

lobo3072

hola
mi problema es el siguiente esto armando una aplicación en visual basic para controlar otro programa ccleaner y para eso necesito enviar un clic al botón analizar del ccleaner para eso uso hWndMain = FindWindow("PiriformCCleaner", "Piriform CCleaner")para obtener el identificador de la ventana padre del programa, el problema surge cuando necesito obtener el identificador de la segunda ventana hija que sería "#32770 (Cuadro de diálogo)" (FindWindowEx no me serviría por que iría a la primer ventana hija ósea que iría a "ScrollBar") una vez encontrado el identificador de la segunda ventana hija, tendría que buscar dentro de la misma  el identificador de la ventana "&Analizar" una vez encontrado el mismo utilizaría SendMessage(vHijo1, BM_CLICK, 0, vbNullString)para enviar el clic al botón.
Ya he probado utilizando GetWindow(hWndMain, GW_CHILD), GetWindow(hWndMain GW_HWNDNEXT), GetNextWindow, EnumChildWindows pero sin ningún resultado útil.

Agradezco cualquier información que puedan darme.

pd: quise insertar en el foro una imagen del spy++ para que se entienda mejor la pregunta pero no pude, como se hace?

raul338

sube la imagine a un hosting de imagenees (tinypic, i.elhacker.net por ejemplo) y pega el link presionando en el boton cuando contestes




No te sirve el ccleaner en modo consola?  :xD




Seguro que con FindWindowEx no funciona? (encontrando en cascada como en el Spy++)

lobo3072

Hola raul338  gracias por contestar tan rápido, creo que ya entendí como colocar una imagen en el foro. Bueno con respecto al ccleaner es un programa X que elegí para hacer la pregunta, mi verdadera intención es hacer una aplicación que instale setups en forma totalmente automáticamente ósea que aparezca un formulario con varios checkboxs de cada uno de los programas, uno selecciona los programas que quiere instalar aprieta un botón y este instala uno tras otro, para eso tengo que ser capaz de acceder a todas las ventanas de cada uno de los setups e ir enviando clic a cada uno de los botones de los mismos y FindWindowEx sirve en los casos en los que necesito el identificador de la primer ventana hija, pero no me sirve para la segunda ventana hija, porque FindWindowEx siempre va a la primera. Una vez que pueda enviarle clic al botón analizar de ccleaner aplicaría lo mismo para el verdadero proyecto.

Bueno acá les dejo la imagen para que entiendan mejor a donde quiero ir.



Salu2

Dessa

#3


Option Explicit


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

Private Sub Command1_Click()

Dim hWndMain As Long
Dim hWndChild As Long
Dim hWndAnalizar As Long

hWndMain = FindWindow("PiriformCCleaner", "Piriform CCleaner")


If hWndMain = 0 Then
  MsgBox "Ccleaner sin Ejecutar"
Else
  hWndChild = FindWindowEx(hWndMain, 0, "#32770", vbNullString)
  hWndAnalizar = FindWindowEx(hWndChild, 0, "Button", "&Analizar")

  If hWndAnalizar = 0 Then
    MsgBox "La Opcion Limpiador no está Seleccionada"
  Else
    MsgBox hWndAnalizar
  End If
End If

End Sub




Adrian Desanti

lobo3072

Hola ,bueno quería comentarles que ya probé con el código que me facilito Dessa y pude solucionar mi problema, yo había hecho algo parecido a eso pero estaba utilizando mal FindWindowEx eso sumado a que interprete mal msdn de Microsoft sobre FindWindowEx eso causo mi confusión, muchísimas gracias a todos por ayudarme con este pequeño problema.
Salu2