si una ventana esta abierta devolver el hwnd

Iniciado por rubeng, 8 Septiembre 2007, 04:24 AM

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

rubeng

no sigo con la discusion por que es inutil no terminanos mas
ya consegui su hwnd con esto
Private Sub Form_Load()
Text1.Text = FindWindow(vbNullString, "All rights reserved. Lab Asprise! (c) 1998-2004")
End Sub

otra cosa como hago para cerrar o destruir este msgbox o sino pulsar el boton no de este msgbox alguna idea?

Xerok1!

#11
Citarotra cosa como hago para cerrar o destruir este msgbox o sino pulsar el boton no de este msgbox alguna idea?

si envia cn sendkeys la letra "n" XD o si no alt+f4 SendKeys "%{F4}" o enter
un saludo :xD
[Firma]Esperando haber si acaba el concurso de firmas y la pongo[/Firma]

rubeng

eso es muy rustico ademas un msgbox no se cierra con alt f4

LeandroA

hola lo que tienes que hacer es enumerar los controles de la ventana y cuando encuetras el texto del control es igual al que buscas significa que ya tienes el hwnd del control luego le pudes enviar el mensage click o enter o como al tener &No le puedes enviar el mensate de la letra N  los mensage se envian con SendMessage o PostMessage

aca te hice un ejemplo con una funcion para enviar click al algun control de una ventana
en la funcion tienes que poner el caption de la ventana y seguido el caption del control


En un Modulo
Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hWnd As Long) As Long
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hWnd As Long, ByVal Msg As Long, wParam As Any, lParam As Any) As Long
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Dim lRetValue As Long
Dim ControlText As String


Public Function EnumChildProc(ByVal hWnd As Long, ByVal lParam As Long) As Long
    Dim sSave As String
    sSave = Space$(GetWindowTextLength(hWnd) + 1)
    GetWindowText hWnd, sSave, Len(sSave)
    sSave = Left$(sSave, Len(sSave) - 1)
    If sSave = ControlText Then
    lRetValue = PostMessage(hWnd, WM_LBUTTONDOWN, ByVal CLng(0), ByVal CLng(0))
    lRetValue = PostMessage(hWnd, WM_LBUTTONUP, ByVal CLng(0), ByVal CLng(0))
    End If
    EnumChildProc = 1
End Function


Public Function MensageClick(WindowsCaption As String, ControlCaption As String)
    Dim Handle As Long
    ControlText = ControlCaption
    Handle = FindWindow(vbNullString, WindowsCaption)
    If Handle = 0 Then Exit Function
    EnumChildWindows Handle, AddressOf EnumChildProc, ByVal 0&
    MensageClick = lRetValue
End Function



y en el formulario


Private Sub Command1_Click()
ret = MensageClick("All rights reserved. Lab Asprise! (c) 1998-2004", "&No")
MsgBox "Mensage enviado?: " & CBool(ret)
End Sub



Te recomiendo para aprender de apis te vajes el Api-guide de la web y vas a ver muchos ejemplos sobre el manejo de estas

Saludos


Xerok1!

Citareso es muy rustico ademas un msgbox no se cierra con alt f4
si es un poco rustico,pero no tube tiempo para pensar otra cosa,de todas formas,a mi si me los cierra cn alt f4  :-\ :-\....y si kieres k no cante muxo,mejr q no salte el msgbox.... :¬¬
un saludo :)
[Firma]Esperando haber si acaba el concurso de firmas y la pongo[/Firma]

~~


rubeng

solucionado
gracias leandroa! xerok eon y demas.. ¬¬
salu2