Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.014 c
2-1179906781
Novice
2007-05-23 11:53
2007.06.17
Нужна идея


1-1176964731
kukuikar
2007-04-19 10:38
2007.06.17
Проверить существует ли сетевой путь или с сети ли сервер


2-1180264174
LowLevel
2007-05-27 15:09
2007.06.17
TChart - AddXY


11-1162418974
SKA1997
2006-11-02 01:09
2007.06.17
Оптимальная версия Delphi ?


15-1179657003
Bogdan1024
2007-05-20 14:30
2007.06.17
Счёт за сайт




   Наверх