Запущено некое чужое приложение. Фокус ввода располагается на каком-то из его контролов.
Каким образом (желательно посредством API) переместить фокус ввода на нужный мне контрол?
By using the AttachThreadInput function, a thread can attach its input processing to another thread. This also allows threads to share their input states, so they can call the SetFocus function to set the keyboard focus to a window of a different thread.
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal Msg As Long, wParam As Any, lParam As Any) As Long
Private Const BM_CLICK = &HF5
Private Sub Command1_Click()
MsgBox "Aaaaaaa!"
End Sub
Private Sub Command2_Click()
SendMessage Command1.hWnd, BM_CLICK, ByVal 0, ByVal 0
End Sub
dr.MIG писал(а):Во-первых, точно ли переменные содержат хэндлы соответствующих окон.
dr.MIG писал(а):...нафига SetForegroundWindow, если по описанию сообщение BM_CLICK может не сработать,если родительское окно кнопки не активно, поэтому не SetForegroundWindow, а SetActiveWindow.
dr.MIG писал(а):...нафига вообще WM_SETFOCUS, если надо кликнуть по кнопке.
dr.MIG писал(а):...Вот пример, но здесь клик происходит по кнопке собственного приложения.
IvanTheTerrible писал(а):Там кнопка, собственно, и не кнопка, а скорее всего ImageBox. Но, не в этом даже дело...
dr.MIG писал(а):В случае с BM_CLICK как раз таки в этом...
SendMessage Hwnd, Константа_эквивалентная_мышиному_клику, 0&, 0&
Сейчас этот форум просматривают: Majestic-12 [Bot], Yandex-бот и гости: 101