Jump to content

Recommended Posts

Posted

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.

Posted

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.

Posted
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.

Posted

I use

 

C:\Windows\System32\DisplaySwitch.exe /clone

 

As a Startup Script along with 

 

image.thumb.png.d97b411c759c4b9ccd7d7ad55de9ab17.png

 

Not sure if this works 100%, but I rarely have to Win+P.

 

I should probably update my Office ADMX.

Posted
4 hours ago, LeMarchand said:

I use

 

C:\Windows\System32\DisplaySwitch.exe /clone

 

As a Startup Script along with 

 

image.thumb.png.d97b411c759c4b9ccd7d7ad55de9ab17.png

 

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?

Posted

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

  • Like 1
Posted
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?

Posted
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.

Posted
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.

Posted

 

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.

Posted
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.

  • Like 2
Posted (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 by Roberto
  • Like 1
Posted
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.

  • Like 1
Posted
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.

Posted
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. 

Posted (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 by thimon
  • 2 weeks later...
Posted (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 by LRSFC_DanJ
Posted
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.

  • Haha 1
Posted

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.

Posted (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 by LRSFC_DanJ
Posted

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.

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 account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • Create New...