Как сделать окно активным?

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

Как сделать окно активным?

Сообщение Cav » 09.01.2006 (Пн) 14:17

Всё банально - надо сделать окно с известным hwnd активным.

Как ни странно не работает:


Код: Выделить всё
Call SetWindowPos(hw_window, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
- ну это срабатывает, хотя окно оно не активизирует (вроде и не должно)
но это:


Код: Выделить всё
  SetActiveWindow hw_window
- тоже не пашет
Код: Выделить всё
  SendMessage  hw_window, WM_ACTIVATE, 1, 1
- тоже !!!
Как же это сделать?

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 09.01.2006 (Пн) 15:04

Должно работать. А ты уверен что окно Твоей проги не TopMost? Или оно не возвращает фокус при его потере.
----

Cav
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 14.07.2003 (Пн) 19:25

Сообщение Cav » 09.01.2006 (Пн) 15:28

уверен.

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

Сообщение Kovu » 09.01.2006 (Пн) 15:31

Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hwnd As Long) As Long ?
Если всё делать своими ручками, они скоро отвалятся !

Maitris
Постоялец
Постоялец
 
Сообщения: 656
Зарегистрирован: 02.03.2005 (Ср) 21:00
Откуда: Из другой цивилизации.

Сообщение Maitris » 09.01.2006 (Пн) 15:43

Kovu, из Гайда взял? :) По-моему человеку нужно разобраться почему SetActiveWindow не срабатывает, а пример декларации SetForegroundWindow он и сам может посмотреть на Яндексе.
----

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 09.01.2006 (Пн) 15:52

Да, эт интересно. У меня та же беда на XP наблюдается. Если окно свернуто, SetActiveWindow и SetForegroundWindow не дают желаемого эффекта...
То, что для одних константа, для других только переменная...

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 09.01.2006 (Пн) 15:52

Ссылка : Функция SetActiveWindow
Если окно, идентифицированное параметром hWnd, было создано вызывающим потоком, состояние активного окна вызывающего потока устанавливается в hWnd. Иначе, состояние активного окна вызывающего потока устанавливается в значение ПУСТО (NULL).

Используя функцию AttachThreadInput, поток может прикрепить обработку его ввода данных к другому потоку. Это дает возможность потоку вызвать SetActiveWindow, чтобы активизировать окно, связанное с очередью сообщений другого потока.
Cav
А ты чьё окно хочешь сделать активным? Своей проги или чужой?
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!


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

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

Сейчас этот форум просматривают: Google-бот, SemrushBot и гости: 170

    TopList