Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблемы переключения фокуса / 5 сообщений из 5, страница 1 из 1
31.01.2011, 22:47
    #37089450
Дмитрий П.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы переключения фокуса
Приложение стартует с Form1 (невидима) и запускает ee таймер, который выдает в определенный момент (через 5сек) на экран Form2 с TextBox. Я хотел, чтобы в этот момент фокус ввода переместился в TextBox на Form2, даже если в этот момент он в другом приложении (например в NotePad). Как этого добиться? Спасибо.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Private Sub Form_Load()
Timer1.Interval =  5000 
Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
Timer1.Enabled = False
Form2.Show
Form2.Text1.SetFocus
End Sub

Заголовок Form2 моргает 3 раза, но TextBox не получает фокус ввода.
...
Рейтинг: 0 / 0
31.01.2011, 22:51
    #37089457
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы переключения фокуса
Дмитрий П.,

SetForegroundWindow а потом уже SetFocus
...
Рейтинг: 0 / 0
31.01.2011, 23:35
    #37089511
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы переключения фокуса
...
Рейтинг: 0 / 0
04.02.2011, 21:59
    #37098827
Дмитрий П.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы переключения фокуса
VSVLAD,Игорь Горбонос,

Нет это все не работает.

Специалист с форума VBStreets написал:
ХакерВ некоторый момент в Windows стало запрещено одному приложению перетягивать на себя одеяло фореграундность с другого приложения. И это правильно.

Остается одно - имитировать клик мышки по TextBox
...
Рейтинг: 0 / 0
04.02.2011, 23:13
    #37098888
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы переключения фокуса
Дмитрий П., Проверил... действительно не хочет передавать. Испробовал:

1) SetForegroundWindow
2) BringWindowToTop
3) SetActiveWindow
4) AllowSetForegroundWindow
5) SetFocus

Более менее работает с:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Private Declare Function SetWindowPos Lib "user32.dll" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Private Const HWND_NOTOPMOST As Long = - 2 
Private Const HWND_TOPMOST As Long = - 1 

Private Const SWP_NOMOVE As Long = &H2
Private Const SWP_NOSIZE As Long = &H1

Private Sub Timer1_Timer()
    SetWindowPos Me.hwnd, HWND_TOPMOST,  0 ,  0 ,  0 ,  0 , SWP_NOMOVE Or SWP_NOSIZE
    SetWindowPos Me.hwnd, HWND_NOTOPMOST,  0 ,  0 ,  0 ,  0 , SWP_NOMOVE Or SWP_NOSIZE
    Text1.Text = "Test"
End Sub

Но работает в том случае, если окно нашей программы находится ниже по уровню к той у которой фокус...
Надо как-то попробовать перекрыть нашу форму чужим окном, тогда сможем получить фокус при любых обстоятельствах
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Проблемы переключения фокуса / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]