Форум: "Потрепаться";
Текущий архив: 2003.07.03;
Скачать: [xml.tar.bz2];
ВнизКак запретить второй запуск программы? Найти похожие ветки
← →
killer (2003-06-15 20:23) [0]Как запретить второй запуск программы? Т.е. чтобы не была сразу два раза запущена одна и таже программа.
← →
Palladin (2003-06-15 20:26) [1]FAQ
← →
Shluz (2003-06-15 20:30) [2]ты знаешь, обычно используют мьютексы ...
но у меня есть альтернативный способ :)
при запуске программы записываешь, например, в реестр, запись..ну скажем "1"..при завершении программы записываешь "0"..
вот...и еще вначале проверяешь есть такая запись.. если в ней 0 тогда работаем, если 1 выдаем сообщение "Типа, уже работаем " :)
/придумал еще в школе
← →
Плохой человек (2003-06-15 21:57) [3]Избегание повторного запуска
procedure TForm1.FormCreate(Sender: TObject);
VAR
Wnd : hWnd;
buff: ARRAY [0..127] OF Char;
d:string;
begin
Application.ShowMainForm:=false;
Wnd := GetWindow(Handle, gw_HWndFirst);
WHILE Wnd <> 0 DO BEGIN {Пропускаем в поиске}
IF IsWindowVisible(Wnd) AND {-Невидимые окна}
(GetWindow(Wnd, gw_Owner) = 0) AND {-Дочернии окна}
(GetWindowText(Wnd, buff, sizeof(buff)) <> 0) {-Окна без заголовков}
THEN BEGIN
GetWindowText(Wnd, buff, sizeof(buff));
d:=(StrPas(buff));
if d=application.Title then
if Application.MessageBox("эта программа уже запущена"+#13+ "запустить еще одну", "предупреждение",MB_YESNO) = IDNO then
Application.Terminate;
END;
Wnd := GetWindow(Wnd, gw_hWndNext);
END;
application.ShowMainForm:=True;
end;
← →
Knight (2003-06-15 22:58) [4]А чем плохи FindWindow и FindWindowEx?
Если окно нашлось выносим его на передний план через его HWND и выхдим из проги, если не нашлось то как обычно...
Хотя вариантов довольно много, а вот реестр засирать разной гадостью наверно не стоит... если на то пошло, то чем плох ini, но тоже не в каталоге Винды, а в директории программы :)
← →
Pat (2003-06-15 23:20) [5]>А чем плохи FindWindow и FindWindowEx?
В какой-то статье, кажись, даже на этом сайте, как раз и объясняется чем они плохи
← →
Knight (2003-06-15 23:25) [6]>> Pat © (15.06.03 23:20)
> В какой-то статье, кажись, даже на этом сайте
Хороший пост... я пропёрся :)
← →
panov (2003-06-16 18:40) [7]
function isRunning(aUniqueString:String): Boolean;
var
hMutex: THandle;
begin
Result := False;
hMutex := CreateMutex(nil,False,PChar(aUniqueString));
if GetLastError = ERROR_ALREADY_EXISTS then
begin
Result := True;
CloseHandle(hMutex);
end;
end;
← →
Malder (2003-06-16 19:42) [8]1) FAQ (mutex)
2) при запуске программы записываешь, например, в реестр, запись..ну скажем "1"..при завершении программы записываешь "0"..
вот...и еще вначале проверяешь есть такая запись.. если в ней 0 тогда работаем, если 1 выдаем сообщение "Типа, уже работаем " :)
/придумал еще в школе
Оффигенно. Более глупого способа, наверное, ты придумать не мог (в школе все таки). Если твоя программа завершится некорректно (или хотя бы в районе отключат свет, а упсы то нету), то в дальнейшем юзер просто не сможет запустить программу.
Тоже относится ко всяким файлам и т.д.
3) А чем плохи FindWindow и FindWindowEx?
если твоя программа достаточно долгое время грузится (в любом случае она какое-то время грузится), но окно еще не создано, то может загрузится второй экземпдяр.
Кто-то скажет - это время мало. Тем не менее на 9x виндах при достаточной загрузке компьютера на своем k6-333 я смог открыть два одинаковых соединения (удаленный доступ).
И поведение, кстати, было достаточно странным. Если одним "окошком" начинать соединяться, то нажав во втором окошке Соединиться можно сразу получить "Соединение установлено". Хотя реальное соединение только в процессе. Вот так.
← →
Юрий Зотов (2003-06-16 19:54) [9]В дополнение к Malder © (16.06.03 19:42).
Насчет долгого времени загрузки - большие программы, подгружающие многие DLL, плагины и пр. запросто могут грузиться несколько секунд. А если при загрузке идет, например, коннект с какой-это БД и получение от нее каких-до данных - то еще дольше.
← →
Pat (2003-06-16 22:05) [10]>Хороший пост... я пропёрся :)
Из уроков 5-го класса по русскому языку я запомнил, что слово "ПропёрСя" можно "перевести" как "пропер себя"...Поздравляю
Один из заголовков статьи: "Почему не работает FindWindow"
Статья здесь:
http://rsdn.ru/article/default.asp?baseserv/avins.xml
← →
Knight (2003-06-16 22:09) [11]>> Pat © (16.06.03 22:05)
Ну вот... а то не знаю что, незнамо где... :)
А так "перевести" можно всё что угодно...
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.07.03;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c