`
ruilin215
  • 浏览: 1142656 次
  • 性别: Icon_minigender_2
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

[Delphi]如何通过进程句柄判断该进程是否已退出?

阅读更多
GetExitCodeProcess
看似可以,但是仔细看MSDN,有这么一句话:“WarningIf a process happens to return STILL_ACTIVE (259) as an error code, applications that test for this value could end up in an infinite loop.” 很明显,我们不能保证一个进程不会返回一个STILL_ACTIVE (259)做为退出码,也就是说GetExitCodeProcess返回了STILL_ACTIVE 并不代表这个进程还没有结束。此时该进程可能已经结束(并返回259做为退出码)或者没有结束。此路不通。

WaitForSingleObject
这才是正途。进程本质上是一个”内核对象“,可以用Wait系列的API函数来等待其结束。其实我们做多线程同步时也用过WaitFor....只不过那时是wait一个线程句柄。

delphi中实现如下:

unit SysUtils2;
{作者: 袁晓辉 blog.csdn.net/uoyevoli}

interface

uses Windows;

//返回值代表是否成功
//如果返回True,HasExited 代表进程是否已经结束
function ProcessHasExited(ProcessHandle: THandle; out HasExited: Boolean): Boolean;

implementation

function ProcessHasExited(ProcessHandle: THandle; out HasExited: Boolean): Boolean;
var
WaitResult: DWORD;
begin
Result :=False;
WaitResult := WaitForSingleObject(ProcessHandle, 0);
Result := WaitResult <> WAIT_FAILED;
HasExited := WaitResult = WAIT_OBJECT_0;
end;
end.
分享到:
评论

相关推荐

    通过进程句柄取得PID的软件源码

    通过进程句柄取得PID的软件源码,是针对Windows操作系统环境下的一种高级编程技巧,主要应用于VB(Visual Basic)开发环境中。这一技术的核心在于利用Windows NT内核提供的API函数`ZwQueryInformationProcess`来获取...

    DELPHI强制关闭进程

    此函数接收进程句柄和退出代码作为参数,成功执行后,目标进程将被立即停止。 ```delphi function TerminateProcess(hProcess: THandle; uExitCode: DWORD): BOOL; stdcall; external 'kernel32.dll' name '...

    Delphi如何关闭一个进程

    在这个示例中,我们首先通过`GetProcessIdByName`函数找到目标进程的ID,然后调用`OpenProcess`以获取进程句柄。接着,我们调用`EndProcess`来结束进程,并确保最后关闭进程句柄。 需要注意的是,关闭进程需要相应...

    演示ClientSocket反复连接进程句柄数不变

    本文将深入探讨“演示ClientSocket反复连接进程句柄数不变”这个主题,以及如何解决由此引发的问题,如句柄数增加、系统资源耗尽和死机。 首先,让我们理解什么是ClientSocket。ClientSocket是Delphi中的一个组件,...

    delphi 杀进程

    `TerminateProcess`接受两个参数:进程句柄和退出码。通常,退出码设置为0表示正常退出。 ```delphi if ProcessHandle &lt;&gt; 0 then TerminateProcess(ProcessHandle, 0); ``` 4. **错误处理**: 在实际操作中,我们...

    delphi下的进程管理工具

    至于查杀进程,Delphi提供`TerminateProcess`函数,该函数接受进程句柄和退出码,可以强制终止指定的进程。然而,需要注意的是,无权限或者进程正在执行关键任务时,终止进程可能会导致系统不稳定,因此在实际操作前...

    dsd.rar_杀进程 delphi_进程 delphi

    3. 调用`TerminateProcess`:传入进程句柄和一个退出码,这将立即结束目标进程的执行。 4. 错误处理:在尝试操作后,应该检查返回值,确保进程成功终止,如果失败,可以用`GetLastError`获取错误代码。 在实际的...

    DELPHI关闭当前进程

    这个函数接受两个参数,一个是进程句柄,另一个是退出代码(通常设为0)。示例代码如下: ```delphi function TerminateProcess(hProcess: THandle; uExitCode: DWORD): Boolean; stdcall; external 'kernel32.dll...

    delphi 杀掉进程

    具体来说,我们可以调用 `OpenProcess` 和 `TerminateProcess` 这两个函数来获取进程句柄并结束它。 1. **OpenProcess 函数**:此函数用于获取对指定进程的访问权限。它的原型如下: ```delphi function ...

    Delphi查找和杀死进程小例子

    4. **杀死进程**:当需要结束某个进程时,首先需要通过`OpenProcess`函数获取目标进程的句柄,然后调用`TerminateProcess`函数,传入进程句柄和退出状态码,即可结束指定进程。请注意,这一步骤需要足够的权限,否则...

    Delphi强行结束任意进程

    - `TerminateProcess` 使用进程句柄和退出码作为参数。当调用此函数时,指定的进程将立即被强制停止,所有线程都将被终止,且不会有机会执行任何清理操作。 - 退出码通常用来表示进程结束的原因,但在这个强制结束...

    delphi操作进程

    `OpenProcess` 需要进程ID作为参数,返回一个进程句柄。然后,`TerminateProcess` 使用这个句柄和一个退出码来结束指定进程。需要注意的是,只有拥有足够权限的进程才能关闭其他进程,这通常需要`PROCESS_TERMINATE`...

    delphi杀进程代码(控制台)

    它接受一个进程句柄和退出码作为参数: ```delphi function TerminateProcess(hProcess: HANDLE; uExitCode: DWORD): BOOL; stdcall; ``` 3. **GetLastError**: 当函数调用失败时,可以使用此函数获取错误代码...

    查杀进程代码(delphi)

    结束进程通常需要调用`TerminateProcess`函数,该函数需要进程句柄和退出码作为参数。首先,你需要确保有权限结束目标进程,这通常需要调用`OpenProcess`函数并传入适当的访问权限(如`PROCESS_TERMINATE`)。然后,...

    delphi如何自动重启程序

    - 其中`hProcess`参数是需要终止的进程的句柄,`uExitCode`是退出代码。 3. **GetCurrentProcess和GetCurrentProcessId**: - `GetCurrentProcess`函数返回当前进程的句柄,`GetCurrentProcessId`函数返回当前...

    delphi关闭外部程序aa

    该函数接受进程句柄和退出代码,其中退出代码通常是0,表示正常退出。 以下是一个简单的Delphi代码示例: ```delphi uses SysUtils, Windows; function CloseExternalProcess(ProcName: string): Boolean; var ...

    Delphi启动和关闭外部程序实例

    它通过指定进程的句柄和退出代码来结束进程。使用这个函数时需谨慎,因为它不会释放进程所占用的资源,可能导致数据丢失。 4. **源码解析**: 实例中的源码可能包括以下关键部分: - 使用`ShellExecute`函数的...

    Delphi 7 利用自定义消息实现内部进程通讯的例子源码.rar

    通过查看源码,我们可以学习到如何在 Delphi 7 中有效地实现进程间通信,这对于理解和优化多进程应用程序的性能和协同工作至关重要。同时,这也是 Windows API 编程的一个基础实践,有助于提升开发者对系统级编程的...

    结束程序-delphi

    总结来说,"结束程序"在Delphi中涉及到的关键技术包括进程ID的获取、进程句柄的打开、以及使用`TerminateProcess`函数来结束进程。开发者需要对Windows API有深入理解,同时注意权限控制和错误处理,以确保程序的...

    Delphi源码 删除指定进程名程序

    这个函数接受进程句柄和退出代码作为参数,成功执行后,进程会立即停止运行。 4. **读取进程的物理路径**:要获取进程的可执行文件路径,可以使用`QueryFullProcessImageName`或`NtQueryInformationProcess`等API。...

Global site tag (gtag.js) - Google Analytics