是否可以编写脚本来监听Windows中的屏幕分辨率变化?

时间:2015-02-24 01:30:18

标签: powershell batch-file vbscript

我正在尝试编写一个脚本,批处理,powershell,vbs等等,可以在用户更改屏幕分辨率时监听,这样我就可以执行一些代码。

这可能吗?

1 个答案:

答案 0 :(得分:3)

这似乎有效:

PS> $sysevent = [microsoft.win32.systemevents]
PS> $sysevent

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     False    SystemEvents                             System.Object


PS> Register-ObjectEvent -InputObject $sysevent -EventName "DisplaySettingsChanged" -Action {[console]::Beep()}

Id              Name            State      HasMoreData     Location             Command
--              ----            -----      -----------     --------             -------
1               fa48b95f-299... NotStarted False                                [console]::Beep()

您可以在Microsoft documentation中找到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. 

取消注册活动

PS> Unregister-Event -SubscriptionId 1

如果您希望能够区分锁定和解锁,SessionSwitchEventHandler会收到两个参数

  1. 活动的来源。
  2. SessionSwitchEventArgs,指示会话更改事件的类型。
  3. SessionSwitchEventArgs拥有一个属性枚举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.
    

    示例:

    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
    

    如果您想要列出的事件列表,可以使用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