CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Blokowanie ponownego uruchomienia działającej aplikacji.

Blokowanie ponownego uruchomienia działającej aplikacji.

dział ogólny

Blokowanie ponownego uruchomienia działającej aplikacji.

Nowy postprzez Proton » poniedziałek, 9 lipca 2018, 15:29

Witam.

Środowisko C++ XE Berlin 10.1 szukam najlepszej metody zabezpieczenia przed ponownym uruchomieniem działającej już aplikacji.
Rozwiązanie które stosowałem z C++ Buildera 5 nie działa.

Do tej pory stosowałem mechanizm :
HANDLE Mutex = OpenMutex(MUTEX_ALL_ACCESS, false, "TylkoJedenEgzemplarz") ... itd

Próba ponownego uruchomienia działającej aplikacji powodowała wywołanie okna już działającej.

Będę wdzięczny za pomoc.

Ed.
Avatar użytkownika
Proton
Bladawiec
Bladawiec
 
Posty: 14
Dołączył(a): poniedziałek, 27 czerwca 2016, 10:05
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: XP,Win7
Kompilator: C++ Builder 5 , C++ Builder XE6
Gadu Gadu: 0
    Windows XPFirefox

Re: Blokowanie ponownego uruchomienia działającej aplikacji.

Nowy postprzez Mironas » wtorek, 10 lipca 2018, 10:01

Inny sposób masz tutaj:
http://programowanie.cal.pl/cyfbar/api2.html#api27

A ja zmieniam nazwę głównego okna z Form1 na niepowtarzalną, np Form_1XXABC a potem, w pliku CPP projektu (np Project1.cpp) dopisuję coś takiego:
KOD cpp:     UKRYJ  
// W pliku CPP projektu w funkcji 'WINAPI _tWinMain':
WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
  // Blokada uruchomienia kopii programu
  HWND wnd = FindWindow(L"TForm_1XXABC", NULL);
  if ( wnd )
  {
    SendMessage(wnd, WM_SYSCOMMAND, SC_RESTORE, 0);
    SetForegroundWindow(wnd);
    Application->Terminate();
  }

  // Normalne uruchomienie programu
  else
  {
    ....
 


Dodatkowo (nie jest to konieczne, ale wolę stosować w innych oknach nazwę Form1), na końcu pliku nagłówkowego głównego okna (Form_1XXABC.h), pomiędzy extern PACKAGE a ostatnim #endif dodaję taki fragment:
KOD cpp:     UKRYJ  
extern PACKAGE TForm_1Cryptext *Form_1XXABC;
//---------------------------------------------------------------------------
#ifndef Form1
#define Form1 Form_1XXABC
#endif
//---------------------------------------------------------------------------
#endif
 
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 426
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows XP
Kompilator: C++Builder XE
Gadu Gadu: 4289125
    WindowsChrome

Re: Blokowanie ponownego uruchomienia działającej aplikacji.

Nowy postprzez polymorphism » wtorek, 10 lipca 2018, 10:39

Rozwiązanie z mutexem jest dobre, tylko musisz je dać w funkcji WinMain, przed stworzeniem okna głównego.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2159
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 199
System operacyjny: Windows 7 Pro
Windows 8.1
Linux Mint 19
Kompilator: Visual Studio 2015 Community
CodeLite (MinGW)
MSYS2 (MinGW, clang)
g++
Gadu Gadu: 0
    Windows 7Firefox

Re: Blokowanie ponownego uruchomienia działającej aplikacji.

Nowy postprzez Proton » czwartek, 12 lipca 2018, 08:47

Witam jeszcze raz.

Jednak mechanizm :
HANDLE Mutex = OpenMutex(MUTEX_ALL_ACCESS, false, "TylkoJedenEgzemplarz") ... itd

działa, namieszałem podczas przenoszenia kodu do nowego środowiska ze środowiska C++ Builder 5.0.

Próba ponownego uruchomienia działającej aplikacji powoduje wywołanie okna już działającej.

Jeśli będzie zainteresowanie to przedstawię mechanizm dla środowiska C++ XE Berlin 10.1.

Dzięki za zainteresowanie tematem.

Ed.
Avatar użytkownika
Proton
Bladawiec
Bladawiec
 
Posty: 14
Dołączył(a): poniedziałek, 27 czerwca 2016, 10:05
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: XP,Win7
Kompilator: C++ Builder 5 , C++ Builder XE6
Gadu Gadu: 0
    Windows 7Firefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość

cron