Форум: "Основная";
Текущий архив: 2007.06.17;
Скачать: [xml.tar.bz2];
ВнизКопия запущенной программы Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.041 c