Форум: "Основная";
Текущий архив: 2002.06.03;
Скачать: [xml.tar.bz2];
ВнизКак запретить запуск копии программы? Найти похожие ветки
← →
antistatic (2002-05-22 15:47) [0]Как запретить запуск копии программы?
← →
android (2002-05-22 15:53) [1]А на С++ пойдет?
← →
antistatic (2002-05-22 15:55) [2]2android
>>А на С++ пойдет?
нет. только delphi
← →
Andrey007 (2002-05-22 15:57) [3]FAQ
← →
antistatic (2002-05-22 16:13) [4]Ну а можно код, ато не нашёл.
← →
Song (2002-05-22 16:28) [5]******************** dpr ****************
Uses ... ;
Const NamedMutex="OneOnly";
Var WND:HWND;
Function CheckInstance(Name:PChar):Integer;
Var R:integer;
Mutex:Integer;
Begin
Mutex:=CreateMutex(nil,true,Name);
R:=GetLastError();
IF r<>0 then Result:=0
else Result:=Mutex;
End;
{$R *.RES}
With Application Do
Begin
IF (CheckInstance(NamedMutex)=0) and (Findwindow(nil,"AppTitle")<>0) then
Begin
ShowMessage("Второй раз не гружусь!");
Exit;
End;
Title:="AppTitle";
Initialize;
CreateForms(...);
Run;
End;
Работает не в 100% но с наибольшей стпепенью вероятности.
← →
Song (2002-05-22 16:30) [6]WND в данном случае не нужен (некорректно вырезал из проги)
← →
antistatic (2002-05-22 16:30) [7]2Song
А где это писать?
← →
antistatic (2002-05-22 16:37) [8]Просто я не очень хорошо разбираюсь в программировании.
Мне бы поподробнее что куда.
← →
Song (2002-05-22 16:37) [9]Я же написал: в dpr файле.
← →
antistatic (2002-05-22 16:40) [10]Не, я понял, что в dpr файле.
Я имею в виду что после чего.
← →
Song (2002-05-22 16:45) [11]Ты присмотрись внимательно к примеру там всё есть.
← →
Andrey007 (2002-05-22 16:47) [12]А я сделал так: в dpr написал uses Only,... (Only - первый в разделе uses). А Only.pas имеет вид:
unit Only;
interface
implementation
uses Windows;
var Mutex: THandle;
MutexName: array[0..255] of Char;
function StopLoading : boolean;
var L,I : integer;
begin // В качестве уникального имени мьютекса используем полный путь
// к исполняемому файлу приложения
L:=GetModuleFileName(MainInstance,MutexName,SizeOf(MutexName));
// В имени мьютекса нельзя использовать обратные слэши, поэтому заменяем их на прямые
for I:=0 to L-1 do if MutexName[I]="\" then MutexName[I]:="/";
Mutex:=CreateMutex(nil,false,MutexName);
Result:=(Mutex=0) or // Если мьютекс не удалось создать
(GetLastError=ERROR_ALREADY_EXISTS); // Если мьютекс уже существует
end;
procedure ShowErrMsg;
const PROGRAM_ALREADY_RUN="Программа уже исполняется";
begin
MessageBox(0,PROGRAM_ALREADY_RUN,MutexName,MB_ICONSTOP or MB_OK)
end;
initialization
if StopLoading then
begin
ShowErrMsg;
// Так как никаких инициализаций еще не производилось, то
// спокойно используем для завершения программы Halt -
// finalization все равно выполнится
halt;
end;
finalization
if Mutex<>0 then CloseHandle(Mutex)
end.
Этот вариант блокирует повторный запуск программы в том случае, когда на иконку программы лишний раз кликнули мышью или нажали Enter (что мне и надо). Если же эту программу запускать из разных каталогов, то эта защита не сработает.
← →
antistatic (2002-05-22 17:00) [13]Не. не помогает ни то, ни то.
В случае Song, пишет, что не знает, что такое CreateMutex, а в случае Andrey007, сообщение выдаётся, но и программа повторно запускается.
← →
antistatic (2002-05-22 17:15) [14]может можно как-то ещё?
← →
McSimm (2002-05-22 17:28) [15]Можно. Есть много способов.
только наверное тоже не помогут.
Это я к тому, что CreateMutex описан в модуле Windows.
← →
Andrey007 (2002-05-22 17:30) [16]У меня второй раз не запускается если лишний раз нажать на иконку программы. Как Вы её запускали?
А насчёт как-то ещё - ищите в FAQ.
← →
Song (2002-05-22 19:17) [17]Вот... напишешь полностью 100% рабочий код и не хватает ума вставить... ну что же.. пошлите мне что ли Ваш dpr, я вставлю Вам этот отрывок... :-/
← →
Fay (2002-05-22 20:11) [18]2Song
Им так прикольней.
Те, кто хочет пример, сначала зайдут в Help, потом в FAQ, потом снова в Help.
А здесь - это поболтать (во первых).
← →
Sergej (2002-05-22 20:56) [19]program Project;
uses
Forms,
Windows,
UMain in "UMain.pas" {...},
...
var
H: hWnd;
PId: DWORD; // ProzessId der schon laufenden Application
Mutex : tHandle;
begin
// Test ob Programm schon l
← →
antistatic (2002-05-22 21:11) [20]2Sergey
Вай, сенкс!
← →
Юрий Зотов (2002-05-22 21:13) [21]http://www.delphikingdom.com/helloworld/samples_win.htm
Там несколько готовых вариантов решения. И мой совет - не используйте блокировку через поиск окна (FindWindow и т.п.). Почему - уже когда-то обсуждалось, повторяться не хочется. Скажу лишь, что это недостаточно надежно.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.06.03;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.007 c