Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.07.15;
Скачать: [xml.tar.bz2];

Вниз

Вытащить запущенный экземпляр.   Найти похожие ветки 

 
Strate ©   (2007-05-14 17:27) [0]

Здравствуйте.

Такой вопрос. Хочу запретить запуск 2х компий моей программы, и если запускается вторая то выводить первый экземпляр из трея.

В трей прячу примерно так:

ShowWindow(Application.Handle, SW_HIDE);
ShowWindow(frmMain.Handle, SW_HIDE);


Ну и там засовывание иконки и.т.п

Теперь, если запускается программа, то идёт проверка на предмет запущенности первого экземпляра, и если зупащено, то отсылаю окну сообщение.

В процедуре обработки сообщений главного окна есть проверка на приход моего сообщения при котором нужно корректно вытащить программу из трея, вывести его поверх остальных окон и сделать активным. Делаю так:

ShowWindow(Application.Handle, SW_NORMAL);
ShowWindow(frmMain.Handle, SW_NORMAL);
SetForegroundWindow(frmMain.Handle);


но работает это только один раз почему-то :(

т.е. я запустил второй экземпляр программы, свернул открывшеся окно, запускаю экзеншник ещё раз - и окно не выводится над всеми окнами, а начинает просто моргать кнопка на панели задач.

Вопрос: где я дурак?


 
Strate ©   (2007-05-14 17:29) [1]

Да, причём этот же метод отображения окна при дабл-клике на иконке в трее нормально работает. Но у меня складываетсятакое ощущение что при щелчке на иконке окно становится активным и выводится. А вот при запуске экзешника окно не активно и не выводится...


 
Leonid Troyanovsky ©   (2007-05-14 19:30) [2]


> Strate ©   (14.05.07 17:27)  


> ShowWindow(Application.Handle, SW_HIDE);
> ShowWindow(frmMain.Handle, SW_HIDE);

Application.ShowMainForm := False;
ShowWindow(Application.Handle, SW_HIDE);

Показать (примерно) так:

procedure TForm1.RestroreClick(Sender: TObject);
begin
 Show;
 ShowWindow(Application.Handle, SW_HIDE); // если не нужна кнопка на панели
end;


> предмет запущенности первого экземпляра, и если зупащено,
>  то отсылаю окну сообщение.

Оптимистично, бо унаследовать foreground весьма непросто.

> Вопрос: где я дурак?

Попробуй так:

var
 h : HWND; // окно (главной) формы
begin
 h := GetWindowLong(wnd, GWL_HWNDPARENT); // окно приложения
 if IsIconic(h) then
   ShowWindow(h, SW_RESTORE);
 SetForegroundWindow(h);
 ..
end;


--
Regards, LVT.


 
Strate ©   (2007-05-14 20:02) [3]

Leonid Troyanovsky ©   (14.05.07 19:30) [2]
Оптимистично, бо унаследовать foreground весьма непросто.


В смысле? Я просто ищу окно FindWindow("TMyMainFormClass", nil) и ему отсылаю...


 
Leonid Troyanovsky ©   (2007-05-14 20:41) [4]


> Strate ©   (14.05.07 20:02) [3]

>  nil) и ему отсылаю...

Вот, отсылка и оптимисична.
RTFM: msdn GetForegroundWindow & etc

--
Regards, LVT.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2007.07.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.044 c
15-1181929921
Itonixxx
2007-06-15 21:52
2007.07.15
перекомпилировать Delphi код под Mac


15-1181691118
programmerts
2007-06-13 03:31
2007.07.15
Глюк с Delphi 6.


11-1165299456
Galkov
2006-12-05 09:17
2007.07.15
Параметры командной строки


15-1181751233
P
2007-06-13 20:13
2007.07.15
Если аналог DBGrid под Java, не в составе JavaBuilder, а открытый


15-1182058469
Riply
2007-06-17 09:34
2007.07.15
А тем, кто "мы сами не местные" здесь подают ?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский