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

Вниз

Как запретить второй запуск программы?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
8-7559
programmer_kia
2003-03-11 15:49
2003.07.03
конвертирование bitmap из RGB24 в YUY2(YUV422)...help


1-7386
Onward
2003-06-22 23:07
2003.07.03
Как можно изменить размеры клиентской области рабочего стола?


6-7589
Knight
2003-04-15 23:19
2003.07.03
Как организовать связь чатов в локальной сети?


14-7675
Солер
2003-06-16 15:46
2003.07.03
Ох уж эти даты :(


14-7702
gn
2003-06-17 13:12
2003.07.03
*.tbl