Как запретить окну получать фокус?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Kepmann
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 18.06.2005 (Сб) 14:19

Как запретить окну получать фокус?

Сообщение Kepmann » 18.06.2005 (Сб) 14:47

Все то же окно IE.

Нужно сделать так, чтобы это окно НИКОГДА не получало фокус (оно пытается это сделать при выполнении своего скрипта).

Заранее благодарен.

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 18.06.2005 (Сб) 17:16

нужно ему сказать: "фукос - фу! брось фокус!"

обычно помогает!
ХЎ

Kepmann
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 18.06.2005 (Сб) 14:19

Сообщение Kepmann » 18.06.2005 (Сб) 17:17

А если серьезно? Вроде есть среди АПИ че-то похожее, или может кака-то ввссе-таки можно?

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 18.06.2005 (Сб) 17:22

ХМ... а вообще окну можно запретить получать фокус?
ХЎ

Kepmann
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 18.06.2005 (Сб) 14:19

Сообщение Kepmann » 18.06.2005 (Сб) 17:23

Вот я про этоо и спрашиваю... 8)

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 18.06.2005 (Сб) 17:25

тогда считай ничо у тя не получица. незя так делать.
ХЎ

Kepmann
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 18.06.2005 (Сб) 14:19

Сообщение Kepmann » 18.06.2005 (Сб) 17:33

А как нибудь обходнымии путями? Ну наверняка такое бывает. Наверняка я не единственный, кому понадобилось это...

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 18.06.2005 (Сб) 18:32

Ну можно добавить к стилям окна WS_DISABLED тогда в принципе можно сказать что для него вообще и нет понятие фокус :D :D :D
А после выполнения скрипта возвращать ему старые стили :D
P.S. Use GetWindowLong and SetWindowLong if you are clever ;)
Если всё делать своими ручками, они скоро отвалятся !

Kepmann
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 18.06.2005 (Сб) 14:19

Сообщение Kepmann » 18.06.2005 (Сб) 18:49

Важно,чтобы этот скрипт выполнялся...

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 18.06.2005 (Сб) 19:30

А кто сказал что когда окно Disabled оно не принимает сообщения :shock:
Оно их прекрасно принимает и обрабатывает, другое дело userinput блокируется . Видел Total Commander . :D :D :D Там примерно также когда добавляешь скажем адрес в фтп-адреса :D :D :D
Если всё делать своими ручками, они скоро отвалятся !

Kepmann
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 18.06.2005 (Сб) 14:19

Сообщение Kepmann » 18.06.2005 (Сб) 19:42

А если окно disabled (окно IE), по скрипту в него будет страница загружаться новая?

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 18.06.2005 (Сб) 19:59

А проверить САМ можешь :?: :?: :?: По идее должен т.к. загрузка новой страницы это внутреннее событие, которое не только юзер может вызвать :D
А как говорится что не может вызвать юзер вызовем МЫ :D :D :D
Если всё делать своими ручками, они скоро отвалятся !

Kepmann
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 18.06.2005 (Сб) 14:19

Сообщение Kepmann » 18.06.2005 (Сб) 20:02

Да че-то стормозил, щас проверю 8)

Kepmann
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 18.06.2005 (Сб) 14:19

Сообщение Kepmann » 18.06.2005 (Сб) 20:13

Оно все равно фокус получает... 8( (со скрипта)

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 18.06.2005 (Сб) 20:32

Ты имеешь ввиду что окно переходит на передний план? :?
Можно воспользоваться методом топора и кувалды:
LockWindowUpdate(GetDesktopWindow) :D :D :D или то же самое но окно Explorera
А после скрипта:
SendMessage hwndIE,WM_SYSCOMMAND,SC_MINIMIZE,0
Можно чуть подождать пока скрипт выполняется или для надёжности сделать Post а не Send messaga желательно несколько раз :D :D :D
Если всё делать своими ручками, они скоро отвалятся !

Kepmann
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 18.06.2005 (Сб) 14:19

Сообщение Kepmann » 18.06.2005 (Сб) 20:48

Насколько понимаю, это функция запрещает перерисовку окна, а не обновление страницы, в общем, фокус передается, окно разворачивается... не помогло

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 18.06.2005 (Сб) 21:02

Код: Выделить всё
Private Declare Function LockWindowUpdate Lib "user32.dll" (ByVal hwndLock As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32.dll" () As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Declare Function ReleaseCapture Lib "user32.dll" () As Long

Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hwnd As Long) As Long

Private Const WM_PAINT As Long = &HF&
Private Const WM_SYSCOMMAND As Long = &H112
Private Const SC_MINIMIZE As Long = &HF020&

Private Sub Command1_Click()
SendMessage FindWindow("IEFrame", vbNullString), WM_SYSCOMMAND, SC_MINIMIZE, 0 'До скрипта удостоверимся что юзер нифига не видит
LockWindowUpdate GetDesktopWindow
SendMessage FindWindow("IEFrame", vbNullString), WM_SYSCOMMAND, &HF120, 0 'Это восстановление окна до первоначальных размеров. Как видишь юзеру нифиииииииииииииииига не видно
'А туточки код запуска скрипта :)
SendMessage FindWindow("IEFrame", vbNullString), WM_SYSCOMMAND, SC_MINIMIZE, 0 'А теперь после скрипта
ReleaseCapture 'На всякий случ
SetForegroundWindow Me.hwnd 'На всякий случ
End Sub

Рекомендую vbNullString заменить на название страницы чтоб конфликта не произошло :)
Если всё делать своими ручками, они скоро отвалятся !

Kepmann
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 18.06.2005 (Сб) 14:19

Сообщение Kepmann » 18.06.2005 (Сб) 21:08

Да я понял, что ты имеешь ввиду, просто не помогает это в моем случае.

Допустим, окно с которым я работаю, невидимо (я его спрятал). Естественно, когда там наступает обновление, оно разворачивается, но я его слава богу не вижу... и получает фокус! Естественно, этоо жутко мешает... 8( Напримемр пишу ченить в окне, а фокус у окна пропал...

Не надо мне миинимизировать, например.

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 18.06.2005 (Сб) 21:17

Kepmann
Между прочим последней строкой кода(SetForegroundWindow Me.hwnd ) я передаю фокус форме, а она в свою очередь последнему имевшему фокус ребёнку, так что ты просто продолжишь печатать текст безо всяких проблем даже не заметив что фокус был у другого окна :D 8)
Если всё делать своими ручками, они скоро отвалятся !

Kepmann
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 18.06.2005 (Сб) 14:19

Сообщение Kepmann » 19.06.2005 (Вс) 16:07

а она в свою очередь последнему имевшему фокус ребёнку

Че то не вкурил, где это в листинге... :?

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 19.06.2005 (Вс) 16:18

Это делает виндоус по умолчанию
Окно с детьми не может только само иметь фокус, один из детей обязательно имеет фокус :!: :D :D :D
Если всё делать своими ручками, они скоро отвалятся !

Kepmann
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 18.06.2005 (Сб) 14:19

Сообщение Kepmann » 19.06.2005 (Вс) 18:20

Все пучком, почти... Совет по поводу минимайза сработал. Все ок, даже мерцания при пепредачи фокуса между окнами незаметно, на клаве бить тоже можно, фокус не теряется... Вот тока перед скрытием минимизированного окна, на панели задач на некототрое время зависает его иконка... Может это, конечно, связано с заторможенностью тачки, фиг знает...

Главное, чтоо работает... 8)

Спасибо...

ALX_2002
Мега гуру
Мега гуру
 
Сообщения: 2054
Зарегистрирован: 25.11.2002 (Пн) 20:03

Сообщение ALX_2002 » 19.06.2005 (Вс) 20:01

2 Kepmann: Шеф ! Шеф ! Погодите ! Ну вы хоть поделитесь ради чего такие мучения то ?

:shock: Почему нужно столько мучать окна ???

Расскажите, что в конце то из этого получится ? :roll:

А то может есть способ на порядок проще ? :wink:


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 198

    TopList