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

Вниз

(повторный запуск приложения) - Stack Overflow в вин98   Найти похожие ветки 

 
Mozart   (2004-06-18 02:09) [0]

Использовал ниже написанный код для отлова повторного запуска моего приложения:

Var
Wnd : hWnd;
buff : ARRAY[0.. 127] OF Char;
begin

Begin
Wnd := GetWindow(Handle, 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 StrPas (buff) = Application.Title THEN
  BEGIN
   MessageBox(Handle,"Приложение уже запущено", "Обучающая программа", mb_Ok);
   Halt;
  END;
 END;
 Wnd := GetWindow (Wnd, gw_hWndNext);

END;
End;


в 2000 все без особых проблем, в 98 при только самом первом запуске выдает ошибку -Stack Overflow, потом стндартное окошко с ошибкой в ComCtl32.dll ...
при повторных запусках - такой ошибки не возникает, ...
только после перезагрузки...


 
Mim1 ©   (2004-06-18 03:33) [1]

В faq"е приведены болле надежные способы определения второго запуска.
В вашем случае можно заменить всю эту цепочку на findwindow до присвоения application.title.
В вашем коде нет заметных ошибок за исключением отсутствия проверки правильности выполнения GetWindowText. Второй параметр передается не как @buff а просто buff, что тоже подозрительно. Для выхода лучше не создавать окон и не выполнять application.run нежели halt. При проверке StrPasне нужна так как delphi сама замечательно кастует масив символов к строке.
Если не тяжело вриведите полный код dpr файла.
+ сделайте запись отладочного лога в файл и поределите в каком месте происходит ошибка (если в отладчике delphi этого определить невозможно).


 
grom   (2004-06-18 11:34) [2]

program Open;

uses
 Forms,
 Windows,
 Main in "Main.pas" {Form1};

{$R *.RES}

var HM: THandle;
function Check: boolean;
begin
 HM :=OpenMutex(MUTEX_ALL_ACCESS,false,"060304");
 Result := (HM <> 0);
 if HM=0then HM:=CreateMutex(nil,false,"060304");
end;

begin if Check then begin
 Application.MessageBox("&#207;&#240;&#238;&#227;&#240;&#224;&#236;&#236;&#224; &#211;&#198;&#197; &#231;&#224;&#239;&#243;&#249;&#229;&#237;&#224; !!!  "," " Open "",MB_ICONEXCLAMATION);
 Exit;
end;
// Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.
я делаю так



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

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

Наверх




Память: 0.47 MB
Время: 0.049 c
1-1087307697
Apocalepse
2004-06-15 17:54
2004.07.04
Срочно пожалуста, как сделать свою прогу поверх всех окон


14-1087294951
default
2004-06-15 14:22
2004.07.04
Ещё задачка


4-1081033213
fantomas
2004-04-04 03:00
2004.07.04
COM порт


1-1087337352
Roland88
2004-06-16 02:09
2004.07.04
Сравнение файлов реестра (HELP!!!!)


6-1083934129
Denis_ada
2004-05-07 16:48
2004.07.04
прилож. кл.–серв. для работы с файлами и папками на удал.машине