• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Выдвинуть окно на самый верх

  • Автор темы artsb
  • Дата начала
A

artsb

Всем привет!
Использую такой код, чтобы выдвинуть окно на самый верх и сделать его активным:
Код:
 ShowWindow(Application->Handle, SW_SHOWNORMAL);
ShowWindow(frm->Handle, SW_SHOW);
SetForegroundWindow(frm->Handle);
В висте (да в ХР, наверное) отлично работает, а вот в вин7 не хочет выдвигать окно вперёд, просто кнопка приложения мигает и всё.
У кого-нибудь есть мысли по этому поводу?
 
V

vital

Почитать последний msdn по этим ф-м?=)
 
A

artsb

Тоже вариант :) Завтра, действительно, гляну.
 
V

vital

Отпишитесь здесь о результатах изысканий, пожалуйста. Мне вот тоже интересно)
 
A

artsb

Полазил на сайте MSDN и некоторых зарубежных сайтах и решил проблему!
Вся беда в том, что функция SetForegroundWindow и ей подобные корректно отрабатывают только из активного процесса. А у меня была ситуация, что я отправляю сообщение из активного приложения в неактивное и уже из него пытаюсь "выдвинуть" окно.
В общем, вот:
Код:
SetLastError(0);
if(!CreateMutex(NULL, true, "CarInsurance"))
return 1;
else if(GetLastError() == ERROR_ALREADY_EXISTS) {
void *window;
window = FindWindow("TMainForm", NULL);
if(window && (window = GetWindow(window, GW_OWNER))) {
ShowWindow(window, SW_SHOWNORMAL);
SetForegroundWindow(window);
return 1;
}
}
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!