STEEL

Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору ShIvADeSt Вообщем нужен алгоритм наверно посовременней, я убиваю процесс кривовасто, имхо: Убиваем процесс по имени Код: function GetAllProcesses: Boolean; Type TEnumProcesses = Function (lpidProcess: LPDWORD; cb: DWORD; Var cbNeeded: DWORD): BOOL Stdcall; TEnumProcessModules = Function (hProcess: THandle; lphModule: LPDWORD; cb: DWORD; Var lpcbNeeded: DWORD): BOOL Stdcall; TGetModuleFileNameExA = Function (hProcess: THandle; HMODULE: HMODULE; lpFileName: PAnsiChar; nSize: DWORD): DWORD Stdcall; Var EnumProcesses : TEnumProcesses; EnumProcessModules : TEnumProcessModules; GetModuleFileNameExA: TGetModuleFileNameExA; hPSAPI : THandle; Counter, Counter1 : LongWord; PIDs : Array[0..1023] Of DWORD; pbNeeded : DWORD; ProcHandle : THandle; ModHndls : Array[0..1023] Of DWORD; mbNeeded : DWORD; ModulePath : String; withcharsub: integer; uiExitCode : UINT; begin uiExitCode := 0; Result := False; hPSAPI := LoadLibrary('PSAPI.dll'); If hPSAPI < 32 Then // oa ioeaea Begin Result := False; Exit; End; EnumProcesses := GetProcAddress(hPSAPI, 'EnumProcesses'); EnumProcessModules := GetProcAddress(hPSAPI, 'EnumProcessModules'); GetModuleFileNameExA := GetProcAddress(hPSAPI, 'GetModuleFileNameExA'); EnumProcesses(@PIDs, Length(PIDs), pbNeeded); For Counter := 0 To (pbNeeded ) - 1 Do Begin ProcHandle := OpenProcess({PROCESS_QUERY_INFORMATION + {PROCESS_VM_READ+}PROCESS_ALL_ACCESS, False, PIDs[Counter]); If ProcHandle <> 0 Then Begin If EnumProcessModules(ProcHandle, @ModHndls, Length(ModHndls), mbNeeded) Then For Counter1 := 0 To (mbNeeded Div 4) - 1 Do Begin SetLength(ModulePath, MAX_PATH); GetModuleFileNameExA(ProcHandle, ModHndls[Counter1], PChar(ModulePath), MAX_PATH); withcharsub:=Pos(ansilowercase(Process_k), ansilowercase(ModulePath)); if withcharsub<>0 then begin // Form1.memo1.Lines.add(inttostr(withcharsub)+' oaiae='+inttostr(ProcHandle)+' '+AnsiLowerCase(ModulePath)); // GetExitCodeProcess(PIDs[Counter],uiExitCode); TERMINATEPROCESS(ProcHandle,uiExitCode); // frmMain.GLastError;; end; End; // terminateprocess CloseHandle(ProcHandle); end; If Result Then break; end; FreeLibrary(hPSAPI); end; procedure ReLoadProccess(); begin GetAllProcesses; LoadProccess(Path); end; | Добавлено: ЗЫ: taskkill неохото использовать :-P Своё хочется. |