Вниз
Скачать: 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.012 c
15-1179597858
Rawed
2007-05-19 22:04
2007.06.17
Часы в Windows постоянно сбиваются!!


15-1179529496
Kostafey
2007-05-19 03:04
2007.06.17
Существуют готовые ли решения перевода числа в прописной вариант


3-1175081570
Xmen
2007-03-28 15:32
2007.06.17
Обновление данных у Клиента


8-1159866917
sozon
2006-10-03 13:15
2007.06.17
Эмуляция джойстика


15-1179500080
Ltybc
2007-05-18 18:54
2007.06.17
Очень опасный вирус




   Наверх