Estou desenvolvendo um sistema p/ lan house e o mesmo ao final do tempo deve fechar todas as aplicações abertas. Tenho o nome.exe de todas as aplicações que podem ser usadas nesta máquina gravadas nem banco de dados. Tenho tb esta rotina que peguei aqui no clube mesmo:
uses TLHelp32;
implementation
{$R *.dfm}
{ As variáveis }
var
Process_Entry_32 : TProcessEntry32;
Handle_Snap_Shot : THandle;
ProcessHandle : THandle;
{ Iniciar as variáveis }
Procedure IniciarVars();
Begin
Handle_Snap_Shot := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS,0);
Process_Entry_32.dwSize := SizeOf(TProcessEntry32);
Process32First(Handle_Snap_Shot, Process_Entry_32);
End;
Procedure ListarProcessos;
var
i : integer;
Begin
i := 0;
Repeat
With Form1.ListBox1.Items do begin
Add(Format(´¬s´,[ExtractFileName(Process_Entry_32.szExeFile)]));
{Add(Format(´Path: ¬s´,[Process_Entry_32.szExeFile]));
Add(Format(´PID: ¬x´, [Process_Entry_32.TH32ProcessID]));
Add(Format(´Parent PID: ¬x´, [Process_Entry_32.TH32ParentProcessID]));
Add(Format(´Size: ¬x´, [Process_Entry_32.dwSize]));
Add(Format(´Usage: ¬d´, [Process_Entry_32.cntUsage]));
Add(Format(´Default Heap: ¬x´, [Process_Entry_32.th32DefaultHeapID]));
Add(Format(´MID: ¬x´, [Process_Entry_32.th32ModuleID]));
Add(Format(´Threads: ¬x´, [Process_Entry_32.cntThreads]));
Add(Format(´PriClassBase: ¬d´, [Process_Entry_32.pcPriClassBase]));
Add(Format(´Flags: ¬x´, [Process_Entry_32.dwFlags]));
Add(´´);
Form1.Label1.Caption:=´Há ´+ IntToStr(i) + ´ processos ativos.´;
i := i + 1; }
End;
Until (not Process32Next(Handle_Snap_Shot, Process_Entry_32));
CloseHandle(Handle_Snap_Shot);
End;
{
Terminar Processo
Obtém o HANDLE para o processo em questão através de seu ID
e termina o processo após confirmação do usuário
}
Procedure TerminarProcesso;
Begin
Repeat
If (ExtractFileName(Process_Entry_32.szExeFile) =
Form1.ListBox1.Items[Form1.ListBox1.ItemIndex]) then begin
ProcessHandle := OpenProcess(PROCESS_TERMINATE, TRUE, Process_Entry_32.TH32ProcessID);
{ If MessageDlg(
PChar(Format(´O processo ¬s, ID ¬x será terminado. Continuar ?´,
[Process_Entry_32.szExeFile, Process_Entry_32.TH32ProcessID])),
mtWarning, [MBOK, MBCANCEL], 0) = IDOK then begin }
TerminateProcess(ProcessHandle,0);
// End;
CloseHandle(ProcessHandle);
End;
Until (not Process32Next(Handle_Snap_Shot, Process_Entry_32));
CloseHandle(Handle_Snap_Shot);
End;
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Clear;
IniciarVars();
ListarProcessos();
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
IniciarVars();
TerminarProcesso();
end;
end.
Essa unit carrega uma listbox o nome.exe de todos os processos em execução. Gostaria de comparar com meu banco de dados e o que estiver cadastrado finalizar, o que não tiver continuar. Não estou conseguindo fazer essa rotina.