![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запуск приложения, только один раз за сеанс Windows! [D7, XP]
mctarik © (2006-01-15 22:48:00)Собственно Сабж!
VirEx (2006-01-17 18:25:00) [1]
> [9] ss2 (17.01.06 14:18)
мьютекс убивается сразу же как только приложение создавшее его умирает, надо делать атом:
atom := GlobalAddAtom(atomtext);//устанавливаем атом
GlobalDeleteAtom(atom); //убиваем атом
//если атом не установлен то запуск программы
if GlobalFindAtom(atomtext) = 0 then
ss2 (2006-01-17 14:18:00) [2]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:= HM0;
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.
Evgeny V (2006-01-17 14:12:00) [3]Может порыться в сторону RegCreateKeyEx,, dwOptions ,REG_OPTION_VOLATILE. Проверять соответствующий ключ в рееестре. Или проверыять наличие файла, если есть то делать MoveFileEx, с dwFlags MOVEFILE_DELAY_UNTIL_REBOOT. Конечно имеет смысл защититься от и повторного запуска программы в течении одной сессии cм мьютексы, эвенты и маппед файлы
Digitman (2006-01-17 13:04:00) [4]
> mctarik © (17.01.06 12:53) [6]
> Нифига не работает!
а проанализировать код ?
прогнать под отладчиком ?
понять что в нем, почему и для чего ?
не царское это дело, так что ли ?
mctarik (2006-01-17 12:53:00) [5]
> КиТаЯц © (16.01.06 10:47) [5]
Нифига не работает! даже теоретически!
КиТаЯц (2006-01-16 10:47:00) [6]Теоретически должно работать (не проверял):
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-16 10:42:00) [7]
> gdaujk © (16.01.06 08:49) [3]
Но и не брат...
мне нужно чтоб программу можно было запустить только один раз за сеанс
Windows!
gdaujk (2006-01-16 08:49:00) [8]Смотреть в сторону мьютексов, семафоров, файлмеппингов...
PS: всё-таки краткость не сестра таланту...
Кефир87 (2006-01-16 02:29:00) [9]С сабжем согласен
Vlad (2006-01-15 23:26:00) [10]и что я должен сделать?