Форум: "Начинающим";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];
ВнизЗапуск приложения, только один раз за сеанс Windows! Найти похожие ветки
← →
mctarik © (2006-01-15 22:48) [0]Собственно Сабж!
← →
Vlad © (2006-01-15 23:26) [1]и что я должен сделать?
← →
Кефир87 © (2006-01-16 02:29) [2]С сабжем согласен
← →
gdaujk © (2006-01-16 08:49) [3]Смотреть в сторону мьютексов, семафоров, файлмеппингов...
PS: всё-таки краткость не сестра таланту...
← →
mctarik © (2006-01-16 10:42) [4]
> gdaujk © (16.01.06 08:49) [3]Но и не брат...
мне нужно чтоб программу можно было запустить только один раз за сеанс
Windows!
← →
КиТаЯц © (2006-01-16 10:47) [5]Теоретически должно работать (не проверял):
var MemHnd:HWND;
begin
MemHnd:=CreateFileMapping(HWND($FFFFFFFF), nil, PAGE_READWRITE, 0, 4, PAnsiChar(Application.EXEname));
if (GetLastError <> ERROR_ALREADY_EXISTS)
then begin
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end else begin
Application.MessageBox("Повторный запуск невозможен (перезагрузите Виндуса)", PAnsiChar("НЕЛЬЗЯ!!!"), MB_OK+MB_ICONINFORMATION);
end;
end.
зы. Это все в DPR-ке
← →
mctarik © (2006-01-17 12:53) [6]
> КиТаЯц © (16.01.06 10:47) [5]
Нифига не работает! даже теоретически!
← →
Digitman © (2006-01-17 13:04) [7]
> mctarik © (17.01.06 12:53) [6]
> Нифига не работает!
а проанализировать код ?
прогнать под отладчиком ?
понять что в нем, почему и для чего ?
не царское это дело, так что ли ?
← →
Evgeny V © (2006-01-17 14:12) [8]Может порыться в сторону RegCreateKeyEx,, dwOptions ,REG_OPTION_VOLATILE. Проверять соответствующий ключ в рееестре. Или проверыять наличие файла, если есть то делать MoveFileEx, с dwFlags MOVEFILE_DELAY_UNTIL_REBOOT. Конечно имеет смысл защититься от и повторного запуска программы в течении одной сессии cм мьютексы, эвенты и маппед файлы
← →
ss2 (2006-01-17 14:18) [9]program V;
uses
Forms,
Windows,
Main in "Main.pas" {Form1},
Unit2 in "Unit2.pas" {Form2};
{$R *.RES}
const
MUTEX_NAME ="{66E4DAD1-1D11-486C-AAD0-100A5F9271DC}";// ctrl+shift+G
var
HM:THandle;
function Cl :boolean;
begin
HM:= OpenMutex(MUTEX_ALL_ACCESS, false, MUTEX_NAME);
Result:= HM<>0;
if HM=0 then HM:= CreateMutex(nil, false, MUTEX_NAME)
else ReleaseMutex(HM);
end;
begin
if Cl then begin
Application.MessageBox("Ïðîãðàììà "V" ÓÆÅ çàïóùåíà !!! "," "V"", MB_ICONEXCLAMATION);
Exit;
end;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
← →
VirEx © (2006-01-17 18:25) [10]
> [9] ss2 (17.01.06 14:18)
мьютекс убивается сразу же как только приложение создавшее его умирает, надо делать атом:
atom := GlobalAddAtom(atomtext);//устанавливаем атом
GlobalDeleteAtom(atom); //убиваем атом
//если атом не установлен то запуск программы
if GlobalFindAtom(atomtext) = 0 then
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.013 c