关于判断未相应程序的解决办法
有个程序在资源管理器中显示为“未响应”,可是我使用WaitForInputIdle,来获得当前状态,得到的确实正常,这是什么原因,还有没有更好的办法。
function IsBusy(ProcessId: Integer): Integer;
var
Ph: THandle;
begin
Ph := OpenProcess(PROCESS_ALL_ACCESS, false, ProcessId);
if Ph <> 0 then
begin
if WaitForInputIdle(Ph, 10*1000) = WAIT_TIMEOUT then
Result := 1
else
Result := 0;
CloseHandle(Ph);
end
else
Result := -1;
end;
[解决办法]
好像你的只有你的办法比较容易实现了
[解决办法]
这样做已经不错了
[解决办法]
使用SendMessageTimeout看看它死没死
:)
[解决办法]
在User32.dll中(没有文档公开),Win2k/NT下的IsHungAppWindow和Win9X下的IsHungThread;前者是以一个窗口句柄作为参数,后者是以线程ID作为参数。可以通过VC开发工具的Depends查到这两个函数。
要使用这两个函数,必须先动态导入,如下:
if (m_hUser32 == NULL)
{
m_hUser32 = GetModuleHandle( "USER32.DLL ");
}
if (m_hUser32)
{
m_IsHungNT = (HUNG_FUNNT) GetProcAddress(m_hUser32, "IsHungAppWindow ");
m_IsHung9X = (HUNG_FUN9X) GetProcAddress(m_hUser32, "IsHungThread ");
}