Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[44.222.220.101] |
|
Сообщ.
#1
,
|
|
|
Есть окно, известно только его HWND. Окно не мое, чужое. Я запускаю программу и нахожу HWND окна. Окно закрыто другим окном. Из моей программы надо вытащить это окно на передний план, так чтобы моя программа не потеряла фокус ввода. Задача решена в WINDOWS7, а в десятке не работает.Что то у меня не получается, пробовал посылать сообщения, устанавливать фокус ввода на это окно, потом на мое. Ничего не помогает. Смотрел в SPY++, оказалось, что в 7 когда активно мое окно при щелчке по нему сообщение WM_ACTIVATEAPP приходит только один раз, в 10 при каждом щелчке приходит новое такое сообщение. Как побороть?
|
Сообщ.
#2
,
|
|
|
::SetWindowPos(hWnd, HWND_TOP, ...., SWP_NOACTIVATE...) не помогает?
|
Сообщ.
#3
,
|
|
|
Цитата Олег М @ ::SetWindowPos(hWnd, HWND_TOP, ...., SWP_NOACTIVATE...) не помогает? Ура! Работает! Я пробовал эту функцию, но без SWP_NOACTIVATE. Огромное спасибо за помощь! |
Сообщ.
#4
,
|
|
|
Новая проблема. Есть код:
if (sw != NULL) { ::GetWindowRect(sw, r1); ::SetWindowPos(sw, HWND_TOP, r1.left, r1.top, r1.Width(), r1.Height(), SWP_NOACTIVATE); }; Sleep(100); if(sw1!=NULL) { ::GetWindowRect(sw1, r); ::SetWindowPos(sw1, HWND_TOP, r.left, r.top, r.Width(), r.Height(), SWP_NOACTIVATE); }; Sleep(100); Вариант для sw1 работает, окошко вытаскивается и показывается, а окошко sw не показывается. Если поменять SWP_NOACTIVATE на что нибудь другое, окошко показывается, но оно блокирует работу с моим окном, опять бесконечная последовательность WN_ACTIVATEAPP. Что можно предпринять? |
Сообщ.
#5
,
|
|
|
Цитата a_n_y_a @ Что можно предпринять? SWP_NOACTIVATE - это флаг, его надо не заменять, а комбинировать с другими, например SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE |
Сообщ.
#6
,
|
|
|
Цитата Олег М @ Цитата a_n_y_a @ Что можно предпринять? SWP_NOACTIVATE - это флаг, его надо не заменять, а комбинировать с другими, например SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE Попробовал предложенную комбинацию, результат тот же. Окно не появляется. Вообще то я пробовал некоторые комбинации, но ничего не получилось. Флагов много, вариантов комбинаций очень много, все их не перебрать. Может есть что нибудь еще для решения задачки? Я уже пробовал после этой функции посылать сообщение WM_ACTIVATE. Но ничего не работает. |
Сообщ.
#7
,
|
|
|
Цитата a_n_y_a @ Флагов много, вариантов комбинаций очень много, все их не перебрать. Не надо их перебирать. Попробуй ::SetWindowPos(sw1, sw, 0, 0, 0, 0, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE); или ::SetWindowPos(sw1, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE); GetWindowRect там вообще нигде не нужен |
Сообщ.
#8
,
|
|
|
Цитата Олег М @ Не надо их перебирать. Попробуй ::SetWindowPos(sw1, sw, 0, 0, 0, 0, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE); или ::SetWindowPos(sw1, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE); GetWindowRect там вообще нигде не нужен Первый вариант сработал, спасибо за помощь. |