LRSFC_DanJ Posted January 16 Posted January 16 Our classroom teacher PCs are connected to both a monitor and a projector or interactive whiteboard. Some teachers like to set the displays to "extend" for some reason, but this then confuses other teachers who then come to use the room, and despite having told them they need to use Windows key + P to change it back, we still get a lot of complaints. So I've been looking into if it's possible to have the computers automatically duplicate the screen on startup. I found there is an app c:\windows\system32\displayswitch.exe which if you give the /clone switch will duplicate the display. However if I put this in a scheduled task to run at startup, this does not seem to work. I've seen some solutions that recommend using psexec but we cannot use this in our environment as it is blocked by our security software. Does anyone have any ideas? Windows 11 Enterprise 24H2.
MartinByard Posted January 16 Posted January 16 Can you put a shortcut to it (with the /clone switch) in the public startup folder in the start menu, that way it will apply once someone has logged in. It won't help pre-login, but would work once they are logged in and running apps.
LRSFC_DanJ Posted January 16 Author Posted January 16 27 minutes ago, MartinByard said: Can you put a shortcut to it (with the /clone switch) in the public startup folder in the start menu, that way it will apply once someone has logged in. It won't help pre-login, but would work once they are logged in and running apps. Unfortunately it's the login screen that's the biggest problem.
Jobos Posted January 16 Posted January 16 How about using GP and set it to run at logoff, that way the PC will be ready for the next user. 1
LeMarchand Posted January 16 Posted January 16 I use C:\Windows\System32\DisplaySwitch.exe /clone As a Startup Script along with Not sure if this works 100%, but I rarely have to Win+P. I should probably update my Office ADMX.
DrBeaker Posted January 16 Posted January 16 4 hours ago, LeMarchand said: I use C:\Windows\System32\DisplaySwitch.exe /clone As a Startup Script along with Not sure if this works 100%, but I rarely have to Win+P. I should probably update my Office ADMX. Does this work with Windows 11?
thimon Posted January 18 Posted January 18 I’ve got Duplicate Screen, Extend Screen and Wirelessly Project as pinned shortcuts on the Start menu for all users. Get very few call outs for this issue 1
DrBeaker Posted January 18 Posted January 18 9 hours ago, thimon said: I’ve got Duplicate Screen, Extend Screen and Wirelessly Project as pinned shortcuts on the Start menu for all users. Get very few call outs for this issue What do your users have - desktops or laptops?
LRSFC_DanJ Posted January 19 Author Posted January 19 23 hours ago, thimon said: I’ve got Duplicate Screen, Extend Screen and Wirelessly Project as pinned shortcuts on the Start menu for all users. Get very few call outs for this issue Unfortunately this doesn't help at the login screen, which is the most common callout we have when this issue occurs.
FN-GM Posted January 19 Posted January 19 13 minutes ago, LRSFC_DanJ said: Unfortunately this doesn't help at the login screen, which is the most common callout we have when this issue occurs. Could you run this as a logout action instead? It should mean the machine is good to go on logout or reboot.
NegativeKillDeath Posted January 19 Posted January 19 15 minutes ago, LRSFC_DanJ said: Unfortunately this doesn't help at the login screen, which is the most common callout we have when this issue occurs. Why is this an issue at the log on screen? What is it about extend that prevents them from logging in. Once in they would have access to any desktop shortcuts you may have created to help them switch display modes.
flipthebit Posted January 19 Posted January 19 4 minutes ago, NegativeKillDeath said: Why is this an issue at the log on screen? What is it about extend that prevents them from logging in. Once in they would have access to any desktop shortcuts you may have created to help them switch display modes. The default screen is not always the screen the member of staff is facing, and the other screen might not be on, or input switched to. 2
Roberto Posted January 19 Posted January 19 (edited) In fairness, I can imagine this being bloody distracting if the extended desktop action has put screen #1 on the projector display/TV screen behind you. Not everyone is comfortable with touch-typing (and even if you are, if things aren't perfect this would be a great way to end up typing your password into the username field in front of 30 students, all of which are going to laugh at their teacher and some of which will use that password for mischief before the staff member realises and changes their password. Whatever else you can say about teaching, it's worth remembering that they're essentially putting on a performance for each class they teach, and it doesn't take much to get some audiences in the mood to heckle the performer. And some actors can easily be put off their performance if the stage isn't set quite right. Edited January 19 by Roberto 1
FN-GM Posted January 19 Posted January 19 1 minute ago, flipthebit said: The default screen is not always the screen the member of staff is facing, and the other screen might not be on, or input switched to. This ^^ Screen 2 will be black. People probably think the computer isn't on and working. 1
LRSFC_DanJ Posted January 19 Author Posted January 19 7 minutes ago, flipthebit said: The default screen is not always the screen the member of staff is facing, and the other screen might not be on, or input switched to. 7 minutes ago, Roberto said: In fairness, I can imagine this being bloody distracting if the extended desktop action has put screen #1 on the projector display/TV screen behind you. Not everyone is comfortable with touch-typing (and even if you are, if things aren't perfect this would be a great way to end up typing your password into the username field in front of 30 students, all of which are going to laugh at their teacher and some of which will use that password for mischief before the staff member realises and changes their password. Whatever else you can say about teaching, it's worth remembering that they're essentially putting on a performance for each class they teach, and it doesn't take much to get some audiences in the mood to heckle the performer. And some actors can easily be put off their performance if the stage isn't set quite right. 5 minutes ago, FN-GM said: This ^^ Screen 2 will be black. People probably think the computer isn't on and working. The above posters are correct - the most common issue being reported is that the monitor screen is black, as when logging on the teacher may not have switched the projector/IWB out of standby mode, but the computer still sees them as existing as displays.
NegativeKillDeath Posted January 19 Posted January 19 19 minutes ago, Roberto said: In fairness, I can imagine this being bloody distracting if the extended desktop action has put screen #1 on the projector display/TV screen behind you. Not everyone is comfortable with touch-typing (and even if you are, if things aren't perfect this would be a great way to end up typing your password into the username field in front of 30 students, all of which are going to laugh at their teacher and some of which will use that password for mischief before the staff member realises and changes their password. Whatever else you can say about teaching, it's worth remembering that they're essentially putting on a performance for each class they teach, and it doesn't take much to get some audiences in the mood to heckle the performer. And some actors can easily be put off their performance if the stage isn't set quite right. Ah yes. Here we still use VGA for the TV just so that Windows doesn't try and set it as primary because the monitor was off.
thimon Posted January 19 Posted January 19 (edited) @DrBeaker Desktop PCs at the Prep School, 1:1 laptops at the Senior School, mixture of projectors and screens in classrooms, all connecting via USB C. Edited January 19 by thimon
LRSFC_DanJ Posted January 27 Author Posted January 27 (edited) Since nobody on the entire internet seems to have a solution for this problem, I plugged away at it for a bit and managed to come up with one myself. Presenting "FixDuplicateDisplay.ps1". Stick this as a PowerShell Startup Script in a GPO targetting computers. NOTE: while I have tested this in our environment and it appears to work, you will need to make your own judgement as to whether you consider it to be safe. It does log everything to C:\Windows\Temp though. As for how it works, it creates the required monitor configuration registry keys and values and then restarts the graphics driver. # Configures registry entries so the system should think that its most recent display topology was clone mode # by Dan Jackson # 2026-01-23 initial version # 2026-01-27 now works successfully! # Log filename $logfilename = "C:\Windows\Temp\FixDuplicateDisplay-" + (Get-Date -uformat "%Y%m%d%H%M%S") + ".log" $transcriptfilename = "C:\Windows\Temp\FixDuplicateDisplay-Transcript-" + (Get-Date -uformat "%Y%m%d%H%M%S") + ".log" $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " FixDuplicateDisplay session start" $outLine | Out-File $logfilename -Encoding UTF8 Start-Transcript $transcriptfilename # Get connected monitors from WMI $connectedMonitors = gwmi WmiMonitorID -Namespace root\wmi # Do we have more than one monitor? if ($null -eq $connectedMonitors -or $connectedMonitors.Count -lt 2) { # Only one monitor or failed to get monitor IDs $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " Only one monitor ID or failed to get monitor IDs, exiting" $outLine | Out-File $logfilename -Encoding UTF8 -Append exit 1 } $cms = @() foreach ($monitor in $connectedMonitors) { $monitorString = [System.Text.Encoding]::ASCII.GetString(($monitor.ManufacturerName | Where-Object {$_ -ne 0x0})) + [System.Text.Encoding]::ASCII.GetString(($monitor.ProductCodeID | Where-Object {$_ -ne 0x0})) + [System.Text.Encoding]::ASCII.GetString(($monitor.SerialNumberID | Where-Object {$_ -ne 0x0})) $cms += $monitorString } # Get existing monitor IDs from MonitorDataStore $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " Getting monitor IDs from MonitorDataStore" $outLine | Out-File $logfilename -Encoding UTF8 -Append $monitorDataStore = (Get-ChildItem HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\MonitorDataStore).PSChildName # Filter MonitorDataStore down to monitors that actually exist and are currently connected $oldMonitorDataStore = $monitorDataStore.PSObject.Copy() $monitorDataStore = @() foreach ($monitor in $cms) { $monitorMatch = $null $monitorMatch = $oldMonitorDataStore | Where-Object {$_ -match $monitor} if ($null -ne $monitorMatch) { $monitorDataStore += $monitorMatch } } # MD5 hash required objects $md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider $utf8 = New-Object -TypeName System.Text.UTF8Encoding # Construct connectivity subkey string $multiMonitors = $monitorDataStore -join "^" $hash = ($md5.ComputeHash($utf8.GetBytes($multiMonitors)) | % {$_.ToString("X2")}) -join "" $connectivityString = $multiMonitors + "^" + $hash $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " Connectivity subkey string constructed: '$($connectivityString)'" $outLine | Out-File $logfilename -Encoding UTF8 -Append # Construct clone value string $cloneString = $monitorDataStore -join "*" $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " Clone value string constructed: '$($cloneString)'" $outLine | Out-File $logfilename -Encoding UTF8 -Append # Construct configuration subkey string $hash = ($md5.ComputeHash($utf8.GetBytes($cloneString)) | % {$_.ToString("X2")}) -join "" $configurationString = $cloneString + "^" + $hash $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " Configuration subkey string constructed: '$($configurationString)'" $outLine | Out-File $logfilename -Encoding UTF8 -Append # Construct setId value string $setIdString = $monitorDataStore -join "^" $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " SetID value string constructed: '$($setIdString)'" $outLine | Out-File $logfilename -Encoding UTF8 -Append # Construct QWORD timestamp value $qwordTimestamp = [datetime]::Now.ToFileTime() $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " QWORD timestamp value: '$($qwordTimestamp)'" $outLine | Out-File $logfilename -Encoding UTF8 -Append # Check if connectivity subkey exists $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " Checking existence of subkey: 'HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Connectivity\$($connectivityString)'" $outLine | Out-File $logfilename -Encoding UTF8 -Append if (!(Test-Path "HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Connectivity\$($connectivityString)")) { # subkey does not exist $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " Creating subkey: 'HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Connectivity\$($connectivityString)'" $outLine | Out-File $logfilename -Encoding UTF8 -Append New-Item -Path "HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Connectivity\$($connectivityString)" -Confirm:$false -Force } # Check if Connectivity Clone value exists $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " Checking existence of Clone value: 'HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Connectivity\$($connectivityString)\Clone'" $outLine | Out-File $logfilename -Encoding UTF8 -Append $cloneObject = $null $cloneObject = Get-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Connectivity\$($connectivityString)" -Name "Clone" -ErrorAction "SilentlyContinue" # If connectivity clone value exists, update it if ($null -ne $cloneObject) { # Connectivity Clone value needs updating $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " Setting Clone value: 'HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Connectivity\$($connectivityString)\Clone' to value '$($cloneString)'" $outLine | Out-File $logfilename -Encoding UTF8 -Append Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Connectivity\$($connectivityString)" -Name "Clone" -Value $cloneString -Force -Confirm:$false } else { # Connectivity Clone value needs creating $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " Creating Clone value: 'HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Connectivity\$($connectivityString)\Clone' with value '$($cloneString)'" $outLine | Out-File $logfilename -Encoding UTF8 -Append New-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Connectivity\$($connectivityString)" -Name "Clone" -PropertyType String -Value $cloneString -Force -Confirm:$false } # Check if Connectivity Recent value exists $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " Checking existence of Recent value: 'HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Connectivity\$($connectivityString)\Recent'" $outLine | Out-File $logfilename -Encoding UTF8 -Append $recentObject = $null $recentObject = Get-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Connectivity\$($connectivityString)" -Name "Recent" -ErrorAction "SilentlyContinue" # If connectivity recent value exists, update it if ($null -ne $recentObject) { # Connectivity Recent value needs updating $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " Setting Recent value: 'HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Connectivity\$($connectivityString)\Recent' to value '$($cloneString)'" $outLine | Out-File $logfilename -Encoding UTF8 -Append Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Connectivity\$($connectivityString)" -Name "Recent" -Value $cloneString -Force -Confirm:$false } else { # Connectivity Recent value needs creating $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " Creating Recent value: 'HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Connectivity\$($connectivityString)\Recent' with value '$($cloneString)'" $outLine | Out-File $logfilename -Encoding UTF8 -Append New-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Connectivity\$($connectivityString)" -Name "Recent" -PropertyType String -Value $cloneString -Force -Confirm:$false } # Check if Connectivity SetId value exists $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " Checking existence of SetId value: 'HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Connectivity\$($connectivityString)\SetId'" $outLine | Out-File $logfilename -Encoding UTF8 -Append $setIdObject = $null $setIdObject = Get-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Connectivity\$($connectivityString)" -Name "SetId" -ErrorAction "SilentlyContinue" # If connectivity setId value exists, update it if ($null -ne $setIdObject) { # Connectivity SetId value needs updating $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " Setting SetId value: 'HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Connectivity\$($connectivityString)\SetId' to value '$($setIdString)'" $outLine | Out-File $logfilename -Encoding UTF8 -Append Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Connectivity\$($connectivityString)" -Name "SetId" -Value $setIdString -Force -Confirm:$false } else { # Connectivity SetId value needs creating $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " Creating SetId value: 'HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Connectivity\$($connectivityString)\SetId' with value '$($setIdString)'" $outLine | Out-File $logfilename -Encoding UTF8 -Append New-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Connectivity\$($connectivityString)" -Name "SetId" -PropertyType String -Value $setIdString -Force -Confirm:$false } # Check if configuration subkey exists $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " Checking existence of subkey: 'HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Configuration\$($configurationString)'" $outLine | Out-File $logfilename -Encoding UTF8 -Append if (!(Test-Path "HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Configuration\$($configurationString)")) { # subkey does not exist $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " Creating subkey: 'HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Configuration\$($configurationString)'" $outLine | Out-File $logfilename -Encoding UTF8 -Append New-Item -Path "HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Configuration\$($configurationString)" -Confirm:$false -Force } # Check if Configuration SetId value exists $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " Checking existence of SetId value: 'HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Configuration\$($configurationString)\SetId'" $outLine | Out-File $logfilename -Encoding UTF8 -Append $setIdObject = $null $setIdObject = Get-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Configuration\$($configurationString)" -Name "SetId" -ErrorAction "SilentlyContinue" # If configuration setId value exists, update it if ($null -ne $setIdObject) { # Configuration SetId value needs updating $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " Setting SetId value: 'HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Configuration\$($configurationString)\SetId' to value '$($cloneString)'" $outLine | Out-File $logfilename -Encoding UTF8 -Append Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Configuration\$($configurationString)" -Name "SetId" -Value $cloneString -Force -Confirm:$false } else { # Configuration SetId value needs creating $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " Creating SetId value: 'HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Configuration\$($configurationString)\SetId' with value '$($cloneString)'" $outLine | Out-File $logfilename -Encoding UTF8 -Append New-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Configuration\$($configurationString)" -Name "SetId" -PropertyType String -Value $cloneString -Force -Confirm:$false } # Check if Configuration timestamp value exists $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " Checking existence of Timestamp value: 'HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Configuration\$($configurationString)\Timestamp'" $outLine | Out-File $logfilename -Encoding UTF8 -Append $qwordTimestampObject = $null $qwordTimestampObject = Get-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Configuration\$($configurationString)" -Name "Timestamp" -ErrorAction "SilentlyContinue" # If configuration timestamp value exists, update it if ($null -ne $qwordTimestampObject) { # Configuration timestamp value needs updating $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " Setting Timestamp value: 'HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Configuration\$($configurationString)\Timestamp' to value '$($qwordTimestamp)'" $outLine | Out-File $logfilename -Encoding UTF8 -Append Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Configuration\$($configurationString)" -Name "Timestamp" -Value $qwordTimestamp -Force -Confirm:$false } else { # Configuration timestamp value needs creating $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " Creating Timestamp value: 'HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Configuration\$($configurationString)\Timestamp' with value '$($qwordTimestamp)'" $outLine | Out-File $logfilename -Encoding UTF8 -Append New-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\GraphicsDrivers\Configuration\$($configurationString)" -Name "Timestamp" -PropertyType QWORD -Value $qwordTimestamp -Force -Confirm:$false } # Now all registry keys are set, restart graphics drivers! $timestamp = Get-Date -uformat "%Y-%m-%dT%H:%M:%S" $outLine = $timestamp + " Restarting graphics drivers" $outLine | Out-File $logfilename -Encoding UTF8 -Append Get-PnpDevice -Class "Display" | Disable-PnpDevice -Confirm:$false Get-PnpDevice -Class "Display" | Enable-PnpDevice -Confirm:$false Stop-Transcript Edited January 27 by LRSFC_DanJ
6Foot3 Posted January 27 Posted January 27 On 16/01/2026 at 12:00, LRSFC_DanJ said: Our classroom teacher PCs are connected to both a monitor and a projector or interactive whiteboard. Some teachers like to set the displays to "extend" for some reason, but this then confuses other teachers who then come to use the room, and despite having told them they need to use Windows key + P to change it back, we still get a lot of complaints. So I've been looking into if it's possible to have the computers automatically duplicate the screen on startup. I found there is an app c:\windows\system32\displayswitch.exe which if you give the /clone switch will duplicate the display. However if I put this in a scheduled task to run at startup, this does not seem to work. I've seen some solutions that recommend using psexec but we cannot use this in our environment as it is blocked by our security software. Does anyone have any ideas? Windows 11 Enterprise 24H2. Soon they'll ask you todo their work for them as well. 1
flipthebit Posted January 27 Posted January 27 Does that work when the PC is first started up, or on login? You might have some remaining issues with staff who log in after someone who has switched to extend without a restart, or a Switched user. But it should provide some consistency.
LRSFC_DanJ Posted January 27 Author Posted January 27 (edited) 11 minutes ago, flipthebit said: Does that work when the PC is first started up, or on login? You might have some remaining issues with staff who log in after someone who has switched to extend without a restart, or a Switched user. But it should provide some consistency. I put it in as a startup script in a GPO but there's no reason you couldn't have it run in other GPO areas or as a scheduled task or something like that. Unlike DisplaySwitch.exe it should work fine if the computer is at the lock screen as it's not doing anything that requires an interactive session. Wherever you're running it though, it does need administrative permissions due to the registry keys it accesses, so you can't run it in a user context (but then you don't need to run it in a user context, as in the user context you can just use DisplaySwitch.exe instead). Edited January 27 by LRSFC_DanJ
Scifigirl Posted January 27 Posted January 27 never use duplicate -- https://www.forbessolicitors.co.uk/articles/school-receives-reprimand-from-ico There was a similar one in the uk where an email pop up was seen by students but cant find it. Audio alerts for emails are fine however its the pop ups that get you. Extend
SamanthaD Posted January 27 Posted January 27 We do things a little different - only one video output from the PC, then after going through an AV switch is split between the projector / screens, confidence monitor and recording device (if there's one in the room). So the PC only ever sees one display.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now