Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
7-7738
anton_cor
2003-04-22 15:31
2003.07.03
Как получить список процессов из консольного или не имеющего окна


14-7601
XobBIT
2003-06-17 23:24
2003.07.03
Мастера подскажите аналог IIS или Apache


1-7493
Иванов Сергей
2003-06-21 10:32
2003.07.03
путаница с формами


4-7759
oduvan
2003-05-02 12:41
2003.07.03
Как нажать на кнопку в другом окне


3-7340
Monk
2003-06-10 11:18
2003.07.03
Восстановление базы Access





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский