Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.21;
Скачать: CL | DM;

Вниз

Загрузка приложения   Найти похожие ветки 

 
KVBr ©   (2002-10-11 15:56) [0]

Загрузка приложения происходит несколько секунд. Если нетерпеливый пользователь во время загрузки кликает на иконку еще раз, то вылетает ошибка. Как этого избежать?


 
neodiX ©   (2002-10-11 16:00) [1]

Автор не я, некий "Vladimir" (damageinc@e-mail.ru)

program My1;uses Forms, Windows, Dialogs, SysUtils,var g_hAppMutex: THandle; Wnd : hWnd; buff: array [0..127] of Char; s:string; i:integer;function OneInstance: boolean;begin g_hAppMutex:=CreateMutex(nil,false,PChar("AnUniqueString"+IntToStr(GetDesktopWindow))); Result:=(WaitForSingleObject(g_hAppMutex,0)<>WAIT_TIMEOUT);end;begin Application.Initialize; Application.Title := "SmartDecoder"; Application.HelpFile := "Decoder.hlp"; //создаём инстанс, если его ещё нету на текущем рабочем столе g_hAppMutex:=0; if OneInstance then begin
Application.CreateForm(TMainFrm, MainFrm); Application.R!
un; end; if LongBool(g_hAppMutex) then //если уже есть begin ReleaseMutex(g_hAppMutex); CloseHandle(g_hAppMutex); if ParamStr(1)="" then ShowMessage("Программа уже запущена на этом рабочем столе. Нажмите кнопку "OK" для передачи управления уже запущенной копии программы."); Wnd:=GetWindow(GetTopWindow(0),gw_HWndFirst); while Wnd<>0 do begin //Если не собственное и не дочернее окно if (Wnd<>Application.Handle)and(GetWindow(Wnd,gw_Owner)=0) then begin
GetWindowText(Wnd,buff,sizeof(buff!
)); if Copy(StrPas(buff),1,12)="SmartDecoder" then if Wnd=GetWindowLong(Wnd,GWL_USERDATA) then begin ShowWindow(Wnd,SW_ShowNormal); SetForegroundWindow(Wnd); i:=1; while ParamStr(i)<>"" do begin s:=ParamStr(i);
PostMessage(Wnd,WM_OPEN_FILE,GlobalAddAtom(PChar(s)),0); &!
nbsp; inc(i); end; Application.Terminate; Exit; end; end; Wnd:=GetWindow(Wnd,gw_hWndNext); end; end;end.
Если программа уже запущена, управление будет передано существующей
копии.


 
neodiX ©   (2002-10-11 16:04) [2]

Блин! Короче я тебе майл сейсас вышлю...


 
REA ©   (2002-10-11 16:05) [3]

Ну замутили... я как то попроще делал.


 
neodiX ©   (2002-10-11 16:07) [4]

Согласен есть и проще, но иногда главное что бы рабатоло.


 
Pumpkin   (2002-10-11 16:08) [5]

http://delphi.mastak.ru/cgi-bin/faq.pl?look=1&id=988619824&n=15


 
Zemal ©   (2002-10-11 16:10) [6]

Я предложу более простой вариант без всяких заморочек:

program Program1;

uses
Forms,
Windows,
Dialogs,
uMain in "uMain.pas" {fMain};

{$R *.res}

var
UniqueMapping: THandle;
begin
UniqueMapping := CreateFileMapping($ffffffff,
nil, PAGE_READONLY, 0, 32, "MyMap");
if UniqueMapping = 0 then
begin
ShowMessage("Ошибка выделения памяти!");
Halt;
end else
if GetLastError = ERROR_ALREADY_EXISTS then
begin
ShowMessage("Вторую копию запускать нельзя!");
Halt;
end;
Application.Initialize;
Application.CreateForm(TfMain, fMain);
Application.Run;
end.

Пользуйся наздоровье :).




Страницы: 1 вся ветка

Текущий архив: 2002.10.21;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
4-69092
SPeller
2002-09-04 04:42
2002.10.21
Color Mapping


1-68718
Itap
2002-10-09 14:36
2002.10.21
RichEdit и Excel


1-68715
ultrasuper_asd
2002-10-10 23:44
2002.10.21
Как узнать абсолютный номер символа?


14-68946
_Nicola_
2002-09-27 16:35
2002.10.21
Подкиньте компонент для ani GIF


3-68644
Roma111
2002-09-30 13:56
2002.10.21
Проверка имени и пароля