Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.038 c
9-1137705694
ZilonAtakuit
2006-01-20 00:21
2006.10.22
Прозрачность, текстура


15-1159367015
Александр Иванов
2006-09-27 18:23
2006.10.22
В чем может быть проблема при получении данных из буфера


15-1159780325
DelphiLexx
2006-10-02 13:12
2006.10.22
Помогите с названием программы


2-1160026286
Alex_C
2006-10-05 09:31
2006.10.22
Вопрос по SysEdit


15-1159421245
boriskb
2006-09-28 09:27
2006.10.22
Похоливарить.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский