как програмно убить задачу на этом же компютере ?
От: alex_dorin Россия  
Дата: 04.02.03 13:15
Оценка:
как програмно убить задачу на этом же компютере
из другой задачи?
alex_dorin@rambler.ru
Re: как програмно убить задачу на этом же компютере ?
От: Awaken Украина  
Дата: 04.02.03 13:21
Оценка:
Здравствуйте, alex_dorin, Вы писали:

AD>как програмно убить задачу на этом же компютере

AD>из другой задачи?

безусловное прибивание процесса:
TerminateProcess(Handle, Error);

есть еще ExitProcess
Re: как програмно убить задачу на этом же компютере ?
От: TSS Россия http://www.sdl.ru
Дата: 04.02.03 13:23
Оценка:
Здравствуйте, alex_dorin, Вы писали:

AD>как програмно убить задачу на этом же компютере

AD>из другой задачи?

Испльзуй TerminateProcess:
BOOL TerminateProcess(
  HANDLE hProcess, // handle to the process
  UINT uExitCode   // exit code for the process
);
Signed, [TSS] /SDL/
Re[2]: как програмно убить задачу на этом же компютере ?
От: alex_dorin Россия  
Дата: 04.02.03 13:34
Оценка:
Здравствуйте, TSS, Вы писали:

TSS>Здравствуйте, alex_dorin, Вы писали:


AD>>как програмно убить задачу на этом же компютере

AD>>из другой задачи?

TSS>Испльзуй TerminateProcess:

TSS>
TSS>BOOL TerminateProcess(
TSS>  HANDLE hProcess, // handle to the process
TSS>  UINT uExitCode   // exit code for the process
TSS>);
TSS>


если можно поподробнее
как получить HANDLE hProcess зная имя задачи ?
alex_dorin@rambler.ru
Re[3]: как програмно убить задачу на этом же компютере ?
От: TSS Россия http://www.sdl.ru
Дата: 04.02.03 13:37
Оценка:
Здравствуйте, alex_dorin, Вы писали:

AD>если можно поподробнее

AD>как получить HANDLE hProcess зная имя задачи ?

Handle процесса получается из его ID через OpenProcess():
HANDLE OpenProcess(
  DWORD dwDesiredAccess,  // access flag
  BOOL bInheritHandle,    // handle inheritance option
  DWORD dwProcessId       // process identifier
);


dwProcessId определяется массой способов, например через перечисление списка процессов посредством функции:
HANDLE WINAPI CreateToolhelp32Snapshot(
  DWORD dwFlags,       
  DWORD th32ProcessID  
);

с dwFlags == TH32CS_SNAPPROCESS.
Signed, [TSS] /SDL/
Re[4]: как програмно убить задачу на этом же компютере ?
От: alex_dorin Россия  
Дата: 04.02.03 13:48
Оценка:
Здравствуйте, TSS, Вы писали:

TSS>Здравствуйте, alex_dorin, Вы писали:


AD>>если можно поподробнее

AD>>как получить HANDLE hProcess зная имя задачи ?

TSS>Handle процесса получается из его ID через OpenProcess():

TSS>
TSS>HANDLE OpenProcess(
TSS>  DWORD dwDesiredAccess,  // access flag
TSS>  BOOL bInheritHandle,    // handle inheritance option
TSS>  DWORD dwProcessId       // process identifier
TSS>);
TSS>


TSS>dwProcessId определяется массой способов, например через перечисление списка процессов посредством функции:

TSS>
TSS>HANDLE WINAPI CreateToolhelp32Snapshot(
TSS>  DWORD dwFlags,       
TSS>  DWORD th32ProcessID  
TSS>);
TSS>

TSS>с dwFlags == TH32CS_SNAPPROCESS.

буду благодарен за более подробный код для убивания задачи по ее символьному имени.
alex_dorin@rambler.ru
Re[5]: как програмно убить задачу на этом же компютере ?
От: TSS Россия http://www.sdl.ru
Дата: 04.02.03 14:06
Оценка: 11 (2)
Здравствуйте, alex_dorin, Вы писали:

AD>буду благодарен за более подробный код для убивания задачи по ее символьному имени.


Боже... =)
#include <windows.h>
#include <Tlhelp32.h>

void main (void)
{
    HANDLE hSnapShot = CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0);
    if (hSnapShot == INVALID_HANDLE_VALUE)
        return;
        
    PROCESSENTRY32 pe32 = { 0 };
    pe32.dwSize = sizeof (pe32);

    for (BOOL b = Process32First (hSnapShot, &pe32); b != FALSE; b = Process32Next (hSnapShot, &pe32))
    {
        // выносим taskmgr.exe...
        //
        if (lstrcmp (pe32.szExeFile, "taskmgr.exe") == 0)
        {
            HANDLE hProcess = OpenProcess (
                PROCESS_TERMINATE,
                FALSE,
                pe32.th32ProcessID
            );
            
            if (hProcess != NULL)
            {
                TerminateProcess (hProcess, 0);
                CloseHandle (hProcess);
            }
        }
    } 
    
    CloseHandle (hSnapShot);
}
Signed, [TSS] /SDL/
Re[5]: как програмно убить задачу на этом же компютере ?
От: Awaken Украина  
Дата: 04.02.03 14:55
Оценка:
а еще можно использовать EnumProcesses, EnumProcessModules и GetModuleBaseName

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/perfmon/base/enumerating_all_processes.asp
Re: как програмно убить задачу на этом же компютере ?
От: Carc Россия http://www.amlpages.com/home.php
Дата: 04.02.03 20:52
Оценка:
Здравствуйте, alex_dorin, Вы писали:

AD>как програмно убить задачу на этом же компютере

AD>из другой задачи?
Кроме того для ME\2000\XP cуществуют функции OpenThread(идентификатор_потока) возвращает хендл потока. А зная хендл потока (даже чужого процесса) можно убить ИМЕННО поток через функцию TerminateThread(хендл_потока). Но эти функции только для WinME\2000\XP. В 9x их просто нет.
Aml Pages Home
Re: как програмно убить задачу на этом же компютере ?
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 05.02.03 06:48
Оценка:
Здравствуйте, alex_dorin, Вы писали:

AD>как програмно убить задачу на этом же компютере

AD>из другой задачи?

а в Q&A заглянуть?

Как программно завершить другое приложение?
Как получить список запущенных приложений?
Как получить список запущенных процессов?
Re[2]: как програмно убить задачу на этом же компютере ?
От: alex_dorin Россия  
Дата: 05.02.03 11:50
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>Здравствуйте, alex_dorin, Вы писали:


AD>>как програмно убить задачу на этом же компютере

AD>>из другой задачи?

OE>а в Q&A заглянуть?


OE>Как программно завершить другое приложение?

OE>Как получить список запущенных приложений?
OE>Как получить список запущенных процессов?

Благодарю всех особо TSS
alex_dorin@rambler.ru
Re[6]: как програмно убить задачу на этом же компютере ?
От: mit  
Дата: 19.02.03 11:00
Оценка:
Здравствуйте, TSS, Вы писали:

TSS>    
TSS>    CloseHandle (hSnapShot);
TSS>}


Возможно я не прав, но вот что пишут в MSDN о этому поводу:

The snapshot returned is a copy of the current state of the system. To close a snapshot call the CloseToolhelp32Snapshot function. Do not call the CloseHandle function to close the snapshot call. Calling CloseHandle to close the snapshot call generates a memory leak.

Re[7]: как програмно убить задачу на этом же компютере ?
От: mit  
Дата: 19.02.03 11:09
Оценка:
mit>
TSS>>    
TSS>>    CloseHandle (hSnapShot);
TSS>>}
mit>


mit>Возможно я не прав, но вот что пишут в MSDN о этому поводу:

mit>

mit>The snapshot returned is a copy of the current state of the system. To close a snapshot call the CloseToolhelp32Snapshot function. Do not call the CloseHandle function to close the snapshot call. Calling CloseHandle to close the snapshot call generates a memory leak.


упс... в Windows CE случайно занесло.

в обычном действительно:

To destroy the snapshot, use the CloseHandle function.

извините...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.