Pet*_*ssi 9 windows powershell
我写了一些powershell,它允许我利用键盘媒体键的功能来控制当前正在运行的任何音乐.
我想要做的是在计算机被锁定的情况下运行脚本.所以我可以暂停/停止音乐.然后一旦机器解锁,恢复音乐.很酷吧?!
我的前两次尝试是:
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}
Run Code Online (Sandbox Code Playgroud)
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}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我认为锁定事件发生得太晚,出于安全原因,操作系统会暂停后台交互.当我解锁计算机时,它会触发锁定和未锁定的事件.
与上面类似的问题,但它也在不同的上下文中运行,因此无法正常工作.
有谁知道如何在系统实际锁定之前运行脚本?也就是说,我之前可以观察哪些触发事件?
这似乎有效
PS> $sysevent = [microsoft.win32.systemevents]
PS> $sysevent
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False SystemEvents System.Object
PS> Register-ObjectEvent -InputObject $sysevent -EventName "SessionSwitch" -Action {[console]::Beep()}
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
1 fa48b95f-299... NotStarted False [console]::Beep()
Run Code Online (Sandbox Code Playgroud)
您可以在Microsoft文档中找到SytemEvents列表.
DisplaySettingsChanged Occurs when the user changes the display settings.
DisplaySettingsChanging Occurs when the display settings are changing.
EventsThreadShutdown Occurs before the thread that listens for system events is terminated.
InstalledFontsChanged Occurs when the user adds fonts to or removes fonts from the system.
LowMemory Occurs when the system is running out of available RAM.
PaletteChanged Occurs when the user switches to an application that uses a different palette.
PowerModeChanged Occurs when the user suspends or resumes the system.
SessionEnded Occurs when the user is logging off or shutting down the system.
SessionEnding Occurs when the user is trying to log off or shut down the system.
SessionSwitch Occurs when the currently logged-in user has changed.
TimeChanged Occurs when the user changes the time on the system clock.
TimerElapsed Occurs when a windows timer interval has expired.
UserPreferenceChanged Occurs when a user preference has changed.
UserPreferenceChanging Occurs when a user preference is changing.
Run Code Online (Sandbox Code Playgroud)
取消注册事件
PS> Unregister-Event -SubscriptionId 1
Run Code Online (Sandbox Code Playgroud)
如果您希望能够区分锁定和解锁SessionSwitchEventHandler
接收两个参数
将SessionSwitchEventArgs
自己的一个propertie Reason
这是一个枚举SessionSwitchReason
值是:
ConsoleConnect A session has been connected from the console.
ConsoleDisconnect A session has been disconnected from the console.
RemoteConnect A session has been connected from a remote connection.
RemoteDisconnect A session has been disconnected from a remote connection.
SessionLogon A user has logged on to a session.
SessionLogoff A user has logged off from a session.
SessionLock A session has been locked.
SessionUnlock A session has been unlocked.
SessionRemoteControl A session has changed its status to or from remote controlled mode.
Run Code Online (Sandbox Code Playgroud)
示例:
PS> Register-ObjectEvent -InputObject $sysevent -EventName "SessionSwitch" -Action {[console]::Beep();Write-Host ($args[1]).Reason}
Id Name State HasMoreData Location Command
-- ---- ----- ----------- -------- -------
9 20e6ecd4-fc0... NotStarted False [console]::Beep();fore...
PS >
SessionLock
SessionUnlock
Run Code Online (Sandbox Code Playgroud)
如果您想要一个可以使用的事件列表,您可以使用Get-EventSubscriber
:
SubscriptionId : 5
SourceObject : Microsoft.Win32.SystemEvents
EventName : SessionSwitch
SourceIdentifier : 96fbabe4-518a-47b5-8a3f-bb89c68f7f39
Action : System.Management.Automation.PSEventJob
HandlerDelegate :
SupportEvent : False
ForwardEvent : False
Run Code Online (Sandbox Code Playgroud)