Co do pierwszego pytania to do sprawdzenia czy jakiś proces jest uruchomiony możesz się posłużyć funkcją
FindWinow(NazwaKlasyOkna, TytulOknaProgramu); A jak ktoregoś parametru nie używasz to podajesz nil.
Jest też inna metoda na sprawdzenie czy konkretny plik exe jest uruchomiony. Do uses dodajesz TlHelp32 i:
function ProcessExists(ExeFileName: string): boolean;
var
ContinueLoop : BOOL;
FSnapshotHandle : THandle;
FProcessEntry32 : TProcessEntry32;
begin
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
Result := False;
while Integer(ContinueLoop) <> 0 do
begin
if ((AnsiUpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
AnsiUpperCase(ExeFileName)) or (AnsiUpperCase(FProcessEntry32.szExeFile) =
AnsiUpperCase(ExeFileName))) then
begin
Result := True;
end;
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;
Natomaist proces możesz zamknąć wysyląjąc do niego następujący komunikat. Uchwyt do procesu musisz
wcześniej pobrać poprzez funkcję FindWind, o której wspomniałem na początku mojego posta. Przykład:
var
WinAmpHandle : THandle;
begin
WinAmpHandle := FindWindow('Winamp v1.x', nil);
SendMessage(WinAmpHandle, WM_SYSCOMMAND, SC_CLOSE, 0);
end;
To zamknie WinAmp'a. Możesz też ubić szybko proces podając nazwę pliku exe aplikacji poniższej funkcji:
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;
CloseHandle(FSnapshotHandle);
end;
A co do zabezpieczenia programu hasłem to zrób osobną formatkę, która pokaże się po uruchomieniu tej
Twojej aplikacji z polem edycyjnym do wpisania hasła i dopóki hasło nie będzie poprawne to nie rób nic po
kliknięciu na jakiś przycisk "OK". Kiedy użytkownik wpisze poprawne hasło pokaż inną lub główną formatkę.
Tylko muszę Cię uprzedzić, że jeżeli użyjesz zwykłego porównania to byle cracker, nawet taki amator jak ja,
który ostatnio łamał cokolwiek (oprócz nogi :)) jakiś program z 5 lat temu to "rozniesie" Twoją protekcję imo
w ciągu kilku minut maks. Dlatego program trzeba na prawdę dobrze spakować i zabezpieczyć jakoś, ale ja
się na tym nie znam, potrafię jedynie odpalić DeDe i poradzić sobie z jakimś niespakowanym shitem, takim
jak choćby AntyMigacz. Nikomu niepotrzebny program, za który autor chce 30 złorych żeby grając sobie na
kurnik.pl ktoś nie widział że opuszczamy okno aplikacji. Program po wczytaniu do DeDe pokazuje nam, jak
na dłoni co w nim siedzi. Nie trzeba się nawet bawić żadnym debuggerem. Ale to tylko przykład, nie chcę tu
Ciebie zniechęcać, może zabezpieczysz jakoś swój program, ale w tym może niech pomogą Tobie tutaj inni.