VB判断进程或窗口是否无响应,判断程序是否卡死

GetWindowTitleLength=-1 代表卡死

Declare Function SendMessageTimeout Lib "user32" Alias "SendMessageTimeoutA" (ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long, ByVal fuFlags As Long, ByVal uTimeout As Long, lpdwResult As Long) As Long
Public Const WM_GETTEXTLENGTH = &HE
Public Const SMTO_NORMAL = &H0

Private Const INFINITE = -1&
Private Const SMTO_ABORTIFHUNG = &H2



'判断窗口是否被挂起
'hWnd   -   欲判断的窗体句柄
'Timeout    -   如果目标窗口在指定的时间里没有相应则被视为挂起,以毫秒为单位
'返回   -   被挂起返回true,否则返回false
Function IsWindowBusy(hWnd As Long, Optional Timeout As Long = 60&) As Boolean
    If SendMessageTimeout(hWnd, WM_GETTEXTLENGTH, 0&, 0&, SMTO_NORMAL, Timeout, ByVal 0&) = 0 Then
        IsWindowBusy = True
        'DoEvents
    End If
End Function



Public Function GetWindowTitleLength(ByVal hwnd As Long) As Long
'不会卡死,进程假死或不可用
    If SendMessageTimeout(hwnd, WM_GETTEXTLENGTH, 0, ByVal 0&, SMTO_ABORTIFHUNG, INFINITE, GetWindowTitleLength) = 0 Then
        GetWindowTitleLength = -1
    End If
End Function

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
VB.NET中,你可以使用 `Process` 类来判断一个进程是否存在。下面是一个示例代码: ```vb Imports System.Diagnostics Public Class ProcessChecker Public Function IsProcessRunning(processName As String) As Boolean ' 获取当前计算机上所有正在运行的进程 Dim processes As Process() = Process.GetProcesses() ' 遍历进程列表,判断是否存在指定名称的进程 For Each proc As Process In processes If proc.ProcessName.Equals(processName, StringComparison.OrdinalIgnoreCase) Then ' 找到了指定的进程,返回True Return True End If Next ' 没有找到指定的进程,返回False Return False End Function End Class ``` 在上述示例中,我们创建了一个名为 `ProcessChecker` 的类,并在其中定义了一个 `IsProcessRunning` 方法。该方法接收一个进程名作为参数,并返回一个布尔值,表示该进程是否存在。 在方法内部,我们使用 `Process.GetProcesses()` 方法获取当前计算机上所有正在运行的进程。然后,我们遍历进程列表,通过比较进程名称与传入的参数是否相等来判断是否存在指定的进程。 你可以在自己的代码中使用这个方法来判断某个进程是否存在。例如: ```vb Dim processChecker As New ProcessChecker() Dim isRunning As Boolean = processChecker.IsProcessRunning("notepad") If isRunning Then Console.WriteLine("Notepad process is running.") Else Console.WriteLine("Notepad process is not running.") End If ``` 上述示例中,我们创建了一个 `ProcessChecker` 对象,并调用 `IsProcessRunning` 方法来判断名为 "notepad" 的进程是否存在。根据返回的结果,我们输出相应的提示信息。你可以根据你的需求修改进程名称以及处理逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专注VB编程开发20年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值