Форум: "Начинающим";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];
ВнизGetWindow Найти похожие ветки
← →
Хам (2006-08-15 09:51) [0]Мне нужно что бы из моей програмы при определёной ситуации, другой програме посылался сигнал о том что програму надо вывести на поверх всех окон. Делаю так
dwin:=GetWindow(dwin,GW_HWNDNEXT);
dwin - дескриптор приложения которое надо вывести по верх всех окон
Дело в том что приложение выводиться по верх всех окон, только в том случае если оно минимизировано, а если оно просто закрыто другой формой то данная функция не работает.
Как сделать так что бы приложени выходило на передней план в любом случае ?
← →
Чапаев © (2006-08-15 10:05) [1]findwindow используй
← →
Хам (2006-08-15 10:46) [2]Мне нужно что бы приложение активировалось именно с определённым хендлом, по названию не получиться, так как может возникнуть ситуация что в системе может быть запущено несколько приложений с одинаковым названием.
← →
Хам (2006-08-16 08:00) [3]что никто не знает ?
← →
DeadMeat © (2006-08-16 08:46) [4]Шота я не сообразил, как ты его выводишь на передний план.
Через GetWindow ?
← →
Хам (2006-08-16 09:23) [5]Ой извените не то я написал )) Вот код вывода приложения
ShowWindow(dwin, SW_SHOWNORMAL);
BringWindowToTop(dwin);
← →
PC Maniac (2006-09-06 14:24) [6]Есть такая функция SetForegroundWindow. Ей можно пользоваться, если известен хэндл окна. В Win9х она выводит окно на передний план и передает ему фокус ввода. В Win2k и выше эта функция приводит только к миганию заголовка приложения, содержащего окно в панели задач. Однако, можно все же в Win2k и выше заставить эту функцию работать как и в Win9x. Для этого следует воспользоваться функцией SystemParametersInfo.
Более подробную информацию Вы сможете получить в MSDN, сделав поиск по ключевым словам SystemParametersInfo, SetForegroundWindow, FindWindow, GetForegroundWindow
Вот пример кода:
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, 0, SPIF_SENDWININICHANGE and SPIF_UPDATEINIFILE);
AHwnd := Screen.ActiveForm.Handle;
SetForegroundWindow(AHwnd);
← →
GrayFace © (2006-09-08 19:03) [7]PC Maniac (06.09.06 14:24) [6]
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, 0, SPIF_SENDWININICHANGE and SPIF_UPDATEINIFILE);
AHwnd := Screen.ActiveForm.Handle;
SetForegroundWindow(AHwnd);
За собой прибирать надобно. В начале помощью GET запоминать, в конце восстанавливать.
Вообще, SetForegroundWindow работает по старому, если вызвана из потока активного окна.
Хам
Дак как ты GetWindow используешь? Его хотя бы имеет смысл заменить на EnumWindows.
← →
PC Maniac (2006-09-29 17:05) [8]
> GrayFace © (08.09.06 19:03) [7]
> За собой прибирать надобно. В начале помощью GET запоминать,
> в конце восстанавливать.
Данные функции я использовал при написании POS-терминала, на котором физически отсутствовала мышь и стояла программируемая клавиатура с отсутствующими системными клавишами Windows, так что потеря фокуса была равнозначна остановке терминала и, следовательно, прекращению продаж. В данном случае, мне было важнее обеспечить постоянность фокуса на необходимом элементе управления. Так что "прибирать за собой" надобно далеко не всегда. Кроме того, те три строчки кода, которые я вставил в предыдущий комментарий показывают лишь пример возможного использования данных функций и не претендуют на что-либо большее. Писать за автора вопроса код я не собираюсь. Так что столь категоричное высказывание с Вашей стороны было опрометчивым.
> Вообще, SetForegroundWindow работает по старому, если вызвана
> из потока активного окна.
Что касается использования API для управления фокусом ввода (либо чем-то подобным) в пределах своего приложения, мне кажется, что, в ряде случаев, использовать стандартные методы Delphi (SetFocus, например) правильнее. Хотя бы с точки зрения возможной кросс-платформенности.
← →
DVM © (2006-09-29 17:09) [9]
> Однако, можно все же в Win2k и выше заставить эту функцию
> работать как и в Win9x.
еще во всех версиях Win есть функция SwitchToThisWindow() правда недокументированная.
← →
PC Maniac (2006-09-29 17:37) [10]
> еще во всех версиях Win есть функция SwitchToThisWindow()
> правда недокументированная.
А стоит ли пользоваться недокументированными функциями? Особенно, если разрабатывается коммерческое приложение? Ведь никто не сможет поручится, что все эти функции будут в следующих версиях операционной системы. Следовательно, использование недокументированных функций жестко привязывает Ваше приложение к конкретной платформе, что в большинстве случаев является отрицательным фактором.
← →
Rater1 (2006-10-02 15:52) [11]если родитель - рабочий стол, то окно и вывалится поверх всех!
Вот так:private
{ Private declarations }
procedure CreateParams(var Params: TCreateParams); override;
//.....
procedure TfrmMsg.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.WndParent := GetDesktopWindow;
end;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.033 c