Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запуск приложения, только один раз за сеанс 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]

и что я должен сделать?


Наверх

Титульная страница Поиск, карта сайта Написать письмо