arthur2 писал(а):Если изначально фокус не у меня, то я решил проблему с помощью подложного окна. Оно у меня маленькое, невидимое и живёт за пределами экрана. Когда надо что-нибудь активировать, я "показываю" своё подложное окно. Хоть оно и за кулисами, но исправно берёт на себя фокус. А после этого уже отдаю фокус кому хочу, а подложное окно снова прячу
Ага. Тогда не понял твой трюк.
Каким образом подложное окно принимает фокус?
arthur2 писал(а):А есть способ действительно выдать кому-нибудь фокус, если он не у тебя?
arthur2 писал(а):У меня по мотивом моего неудавшегося фокуса появилась такая мысль: создать вспомогательную программу и передавать ей хендл нужного окна в качестве параметра. Затем запускать её обычным Shell по описанной схеме (за кулисами экрана), а она уже передаст фокус нужному окну и выгрузится
Если в программе одно окно, то самое первое, что приходит в голову это SendKeys "%{TAB}", True
Option Explicit
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Sub cmn_Click()
MsgBox "Через десять секунд, где бы ни находился фокус, он вернётся к нам :)"
timer1.Interval = 10000
timer1.Enabled = True
Me.Visible = False
End Sub
Private Sub timer1_Timer()
Show
DoEvents
SendKeys "%{TAB}", True
DoEvents
SetForegroundWindow hwnd 'себе. Ну или кому угодно :)
Caption = "Сработало?" 'чтобы было видно в панели задач, если фокус не передастся :)
timer1.Enabled = False
End Sub
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 46