Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;终止进程函数 我一直在搜索Win32 API的C++函数,但找不到任何。_C++_Windows_Process_Termination - Fatal编程技术网

C++;终止进程函数 我一直在搜索Win32 API的C++函数,但找不到任何。

C++;终止进程函数 我一直在搜索Win32 API的C++函数,但找不到任何。,c++,windows,process,termination,C++,Windows,Process,Termination,一般来说,我对Win32 API不太熟悉,所以我想问一下,这里有没有比我更精通的人可以给我举个例子 通过进程的PID检索进程句柄需要终止它,然后用它调用TerminateProcess 如果你不熟悉C++,C语言等价也会有帮助。回答原来的问题,为了通过PID和调用终止过程来检索进程句柄,你需要如下代码: BOOL TerminateProcessEx(DWORD dwProcessId, UINT uExitCode) { DWORD dwDesiredAccess = PROCES

一般来说,我对Win32 API不太熟悉,所以我想问一下,这里有没有比我更精通的人可以给我举个例子

  • 通过进程的PID检索进程句柄需要终止它,然后用它调用TerminateProcess

如果你不熟悉C++,C语言等价也会有帮助。

回答原来的问题,为了通过PID和调用终止过程来检索进程句柄,你需要如下代码:

BOOL TerminateProcessEx(DWORD dwProcessId, UINT uExitCode)
{
    DWORD dwDesiredAccess = PROCESS_TERMINATE;
    BOOL  bInheritHandle  = FALSE;
    HANDLE hProcess = OpenProcess(dwDesiredAccess, bInheritHandle, dwProcessId);
    if (hProcess == NULL)
        return FALSE;

    BOOL result = TerminateProcess(hProcess, uExitCode);

    CloseHandle(hProcess);

    return result;
}

请记住,TerminateProcess不允许其目标以有效状态清理和退出。在使用它之前要三思。

您只是在寻找这个WINAPI函数OpenProcess吗?将此与TerminateProcess结合起来应该不会太困难。不,我想终止正在运行的进程。这就是为什么我提到我必须首先检索它的PID。当有人给你一个链接时,阅读它。不要只是从名字上假设它的作用。事实上,OpenProcess在给定PID的情况下创建了一个进程句柄,这正是您所要求的@查尔斯:这应该是一个答案而不是一个评论。@Ben Voigt:显然这不是完整的答案,因为最后一条评论建议我们需要从某处检索PID@詹珀:你想终止哪个进程?如果不是通过PID,您如何识别它?既然您想终止一个未启动的进程,那么我想问您的第一个问题是您计划如何定位该进程。您是在寻找一个给定的可执行文件,还是会显示进程并询问用户,还是一个打开给定文件的进程,等等?如果多个进程符合该模式该怎么办?如何获取进程的PID?对于想要PID的进程,您有什么类型的标识符?这不一定是唯一的。您可能同时运行多个可执行文件实例。您可以使用EnumProcesses获取具有给定名称的进程的所有实例,或应用一些其他选择条件。请注意,这会立即返回。虽然死亡过程可能仍然持有一些锁一段时间。您可能需要使用
GetExitCodeProcess
添加一个循环,以确保进程已经停止。