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

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

artsb

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

vital

Больной Компом Детектед
29.01.2006
2 432
34
#2
Почитать последний msdn по этим ф-м?=)
 

vital

Больной Компом Детектед
29.01.2006
2 432
34
#4
Отпишитесь здесь о результатах изысканий, пожалуйста. Мне вот тоже интересно)
 
A

artsb

#5
Полазил на сайте 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;
}
}