Otra opción a a la LixKeÜ es usar FindWindows, FinWindowsEx y
"El todo poderoso" SendMessage . Fijate si podes adaptar este ejemplo a la
aplicacion externa:
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 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 Const WM_SETTEXT = &HC
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Private Const BM_GETSTATE = &HF2
Private Const WM_SETFOCUS = &H7
Private Const WM_KILLFOCUS = &H8
Private Const WM_ENABLE = &HA
Dim Hndl As Long
Dim chekeo As Long
Dim x As Long
Private Sub Form_Load()
Me.Caption = "Formulario"
Command1.Caption = "boton 1"
Command2.Caption = "quitar foco a boton 1"
Command3.Caption = "foco boton boton 1"
Timer1.Interval = 50
End Sub
Private Sub Command3_Click()
Command1.SetFocus
End Sub
Private Sub Timer1_Timer()
Hndl = FindWindow(vbNullString, "Formulario")
Hndl = FindWindowEx(Hndl, 0, vbNullString, "boton 1")
If Hndl <> 0 Then
chekeo = SendMessage(Hndl, BM_GETSTATE, 0, 0)
If chekeo = 0 Then Me.Cls: Me.Print "boton 1 sin foco"
If chekeo = 8 Then Me.Cls: Me.Print "boton 1 con foco"
If chekeo = 44 Or chekeo = 108 Then
Me.Cls: Me.Print "boton 1 Click"
x = Round(Timer): While Round(Timer) < x + 1: DoEvents: Wend
End If
End If
End Sub
Saludos.