Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не удается активировать окно, SetActiveWindow 
:(
    Опции темы
WinDev
Дата 8.11.2011, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 25.12.2010

Репутация: нет
Всего: нет



Не удается активировать окно с помощью функции SetActiveWindow().

Цитата(MSDN)
The SetActiveWindow function activates a window. The window must be attached to the calling thread's message queue.

Цитата(MSDN)
By using the AttachThreadInput function, a thread can attach its input processing to another thread. This allows a thread to call SetActiveWindow to activate a window attached to another thread's message queue.


Имеется окно под многими остальными на рабочем столе. Задача - вывести его "наверх" и активировать.

Следующий код не работает:

Код

DWORD idAttach = GetWindowThreadProcessId(hwnd, &pid);
DWORD idAttachTo = GetCurrentThreadId();
bRes = AttachThreadInput(idAttach, idAttachTo, TRUE);

HWND hWndPrev = SetActiveWindow(hwnd);
AttachThreadInput(idAttach, idAttachTo, FALSE);


Правильный ли код? Если да, то почему он не работает?
PM MAIL   Вверх
WinDev
Дата 8.11.2011, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 25.12.2010

Репутация: нет
Всего: нет



UPD: Случайно заметил, что в режиме Debug вышеприведенный код работает.. , баг Visual Studio?..
PM MAIL   Вверх
vol4ek
Дата 8.11.2011, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: -1
Всего: 0



нет, не баг. У конфигураций Release и Debug разные настройки. Release для создания окончательного модуля, Debug отладочная. Причина в коде.

PM MAIL ICQ   Вверх
WinDev
Дата 8.11.2011, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 25.12.2010

Репутация: нет
Всего: нет



А что не так в коде?
PM MAIL   Вверх
vol4ek
Дата 8.11.2011, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: -1
Всего: 0



покажи весь.

PM MAIL ICQ   Вверх
WinDev
Дата 8.11.2011, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 25.12.2010

Репутация: нет
Всего: нет



Зачем? Задавайте вопросы - отвечу.

Это сообщение отредактировал(а) WinDev - 8.11.2011, 19:50
PM MAIL   Вверх
vol4ek
Дата 8.11.2011, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: -1
Всего: 0



у тебя там сишного кода нет? у меня как-то была прога на 3-х языках. C, C++ и модули ассемблерные в придачу. так в debug нормально собиралось, а Release тьму ошибок давал.

Добавлено через 1 минуту
или устаревший код.
PM MAIL ICQ   Вверх
WinDev
Дата 8.11.2011, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 25.12.2010

Репутация: нет
Всего: нет



Давайте может будем исходить из специфики отличий разных видов сборок - debug и release. А то гадать здесь - это как иголку в стоге сена искать. Весь код скидывать я бы не хотел.. Программа написана с использованием MFC.
PM MAIL   Вверх
vol4ek
Дата 8.11.2011, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


конь в пальто
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 1.5.2011
Где: Минск

Репутация: -1
Всего: 0



какие ошибки выдает?
PM MAIL ICQ   Вверх
WinDev
Дата 8.11.2011, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 25.12.2010

Репутация: нет
Всего: нет



Никаких.

UPD: возникла идея, что при запуске из отладчика GetCurrentThreadId возвращает одно, а при запуске "самостоятельного" приложения - другое. Так ли это?


P.S. Может как-то можно обойти проблему использованием другой функции?

Это сообщение отредактировал(а) WinDev - 8.11.2011, 20:48
PM MAIL   Вверх
Lols
Дата 8.11.2011, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 21.10.2011

Репутация: нет
Всего: нет



Не работает и при этом не выдает ошибок. И это только в Release?
PM MAIL   Вверх
WinDev
Дата 8.11.2011, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 25.12.2010

Репутация: нет
Всего: нет



Программа работает в Release, просто не выносит окно на топ.
PM MAIL   Вверх
500mhz
Дата 8.11.2011, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

Репутация: нет
Всего: 14



а может все таки SetForegroundWindow ?


--------------------

PM MAIL ICQ   Вверх
WinDev
Дата 8.11.2011, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 25.12.2010

Репутация: нет
Всего: нет



Просто мигает в трее и все, если использовать только SetForegroundWindow()

Это сообщение отредактировал(а) WinDev - 8.11.2011, 21:39
PM MAIL   Вверх
Albor
Дата 11.11.2011, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: 7
Всего: 9



Посмотри в сторону GetLastError() и FormatMessage(). Не плохо бы проверять возвращаемое значение (м.б. в фрагменте кода это просто не показано). Во всяком случае, можно попытаться локализовать место ошибки выбросом MessageBox-ов, если функция вернула что-то не то, а не гадать.
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0737 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.