Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > SetForegroundWindow не меняет состояние заголовка


Автор: alexcustov 17.5.2012, 21:42
Имеется HWND чужого окна, вызываю для него SetForegroundWindow() чтобы активировать. Активацию жду по двум условиям:

1) GetForegroundWindow() == искомому HWND
2) GetWindowInfo() для этого окна возвращает WS_ACTIVECAPTION в поле dwWindowStatus

всё работает, кроме окон от одного приложения. Там второе условие никогда не выполняется. Причём если я пошлю клавиатурный ввод через SendInput(), то он там отображается, то есть окно как бы в фокусе, но его заголовок неактивен. Мышкой окно активируется как надо, заголовок становится активным. Почему так?

Параметры этого окна, взятые из Spy++:

Window styles:

WS_CAPTION
WS_MINIMIZE
WS_VISIBLE
WS_CLIPSIBLINGS
WS_CLIPCHILDREN
WS_SYSMENY
WS_THICKFRAME
WS_OVERLAPPED
WS_MINIMIZEBOX
WS_MAXIMIZEBOX

Extended window styles:

WS_EX_LEFT
WS_EX_LTRREADING
WS_EX_RIGHTSCROLLBAR
WS_EX_TOPMOST
WS_EX_WINDOWEDGE

Class styles:

CL_DBLCLKS

Автор: GremlinProg 18.5.2012, 07:38
Цитата(alexcustov @ 17.5.2012,  23:42)
Имеется HWND чужого окна, вызываю для него SetForegroundWindow() чтобы активировать. Активацию жду по двум условиям:

1) GetForegroundWindow() == искомому HWND
2) GetWindowInfo() для этого окна возвращает WS_ACTIVECAPTION в поле dwWindowStatus

всё работает, кроме окон от одного приложения. Там второе условие никогда не выполняется. Причём если я пошлю клавиатурный ввод через SendInput(), то он там отображается, то есть окно как бы в фокусе, но его заголовок неактивен. Мышкой окно активируется как надо, заголовок становится активным. Почему так?

приложение могло активный заголовок просто нарисовать ( DrawCaption ), независимо от того, активно окно или нет,
так что WS_ACTIVECAPTION тут может быть несогласным с глазами

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)