Получить окно, которое поверх всех других, но неактивно
От: Аноним  
Дата: 20.06.04 10:06
Оценка:
Здравствуйте!

Каким образом можно получить хендл окна, которое находится поверх всех других, но при этом не активно?
Re: Получить окно, которое поверх всех других, но неактивно
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 20.06.04 10:24
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте!


А>Каким образом можно получить хендл окна, которое находится поверх всех других, но при этом не активно?


Может, что-то типа этого:
HWND hForeground = GetForegroundWindow();
HWND hNotActive = GetNextWindow(hForeground,GW_HWNDPREV);

Если я правильно понял вопрос, то окно, которое поверх всех других, но неактивно — это окно, находящееся сразу за окном, которое поверх всех других.
Re[2]: Получить окно, которое поверх всех других, но неактив
От: Аноним  
Дата: 20.06.04 10:46
Оценка:
Здравствуйте, Flamer, Вы писали:

F>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте!


А>>Каким образом можно получить хендл окна, которое находится поверх всех других, но при этом не активно?


F>Может, что-то типа этого:

F>
F>HWND hForeground = GetForegroundWindow();
F>HWND hNotActive = GetNextWindow(hForeground,GW_HWNDPREV);
F>

F>Если я правильно понял вопрос, то окно, которое поверх всех других, но неактивно — это окно, находящееся сразу за окном, которое поверх всех других.


Нет, это неработает. Задача проста: перед кликом на иконке в трее надо найти Foreground-окно. Но GetForegroundWindow дает хендл панели задач
Re[3]: Получить окно, которое поверх всех других, но неактив
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 20.06.04 11:07
Оценка:
Здравствуйте, Аноним, Вы писали:

[]

А>Нет, это неработает. Задача проста: перед кликом на иконке в трее надо найти Foreground-окно. Но GetForegroundWindow дает хендл панели задач


Перед кликом? Судя по тому, что вы описываете, вы это делаете во время клика Естественно, что в этом случае "GetForegroundWindow дает хендл панели задач"

А зачем все это нужно, если не секрет?
Re[4]: Получить окно, которое поверх всех других, но неактив
От: Аноним  
Дата: 20.06.04 11:14
Оценка:
Здравствуйте, Flamer, Вы писали:

F>Здравствуйте, Аноним, Вы писали:


F>[]


А>>Нет, это неработает. Задача проста: перед кликом на иконке в трее надо найти Foreground-окно. Но GetForegroundWindow дает хендл панели задач


F>Перед кликом? Судя по тому, что вы описываете, вы это делаете во время клика Естественно, что в этом случае "GetForegroundWindow дает хендл панели задач"


F>А зачем все это нужно, если не секрет?


Объясняю: на экране активно окно. Я вызываю меню своей программы из трея, выбираю там какой-либо пункт (в результате этого выбора никаких окон моей программы не показывается), затем меню, естественно, закрывается. А окно, которое было активно до вызова меню, активным не становится. Так вот, надо его активизировать.
Re[5]: Получить окно, которое поверх всех других, но неактив
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 20.06.04 11:17
Оценка:
Здравствуйте, Аноним, Вы писали:

[]

F>>А зачем все это нужно, если не секрет?


А>Объясняю: на экране активно окно. Я вызываю меню своей программы из трея, выбираю там какой-либо пункт (в результате этого выбора никаких окон моей программы не показывается), затем меню, естественно, закрывается. А окно, которое было активно до вызова меню, активным не становится. Так вот, надо его активизировать.


Объясняю: то, чем вы занимаетесь, называется вырезанием гланд через ж... Для того, чтобы выпадающее меню в нормально закрывалось, надо _перед_ вызовом этого выпадающего меню сделать
SetForegroundWindow(m_hWnd);

где m_hWnd — хендл главного окна вашего приложения. И все будет нормально.
Re[5]: Получить окно, которое поверх всех других, но неактив
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 20.06.04 11:20
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, Flamer, Вы писали:


F>>Здравствуйте, Аноним, Вы писали:


F>>[]


А>>>Нет, это неработает. Задача проста: перед кликом на иконке в трее надо найти Foreground-окно. Но GetForegroundWindow дает хендл панели задач


F>>Перед кликом? Судя по тому, что вы описываете, вы это делаете во время клика Естественно, что в этом случае "GetForegroundWindow дает хендл панели задач"


F>>А зачем все это нужно, если не секрет?


А>Объясняю: на экране активно окно. Я вызываю меню своей программы из трея, выбираю там какой-либо пункт (в результате этого выбора никаких окон моей программы не показывается), затем меню, естественно, закрывается. А окно, которое было активно до вызова меню, активным не становится. Так вот, надо его активизировать.


Тады ставь callback (см. NOTIFYICONDATA.uCallbackMessage), обрабатывай WM_MOUSEMOVE и запоминай хендл от GetForegroundWindow()
HgLab: Mercurial Server and Repository Management for Windows
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.