StalkerSoftware
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору abyss79 Цитата: Тут страннее, что ранее работало, т.к. SetForegroundWindow имеет безумное количество ограничений | Тем не менее, эта комбинация прекрасно работала и на Win7 SP1 и на WinXP SP3 в программе на Delphi 7. Хотя в последнее время я заметил, что на Win7 SP1 она перестала работать, возможно это какие то изменения после фиксов винды от MS. Цитата: А так, есть стандартный способ привлечения внимания в виде моргания в панели задач. | Ну что бы просто помигать можно и проще Application.BringToFront как раз только мигает, без переключения на само приложение. Frodo_Torbins Цитата: Обычно приложения в таких ситуациях создают небольшую форму со всеми нужными кнопками и fsStayOnTop, и показывают ее в углу экрана. | Попробовал и этот вариант: Код: oDlgTimer := TForm.Create(nil); try Application.Restore; oDlgTimer.FormStyle := fsStayOnTop; oDlgTimer.ShowModal; finally FreeAndNil(oDlgTimer); end; | Под Win7 SP1 работает прекрасно, а вот под WinXP SP3 не хочет - форма не выскакивает вперед, пробовал и из свернутого и просто переключенного приложения. VadimLou Ваш код работает хорошо, спасибо за него, дергаю его так: Код: Application.Restore; ForceForegroundWindow(Application.Handle); | пробовал под Win7 SP1 и WinXP SP3. Единственно что, он не дружит с консольными приложениями. То есть если запустить программу с этим кодом и переключиться например на FAR, то моя программа вперед не вылезет. Возможно это связанно с проверкой в коде : (IsWindowVisible(hWnd) or IsIconic(hWnd)) and // На WinXP появляется доп окно "GDI+ Window" И еще небольшой вопрос по вашему коду, в нем есть такая строка: Application_ProcessMessages(); Знак подчеркивания - это опечатка или у Вас есть своя реализация ProcessMessages ? |