Форум: "Основная";
Текущий архив: 2002.10.21;
Скачать: [xml.tar.bz2];
ВнизЗагрузка приложения Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c