检测进程是否空闲
回答
可以挂上了钩SetWindowsHookEx与WH_FOREGROUNDIDLE
嗨cProgramming感谢快速重播,我目前有一个HWND,我怎么能HWND钩到windowHookex? – paktrick
您应该告诉我们更多关于您的应用程序的信息。 SetWindowsHookEx可以放在一个线程上,但如果你有一个HWND,还有其他方法可以处理这个问题。像使用GWL_WNDPROC的SetWindowLong一样,看看你什么时候没有收到消息,或者如果你正在使用MFC,就会有一条消息,名为WM_KICKIDLE,这是一个MFC在对话空闲时发送的消息。 – cprogrammer
我会尝试重新说一句。以安装应用程序为例: - 用户运行setup.exe,然后输入一些设置(配置程序),之后会有一些程序将开始安装。程序结束后,其程序应该是闲置吗?等待用户输入,这是我想弄明白的。 – paktrick
如果你的意思是你要检测如果应用程序是快乐和接收消息(用户输入)检查这个函数的返回:
SendMessageTimeout(HwndInQuestion, WM_NULL, 0, 0, SMTO_ABORTIFHUNG, 10);
只需将超时(示例中为10毫秒)设置为您认为适合您使用的情况。
嗨noelicus,我想检测何时一个特定的应用正在请求用户输入。 – paktrick
什么,我发现关于这个话题,你希望收到通知,只要这个过程是空闲(做了一些工作背景等),但不是在轮询/等待时尚
的MFC情况的简短摘要(变量名的建议):
- >如果它的一个MFC应用程序,而模态对话框:
add ON_MESSAGE_VOID(WM_IDLEUPDATECMDUI,OnIdleUpdateCmdUI) to message map together
with the method afx_msg void OnIdleUpdateCmdUI()
- >如果它是一个MFC应用程序中的对话框:
add ON_MESSAGE(WM_KICKIDLE, OnKickIdle) to message map together
with the method afx_msg LRESULT OnKickIdle(WPARAM wParam, LPARAM lParam);
- >如果你想同时(应用&对话框):
)公共成员变量添加到主框架(也有静态全局变量是可能的)
HOOKPROC m_detectIdleHook
)添加方法原型到主框架的头文件
friend LRESULT CALLBACK OnForeGroundIdle(int nCode, WPARAM wParam, LPARAM lParam)
与此内容(注意,不是主框架的成员函数!)
LRESULT CALLBACK OnForeGroundIdle(int nCode, WPARAM wParam, LPARAM lParam)
{
// Do/check stuff in idle time here
return ::CallNextHookEx((HHOOK)((CMyMainFrame*)AfxGetMainWnd())->m_detectIdleHook, nCode, wParam, lParam);
}
)设置窗口钩在主框架的端部:在OnCreate
m_detectIdleHook = (HOOKPROC)SetWindowsHookEx(WH_FOREGROUNDIDLE,
OnForeGroundIdle,
NULL,
::GetCurrentThreadId());
)。在完成后结束时,解除挂钩窗口在主框架解构
UnhookWindowsHookEx((HHOOK)m_detectIdleHook);
如果应用程序未处于活动状态(其他应用程序具有焦点),则这些解决方案都不起作用。我在这里看到的唯一解决方案是使用WM_TIMER并通过WaitForInputIdle(http://msdn.microsoft.com/en-us/library/ms687022%28VS.85%29.aspx)检查空闲状态,但这会引入一定的轮询间隔可靠性。
来源:
- 此页面
-http://www.drdobbs.com/184416462
-http://www.codeguru.com/forum/showthread.php?T = 199148
-http://www.codeproject.com/KB/dialog/idledialog.aspx味精= 770930
p.s.看起来这个主题在vista/win7中变得更加困难,因为SetWindowsHookEx显然需要高权限(UAC)。 –
- 1. 检测android空闲
- 2. 如何检测ThreadPool中是否有空闲线程?
- 3. 如何检查进程是否空闲? C#
- 4. Android应用程序空闲时检测
- 5. 如何检测程序何时空闲?
- 6. VB检测空闲时间
- 7. 如何检测Javascript空闲?
- 8. Flex:检测用户空闲?
- 9. 检测服务空闲
- 10. 系统空闲检测
- 11. 检查Windows Mobile设备是否空闲
- 12. Java:检查PC是否空闲
- 13. 检测网络在Python中是否空闲
- 14. 为什么要等待DIFS以检测信道是否空闲
- 15. 确定产生的所有erlang进程是否空闲
- 16. 如何确定进程是否处于空闲状态C
- 17. 如何检查应用程序是否空闲?
- 18. Ruby检查一个线程是否“空闲”
- 19. 检测RichTextBox是否为空
- 20. Android检测所有线程空闲 - 单元测试
- 21. 检测Windows Phone空闲的方法
- 22. 空闲时间不活动检测
- 23. 检测Winforms中的空闲用户
- 24. 如何检测PermGen空闲内存
- 25. 如何检测网络空闲时间?
- 26. 如何检测EC2实例已空闲
- 27. 使用python检测空闲时间
- 28. 检测空闲时间有关iframe
- 29. 在Windows服务中检测空闲
- 30. MongoDB是否改进了重用空闲空间的算法?
你的意思是用户输入?它是一个命令行应用程序阻止getc(),还是你的意思是一个GUI应用程序什么都不做,只是等到按下按钮? – Bart
[如何检测进程/线程何时等待用户输入]可能的重复(http://stackoverflow.com/questions/6911498/how-to-detect-when-a-process-thread-is-waiting-用户输入) – Hasturkun
hey bart,确切地说,“Gui应用程序无所作为,只是等待按钮被按下” – paktrick