Главная страница
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.018 c
1-68775
Павел Хабаров
2002-10-09 14:47
2002.10.21
Глюки с установкой


1-68736
Zioma
2002-10-10 10:28
2002.10.21
MDI форма, как модальная...


14-69011
SPeller
2002-09-30 13:11
2002.10.21
UBPFD - бесплатная база готовых решений для Delphi


8-68873
Ricks
2002-06-17 12:31
2002.10.21
Отрисовка 32 битного изображения


6-68893
Weber
2002-08-13 09:42
2002.10.21
Где-то месяца 2-3 назад здесь пролетала тема насчет создания ..