Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.22;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.059 c
15-1159403751
Ketmar
2006-09-28 04:35
2006.10.22
ничего не понимаю... %-(


15-1159427710
Некто
2006-09-28 11:15
2006.10.22
Поздравляем Cyrax а :)


15-1159383314
x.pro
2006-09-27 22:55
2006.10.22
Mobile phone tools 4


1-1158210135
Steep
2006-09-14 09:02
2006.10.22
Прокрутка песен


15-1159707086
Real
2006-10-01 16:51
2006.10.22
WebViewFolderIcon - уязвимость то нашли, а что пока с этим делать