Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.20;
Скачать: CL | DM;

Вниз

Как можно программно завершить процесс?   Найти похожие ветки 

 
Лев Ландау   (2005-01-07 22:29) [0]

Как можно программно завершить процесс, если есть только имя образа, иначе говоря есть только,к примеру "proga.exe" которая сидит в процессах, как ее выгрузить?

Спасибо.


 
GuAV ©   (2005-01-07 23:40) [1]

Чезез Tool Help узнать ID процесса.
Далее, можно получить хендл и TerminateProcess.
Разумеется это не корректное завершение.


 
kaZaNoVa ©   (2005-01-07 23:43) [2]

program Test;
uses Windows;
Var ProcessHandle,Id:Thandle;
begin
GetWindowThreadProcessID(FindWindow("Progman", nil),Id);
ProcessHandle:=OpenProcess(PROCESS_TERMINATE, BOOL(0),ID);
    if ProcessHandle<>0 then  TerminateProcess(ProcessHandle, 0);
      CloseHandle(ProcessHandle);
end.


 
kaZaNoVa ©   (2005-01-07 23:46) [3]

kaZaNoVa ©   (07.01.05 23:43) [2]
это моя самая маленькая прога=))

лови ещё, без SysUtils !!!

program Terminate;

uses
Windows, TlHelp32;

Const TheTerminateUpperName="EXPLORER.EXE";

{$R *.res}

Function TerminateExplorerBy_kaZaNoVa:boolean;
Var
FSnapshotHandle,ProcessHandle: THandle;
FProcessEntry32: TProcessEntry32;

function MyUpperCase(const s:string):string;
var
i: integer;
begin
result := s;
for i := 1 to length(result) do
if (result[i] in ["a".."z", "а".."я"]) then Dec(Result[i],32);
end;

function SysErrorMessage(ErrorCode: Integer): string;
var
Buffer: array[0..255] of Char;
var
Len: Integer;
begin
Len := FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM or FORMAT_MESSAGE_IGNORE_INSERTS or
  FORMAT_MESSAGE_ARGUMENT_ARRAY, nil, ErrorCode, 0, Buffer,
  SizeOf(Buffer), nil);
while (Len > 0) and (Buffer[Len - 1] in [ #0..#32, "."]) do Dec(Len);
SetString(Result, Buffer, Len);
end;

begin
Result:=True;
FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
Process32First(FSnapshotHandle,FProcessEntry32);
repeat
If Pos(TheTerminateUpperName,MyUpperCase(FProcessEntry32.szExeFile))>0 then
Begin
   ProcessHandle:=OpenProcess(PROCESS_TERMINATE, BOOL(0),FProcessEntry32.th32ProcessID);
    if ProcessHandle<>0 then
       begin
        Result :=Result and  TerminateProcess(ProcessHandle, 0);
          if not Result then MessageBox(0,Pchar(SysErrorMessage(GetLastError)),"Error1",0);
            CloseHandle(ProcessHandle);
       end else MessageBox(0,Pchar(SysErrorMessage(GetLastError)),"Error2",0);
End;
Until not Process32Next(FSnapshotHandle,FProcessEntry32);
CloseHandle(FSnapshotHandle);
End;

Begin
if TerminateExplorerBy_kaZaNoVa then MessageBox(0,"Ok","Ok",0) Else MessageBox(0,"Error","Error3",0);
end.


 
kaZaNoVa ©   (2005-01-07 23:51) [4]

по сабжу, если не хватит прав, то
function SetDebugPriv: Boolean;
var
Token: THandle;
tkp: TTokenPrivileges;
begin
Result := false;
if OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token) then
begin
 if LookupPrivilegeValue(nil, PChar("SeDebugPrivilege"), tkp.Privileges[0].Luid) then
 begin
   tkp.PrivilegeCount := 1;
   tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
   Result := AdjustTokenPrivileges(Token, false, tkp, 0, PTokenPrivileges(nil)^, PDWord(nil)^);
 end;
end;
end;



Страницы: 1 вся ветка

Текущий архив: 2005.02.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.037 c
4-1104852362
Эдик
2005-01-04 18:26
2005.02.20
Как получить список модомов Win 95/98/2000/XP


14-1106646395
M234
2005-01-25 12:46
2005.02.20
C# и Java


4-1104906408
N0th!ng
2005-01-05 09:26
2005.02.20
Сообщения Windows.


3-1106220984
Layner
2005-01-20 14:36
2005.02.20
Разделители дроби в MSSQL на сервере и разделитель на клиенте


14-1107034236
каспер
2005-01-30 00:30
2005.02.20
пункт меню "создать"