program Project1; uses Windows, Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas' {Form2}; {$R *.res} procedure BringItToFront(hWindow : HWND); var fgThread : Cardinal; myAppThread : Cardinal; begin fgThread := GetWindowThreadProcessId(GetForegroundWindow, nil); myAppThread := GetCurrentThreadId; AttachThreadInput(fgThread, myAppThread, True); ShowWindow(hWindow, SW_RESTORE); BringWindowToTop(hWindow); // Это будет работать гарантированно AttachThreadInput(fgThread, myAppThread, False); end; const MainFormCaption = 'Test'; var hMutex : THandle; hPrevWin : HWND; begin ReportMemoryLeaksOnShutdown := True; Application.Initialize; Application.Title := 'MyProgram'; hMutex := CreateMutex(nil, True, PChar(Application.Title)); if (GetlastError = ERROR_ALREADY_EXISTS) or (GetlastError = ERROR_ACCESS_DENIED) then begin Application.MessageBox('Программа уже работает!', PChar(Application.Title), MB_ICONWARNING or MB_OK); // Ищем не Application.Title, а заголовок формы hPrevWin := FindWindow('TForm1', MainFormCaption); if hPrevWin <> 0 then BringItToFront(hPrevWin); Exit; end; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm2, Form2); Application.Run; end.
четверг, 26 декабря 2013 г.
Запрет запуска второй копии программы
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий