Ber*_*ala 9 python windows wmi power-management
我想拦截我的笔记本电脑上的暂停/待机消息,但我的程序没有收到所有相关消息.
在Windows xp/2k上有一个ms-excel中的错误,如果在网络/ USB驱动器上打开文件,则会阻止系统挂起.
我正在尝试以编程方式解决它(我的工具箱包括python,vb6或命令行工具).
我对Windows仪器一无所知:-)
我有一个sysinternals实用程序,无论如何暂停系统.我想把它挂钩到封闭式活动!
笔记本电脑盖关闭(fujitsu u810)启动待机程序[如何?]
然后系统发送每个人WM_POWERBROADCAST:PBT_APMQUERYSUSPEND(我可以使用它跟踪它们SPYXX.EXE)
每个程序回答"True",直到excel回答"false",整个过程停止.
1)我的python程序既没有捕获pbm_apmquerysuspend,也没有捕获PBT_APMQUERYSTANDBYFAILED,也没有捕获PBT_APMQUERYSUSPENDFAILED:`...
query = "SELECT * FROM Win32_PowerManagementEvent"
power_watcher = wmi.ExecNotificationQuery ( query )
power_event = power_watcher.NextEvent ()
Run Code Online (Sandbox Code Playgroud)
`如果最终发生备用,它只接收PBT_APMSUSPEND.
为什么不 - 我该如何拦截呢?
2)是否有其他方法可以拦截备用流程?
在一个完美的世界里,我会设置lid-close事件来运行我选择的命令.在完美的世界中,盖子盖是一个有记录的事件.
谢谢你们 :-)
我发现了一个丑陋的解决方法:我编写了一个AutoIt脚本,它检测 Excel 的错误 MessageBox,关闭它,然后运行 sysinternals 的实用程序,强制计算机进入待机状态。
Opt("WinWaitDelay",400)
; -- 精确的文本匹配,节省大量杯子周期!
Opt("WinTitleMatchMode",3)
Opt("WinDetectHiddenText",1)
Opt("鼠标坐标模式",0)
; Opt("WinSearchChildren",1)
暗淡的$title =“Microsoft Excel”
dim $text = "Windows 无法进入待机状态,因为正在从网络访问 Microsoft Office 文档或应用程序组件。您必须关闭打开的文档或退出应用程序,然后才能使计算机进入待机状态。"
虽然真实
; 等待Excel的错误消息
WinWait($标题,$文本)
运行(“psshutdown.exe -c -d -accepteula -m mooshmoosh -t 5”)
; 如果没有“睡眠”,烦人的消息框不会关闭
睡眠(1000)
; 关闭烦人的模态消息框!
WinClose($标题)
;1分钟延迟,节省CPU(?)
睡眠(1*60*1000)
西结束
(这是一个优化版本 - 第一次试验是 CPU 密集型的)。
现在它位于系统托盘中并且可以正常工作。
丢失消息的问题仍然悬而未决。虽然我意识到它首先与 python 无关。
| 归档时间: |
|
| 查看次数: |
2893 次 |
| 最近记录: |