Skocz do zawartości
daves

Jak W C++ Builder Zatrzymać Zabijanie Procesu

Rekomendowane odpowiedzi

Witam.

 

Napisalem sobie cos w stylu wylaczania kompa o okreslonej godzinie na haselko.

Czyli ustawiajac godzine i wprowadzajac haslo anulowanie wyłączenia mozliwe jest po wprowadzeniu hasla.

zablokowalem wylaczenei aplikacji droga alt+f4

Form1->OnCloseQeury()... CanClose = false;

lecz bystrzak zauwazy ze wywolanie ctrl+alt+del moze zakilowac proces tak samo jak wywolanie funkcji "CreateToolHelp32SnapShot() " przed ktorymi nie mam zadnej blokady.

 

Poszperalem w necie i znalazlem mozliwosc oszukania systemu i zablokowanie "trzec kroli" w ten sposob:

int dummy; SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, &dummy, 0);

Ale nie przeszlo u mnie na XP (na 98 nie probowalem)

Tak wiec jeszcze jeden sposob dorwalem na necie (na innym forum) ktory w kolei usuwa nasza aplikacje z listy managera zadan

a mianowicie:

W pliku naglowkowym formy dokonujemy takiej zmiany:

//-----------------------------------------------  typedef DWORD (__stdcall *pRegFunction)(DWORD, DWORD);  // dodany wpisclass TForm1 : public TForm { __published:   // IDE-managed Components         void __fastcall FormCreate(TObject *Sender);         void __fastcall FormClose(TObject *Sender, TCloseAction &Action); private:   // User declarations     HINSTANCE hKernelLib;                            //    pRegFunction RegisterServiceProcess;      //         dodane te dwa wpisypublic:      // User declarations         __fastcall TForm1(TComponent* Owner); }; //-----------------------------------------------
Nastepnie w pliku cpp na poczatku definiujemy:

#define RSP_SIMPLE_SERVICE     1 #define RSP_UNREGISTER_SERVICE 0
I glowne blokowanie przeprowadzamy tak:

   hKernelLib = LoadLibrary("kernel32.dll");     if(hKernelLib)     {      RegisterServiceProcess =           (pRegFunction)GetProcAddress(hKernelLib,                                     "RegisterServiceProcess");         if(RegisterServiceProcess)             RegisterServiceProcess(GetCurrentProcessId(),                                    RSP_SIMPLE_SERVICE);     }
ten sposob elegancko mi usuwa moja aplikacje z listy magagera zadan ale tylko pod systemem Windows 9x, na systemie XP juz to nie dziala ;/

 

Wpadlem tez na pomysl aby na formie w zdarzeniu OnDestry() przydzielic pamiec do tej samej formy i stworzyc ja od nowa ale to mi nie wychodzi za bardzo.

Mam nadzieje ze ktos juz sie zetnal z tym problemem i zna wyjscie z problemu

Po prostu chce uniemozliwic zakilowanie mojej aplikacji z zewnatrz na XP.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

ogolnie to systemy operacyjna sa od tego by nie dalo sie takich przekretow robic, bo swiat bylby zatrojanowany ( i tak jest ).

 

stworz nowa aplikacje, ktora pelni funkcje watchera, a potem za pomoca jednej aplikacji sprawdzaj czy druga zostala zamknieta i na odwrot. Jesli tak to otwieraj.

 

no i jeszcze musisz jakos rozwiazac zachowywanie danych wprowadzonych.

Rozwiazanie 1: Zapisujesz to gdzies na dysku ;)

Rozwiazanie 2: Za pomoca socketow przesylasz to miedzy dwoma procesami. Aplikacja 1 odpala watchera i wysyla mu dane. Jesli watcher zostanie zamkniety to jeszcze raz go odpala i znow mu wysyla. Jesli aplikacja zostanie zamknieta to watcher odpala aplikacje i wysyla jej dane.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...