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

Вниз

Копия запущенной программы   Найти похожие ветки 

 
Dmitry_177   (2007-04-19 19:36) [0]

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

begin
 hMutex := CreateMutex(nil, false, MutexName);
 if GetLastError = ERROR_ALREADY_EXISTS then
   begin
     CloseHandle(hMutex);
     hWindow := FindWindow("TForm1", WindowName);
     if hWindow <> 0 then
       begin
         ShowWindow(hWindow, SW_RESTORE);
         SetForegroundWindow(hWindow);
       end;
     CloseHandle(hWindow);
     Exit;
   end;

 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.

Все вроде работает, окно появляется, вторая копия не завпускается... Но.. если окно первой копии было всернуто вниз, и запустить вторую копию чтобы развернуть первую, то потом это окно почему-то не сворачивается по нажатию на кнопку в заголовке "Свернуть". Помогите пожалуйста..


 
Leonid Troyanovsky ©   (2007-04-19 19:46) [1]


> Dmitry_177   (19.04.07 19:36)  

>      hWindow := FindWindow("TForm1", WindowName);
>      if hWindow <> 0 then
>        begin
>          ShowWindow(hWindow, SW_RESTORE);


Не совсем то окно

var
  AppHwnd: HWND; // application handle

 hWindow := FindWindow("TForm1", WindowName);
 AppHwnd := GetWindowLong(hWindow, GWL_HWNDPARENT);
 if IsIconic(AppHwnd) then
   ShowWindow(AppHwnd, SW_RESTORE);
 SetForegroundWindow(AppHwnd);


Мьютекс здесь нельзя сразу закрыть, лучше,
вообще, его не закрывать (в данном случае).

--
Regards, LVT.


 
Dmitry_177   (2007-04-19 19:53) [2]

У меня почему то и так тоже не сворачивается..


 
Dmitry_177   (2007-04-19 19:58) [3]

Сори... все работает!! Просто я не заменил hWindow на AppHwnd в функциях ShowWindow(AppHwnd, SW_RESTORE); SetForegroundWindow(AppHwnd);

А когда тогда закрывать мьютекс? Какнибудь так?

Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;

ReleaseMutex(hMutex);
CloseHandle(hMutex);


 
Leonid Troyanovsky ©   (2007-04-19 20:30) [4]


> Dmitry_177   (19.04.07 19:58) [3]

> А когда тогда закрывать мьютекс? Какнибудь так?

Можно и так (ReleaseMutex излишен).
Но, даже если не CloseHandle, то его закроет система
при завершении процесса.
Что, собс-но, здесь и требуется.

--
Regards, LVT.


 
Dmitry_177   (2007-04-19 20:46) [5]

Спасибо :)



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

Текущий архив: 2007.06.17;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.021 c
2-1180257518
kate_1
2007-05-27 13:18
2007.06.17
нужна помощь!!!


2-1180344944
Infinityx93
2007-05-28 13:35
2007.06.17
CASE


2-1180010845
Цукор5
2007-05-24 16:47
2007.06.17
помогите с запросом


15-1179914189
antonn (work)
2007-05-23 13:56
2007.06.17
Кетмар не пишет вирусы, не верьте


6-1164127502
Atlantis
2006-11-21 19:45
2007.06.17
протокол RARP