我写了一些powershell,它允许我利用键盘媒体键的功能来控制当前正在运行的任何音乐 .
我想要做的是在计算机被锁定的情况下运行脚本 . 所以我可以暂停/停止音乐 . 然后一旦机器解锁,恢复音乐 . 很酷吧?!
我的前两次尝试是:
1 - WMI事件注册
这是on lock事件
Register-wmievent –query "Select * from __instancecreationevent within 1 where TargetInstance isa 'Win32_NTLogEvent' And TargetInstance.EventCode = 4800" -Action {write-host "Pausing`r`n"; set-playpausetrack}
这是解锁事件
Register-wmievent –query "Select * from __instancecreationevent within 1 where TargetInstance isa 'Win32_NTLogEvent' And TargetInstance.EventCode = 4801" -Action {write-host "Resuming`r`n"; set-playpausetrack}
不幸的是,我认为锁定事件发生得太晚,出于安全原因,操作系统会暂停后台交互 . 当我解锁计算机时,它会触发锁定和未锁定的事件 .
2 - 使用任务计划程序“在工作站锁定”触发器
与上面类似的问题,但它也在不同的上下文中运行,因此无法正常工作 .
有谁知道如何在系统实际锁定之前运行脚本?即是否有一个事件我可以观察之前的触发器?
2 回答
尝试为锁定/解锁事件创建永久事件使用者 . 检查http://powerevents.codeplex.com并查看在http://www.ravichaganti.com/blog/?p=1951使用PowerEvents模块的示例
这似乎有效
你可以找到list of SytemEvents in Microsoft documentation .
取消注册事件
如果您希望能够区分锁定和解锁,
SessionSwitchEventHandler
会收到两个参数事件的来源 .
SessionSwitchEventArgs指示会话更改事件的类型 .
SessionSwitchEventArgs
拥有一个属性Reason
,这是一个枚举SessionSwitchReason
值是:示例:
如果您想要列出的事件列表,您可以使用
Get-EventSubscriber
: