Текущий архив: 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("Ïðîãðàììà ÓÆÅ çàïóùåíà !!! "," " Open "",MB_ICONEXCLAMATION);
Exit;
end;
// Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
я делаю так
Страницы: 1 вся ветка
Текущий архив: 2004.07.04;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.023 c