Przechwycenie uruchomienia aplikacji

0

Mam pytanie.

Patrzyłem na FAQ, ale tamtejsza odpowiedz mi nie działa. Chcę po prostu nałożyć programowo na komputer takie ograniczenie, ze przy próbie uruchomienia przez uzytkownika np xxx.exe wyskoczy błąd. Program bedzie chodzil caly czas, ale niewidoczny...

Mozecie cos poradzic ?

0

Cześć

//Funkcja sprawdza istnienie podanego procesu
FUNCTION ProcessExists(nazwa :String):Boolean;
var
 uchwyt :THandle;
 proces :TProcessEntry32;
Begin
 Result:= False;
 uchwyt:= CreateToolHelp32SnapShot(TH32CS_SNAPALL,0);
 proces.dwSize:= SizeOf(Proces);
 if Integer(Process32First(uchwyt, proces)) <> 0 then
 repeat
   if nazwa = ExtractFileName(proces.szExeFile) then Result:= True;
 until Integer(Process32Next(uchwyt, proces)) = 0;
 CloseHandle(uchwyt);
End; 

//Przykład użycia - w procedurze timera podajesz nazwe programu
PROCEDURE TForm1.TimerTimer(Sender: TObject);
Begin
 if ProcessExists('JakiśProgram.exe') then
 begin
   //...tu wpisz co ma zrobić gdy ten program jest uruchomiony
  //możesz ten proces zamknąć wtedy poszukaj osobną funkcje na zamykanie
  //procesu (jest w tutejszym FAQ)
 end;
End;
</delphi>
0

Być moze slepy jestem, ale w FAQ nie znalazłem pytania jak zabić jakiś proces.

Jeżeli takie pytanie jest w FAQ to prosze o linka. A jeżeli nie ma, to to będzie moje 2 pytanie :-P

0

choćby tu :P

0

Jest możliwośc zablokowania uruchomienia dowolnego programu poprzez dodanie do rejestru odpowiedniego klucza - pisali o tym w Ekspercie, w jednym z pierwszych numerów (niestety nie mam do nich dostepu, pisze to tylko jako wskazówkę).

0

A widzisz jednak tutaj to było

Zaglądasz tu a nie czytasz innych o co pytają.
Zbieraj ciekawe posty na przyszłość ;) wtedy wyciągniesz ze swoich
zakamarków i będzie jak znalazł ;)

Uses TlHelp32,

//Zabicie wybranego 
//podawać nazwę programu z rozszerzeniem ale bez pełnej ścieżki dostępu
FUNCTION KillTask(ExeFileName: String): Integer;
const
 PROCESS_TERMINATE = $0001;
var
 ContinueLoop    :BOOL;
 FSnapshotHandle :THandle;
 FProcessEntry32 :TProcessEntry32;
Begin
 Result:= 0;
 FSnapshotHandle:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 FProcessEntry32.dwSize:= Sizeof(FProcessEntry32);
 ContinueLoop:= Process32First(FSnapshotHandle, FProcessEntry32);
 while Integer(ContinueLoop) <> 0 do
 begin
   if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName))
       or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then
         Result:= Integer(TerminateProcess(OpenProcess(
                          PROCESS_TERMINATE, BOOL(0),
                          FProcessEntry32.th32ProcessID), 0));
   ContinueLoop:= Process32Next(FSnapshotHandle, FProcessEntry32);
   end;
End; 

//lub z podaniem pełnej ścieżki...
procedure Tform1.zabij(jaki:string);
var
 PHandle, FHandle: THandle;
 Process:TProcessEntry32;
 Done, Next: Boolean;
begin
 FHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 Process.dwSize := Sizeof(Process);
 Next := Process32First(FHandle,Process);
 while Next do
 begin
  if AnsiLowerCase(Process.szExeFile) = AnsiLowerCase(jaki) then
  begin
   PHandle:=OpenProcess(PROCESS_TERMINATE, False,
   Process.th32ProcessID);
   Done := TerminateProcess(PHandle,0);
   if not Done then
    MessageBox(Handle, 'Błąd', 'Błąd', MB_OK);
   end;
  Next := Process32Next(FHandle,Process);
  end;
  CloseHandle(FHandle);
end;
0

przecież dałem już do tego linka, to po co tu jeszcze to przepisałeś [???]

0

Ej Inter.
Ten kod do znajdowania czy aplikacja chodzi NIE działa. Przynajmniej mi nie działa :(

0

A dodałeś do uses Tlhelp32 ?

0

Dodałem.

Mam takie cos, ze na timerze co sekunde dodaje linijkę tekstu do memo. Ale nie dodaje bo chyba nie wykrywa procesu. :/

1 użytkowników online, w tym zalogowanych: 0, gości: 1