FancyZones Zones Editor applies new layout to all monitors instead of applying this new layout to the active monitor only. Cannot use different layouts for different monitors.
New layout applied to monitor 1, layout of monitor 2 unchanged,
Both monitors have the new layout applied. Cannot create different layouts for different monitors.
A workaround is to use 'Allow zones to span across monitors, but this would require the creation of new multi-monitor layouts and makes all 'single monitor templates' unusable.
N/A
@RoL0NL
do you have two identical monitors? (same brand and same model)
Can you please upload the zone settings file?
"C:\Users\%USERNAME%\AppData\Local\Microsoft\PowerToys\FancyZones\zones-settings.json"
Rename it to .txt
or zip, otherwise GitHub will not allow lo upload it.
Thanks.
I use three DELL UP2516D's on my Surface Pro 6 + Surface Dock. In my 'docked' setup (which I am using while this 'bug(?)' occurs), the internal Surface display is disabled.
zones-settings.txt
EDIT: To exclude a json 'corruption', I removed the .json (effectively resetting the zones) but the problem still occurs.
(Thank you for the fast responses by the way!)
@RoL0NL
the .json you uploaded, was before removing it?
The one you send me show the LG monitor that is the Surface monitor, plus three distinct Dell monitors plus a generic LOCALDISPLAY_2560_1440
that maybe associated with the bug.
Try quitting PowerToys (this step is important), delete the zone-settings.json
file, restart PowerToys and apply the Priority Grid just to one Dell monitor. Then upload the new zone-settings.json
file.
I need to check if LOCALDISPLAY_2560_1440
is recreated.
@RoL0NL
the .json you uploaded, was before removing it?
Indeed
The one you send me show the LG monitor that is the Surface monitor, plus three distinct Dell monitors plus a generic
LOCALDISPLAY_2560_1440
that maybe associated with the bug.Try quitting PowerToys (this step is important), delete the
zone-settings.json
file, restart PowerToys and apply the Priority Grid just to one Dell monitor. Then upload the newzone-settings.json
file.
I need to check ifLOCALDISPLAY_2560_1440
is recreated.
In my previous post-edit I forgot to close PowerToys before deleting the .json
Now I first close PowerToys, _then_ removed zone-settings.json
, restarted PowerToys, opened the Zones Editor on my middle monitor and set the layout to 'Priority Grid'. The .json file now contains (this is the entire file):
{
"devices": [
{
"device-id": "LGD0555#4&5b5cba1&2&UID265988_2560_1440_{AD908D4B-B867-4D18-AAEC-E939D13DF890}",
"active-zoneset": {
"uuid": "{21163A49-D0D7-4F55-80C5-4CB0ADB165D7}",
"type": "priority-grid"
},
"editor-show-spacing": true,
"editor-spacing": 16,
"editor-zone-count": 3
}
],
"custom-zone-sets": []
}
The LocalDisplay is removed, but the Dell is recognized as 'LGD'! Note that I still used the docked setup with 3X Dell & internal display disabled and did not switch while performing the steps described above.
If I now set a '3 Rows' layout on my left monitor, the file contains (again, entire file):
{
"devices": [
{
"device-id": "LGD0555#4&5b5cba1&2&UID265988_2560_1440_{AD908D4B-B867-4D18-AAEC-E939D13DF890}",
"active-zoneset": {
"uuid": "{10C98B4C-8A8E-4E9D-AC8C-57F9CB0062D5}",
"type": "rows"
},
"editor-show-spacing": true,
"editor-spacing": 16,
"editor-zone-count": 3
}
],
"custom-zone-sets": []
}
For some reason, all three monitors are recognized as 'LGD...'. Possibly the Dell entries were from previous PowerToys versions.
Next step: Switch to 'PC Screen Only' (So, only internal Surface Display, power off the Dells) and set the layout to 3 columns:
{
"devices": [
{
"device-id": "LGD0555#4&5b5cba1&2&UID265988_2560_1440_{AD908D4B-B867-4D18-AAEC-E939D13DF890}",
"active-zoneset": {
"uuid": "{10C98B4C-8A8E-4E9D-AC8C-57F9CB0062D5}",
"type": "rows"
},
"editor-show-spacing": true,
"editor-spacing": 16,
"editor-zone-count": 3
},
{
"device-id": "LGD0555#4&5b5cba1&2&UID265988_2736_1824_{AD908D4B-B867-4D18-AAEC-E939D13DF890}",
"active-zoneset": {
"uuid": "{B1CD91D8-21BF-469B-AE88-48CF3863313D}",
"type": "columns"
},
"editor-show-spacing": true,
"editor-spacing": 16,
"editor-zone-count": 3
}
],
"custom-zone-sets": []
}
You can see that the second entry corresponds to the internal display because of the screen resolution (2736x1824), but somehow the ID is equal to IDs of the Dells! As expected, the Internal display now shows a column layout, while all 3 Dells show a row layout. So, somehow the software sees the same monitor ID for all my 4 monitors.
To verify the ID's, I opened Device Manager, Monitors tab. The Surface Display shows a Device Instance Path of
DISPLAY\LGD0555\4&5b5cba1&2&UID265988
as found in the FancyZones config file. The Dells show unique IDs:
DISPLAY\DEL40E0\4&5b5cba1&2&UID200195
DISPLAY\DEL40E0\4&5b5cba1&2&UID216579
DISPLAY\DEL40E0\4&5b5cba1&2&UID265988
as found in the 'original' .json (before deleting it). So, Windows still recognizes the right ID's. I probably didn't have working monitors if these IDs were also wrong in Device Manager ;)
@RoL0NL
thanks you for all the testing. Initially I thought this could be a known issues where Windows is returning the same ID for all identical monitors, but it's not the case, it seems a bug in FZ.
@RoL0NL
can you please run this tool and report the output? (the tool creates a log file in the same folder where the .exe is)
Thanks.
GetSystemMetrics = 3
GetMonitorInfo OK
EnumDisplayDevices OK:
DeviceID = \\?\DISPLAY#LGD0555#4&5b5cba1&2&UID265988#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
DeviceKey = \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0001
DeviceName = \\.\DISPLAY1\Monitor0
DeviceString = Surface Display
GetMonitorInfo OK
EnumDisplayDevices OK:
DeviceID = \\?\DISPLAY#LGD0555#4&5b5cba1&2&UID265988#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
DeviceKey = \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0001
DeviceName = \\.\DISPLAY2\Monitor0
DeviceString = Surface Display
GetMonitorInfo OK
EnumDisplayDevices OK:
DeviceID = \\?\DISPLAY#LGD0555#4&5b5cba1&2&UID265988#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
DeviceKey = \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0001
DeviceName = \\.\DISPLAY3\Monitor0
DeviceString = Surface Display
EnumDisplayMonitors OK
WMI report:
Active: 1
WeekOfManufacture: 0
InstanceName: DISPLAY\LGD0555\4&5b5cba1&2&UID265988_0
YearOfManufacture: 2016
ManufacturerName: 76 71 68 0 0 0 0 0 0 0 0 0 0 0 0 0
ProductCodeID: 48 53 53 53 0 0 0 0 0 0 0 0 0 0 0 0
SerialNumberID: 50 54 56 52 51 53 54 49 55 0 0 0 0 0 0 0
UserFriendlyName:
Active: 1
WeekOfManufacture: 40
InstanceName: DISPLAY\DEL40E0\4&5b5cba1&2&UID200195_0
YearOfManufacture: 2015
ManufacturerName: 68 69 76 0 0 0 0 0 0 0 0 0 0 0 0 0
ProductCodeID: 52 48 69 48 0 0 0 0 0 0 0 0 0 0 0 0
SerialNumberID: 51 74 86 52 48 53 57 83 51 55 48 76 0 0 0 0
UserFriendlyName: 68 69 76 76 32 85 80 50 53 49 54 68 0
Active: 1
WeekOfManufacture: 41
InstanceName: DISPLAY\DEL40E0\4&5b5cba1&2&UID208387_0
YearOfManufacture: 2016
ManufacturerName: 68 69 76 0 0 0 0 0 0 0 0 0 0 0 0 0
ProductCodeID: 52 48 69 48 0 0 0 0 0 0 0 0 0 0 0 0
SerialNumberID: 84 89 80 82 51 54 65 65 52 52 55 76 0 0 0 0
UserFriendlyName: 68 69 76 76 32 85 80 50 53 49 54 68 0
Active: 1
WeekOfManufacture: 40
InstanceName: DISPLAY\DEL40E0\4&5b5cba1&2&UID216579_0
YearOfManufacture: 2015
ManufacturerName: 68 69 76 0 0 0 0 0 0 0 0 0 0 0 0 0
ProductCodeID: 52 48 69 48 0 0 0 0 0 0 0 0 0 0 0 0
SerialNumberID: 51 74 86 52 48 53 57 83 53 49 52 76 0 0 0 0
UserFriendlyName: 68 69 76 76 32 85 80 50 53 49 54 68 0
So, the first parts show identical ID's, the WMI report show different instance names and serial number (note that the second and fourth monitor have nearly identical serials, but are different.)
By the way, all three monitors are connected via the Surface Dock, which has only two (mini) DisplayPort connections. So, the third Dell monitor is connected to the DP-out port of the second monitor (Daisy chaining/MST). Looking at the DP Topology graph of the Intel Graphics Settings (Display>DisplayPort Topology), it looks like there is another MST-hub-like setup for the two DP connectors in the Dock, so can it be possible that all three monitors share the same graphics adapter port, somehow resulting in non-unique DeviceID's
@RoL0NL
thank you for the detailed report, it confirms it's the same issue reported in https://github.com/microsoft/PowerToys/issues/611
I'll close that one in favor of this one.
@RoL0NL Hello! :) We're currently investigating this bug and came up with a modified way of enumerating display devices. Could you please show the output of the updated monitor info report tool with the configuration you've described earlier?
monitor_info_report1.1.zip
Sure!
Report #1 v1.1:
GetMonitorInfo OK
MonitorName = \\.\DISPLAY9
DeviceID = \\?\DISPLAY#LGD0555#4&5b5cba1&2&UID265988#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
DeviceKey = \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0001
DeviceName = \\.\DISPLAY9\Monitor0
DeviceString = Surface Display
Mirror = false
Desktop/Active = false
GetMonitorInfo OK
MonitorName = \\.\DISPLAY10
DeviceID = \\?\DISPLAY#LGD0555#4&5b5cba1&2&UID265988#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
DeviceKey = \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0001
DeviceName = \\.\DISPLAY10\Monitor0
DeviceString = Surface Display
Mirror = false
Desktop/Active = false
GetMonitorInfo OK
MonitorName = \\.\DISPLAY11
DeviceID = \\?\DISPLAY#LGD0555#4&5b5cba1&2&UID265988#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
DeviceKey = \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0001
DeviceName = \\.\DISPLAY11\Monitor0
DeviceString = Surface Display
Mirror = false
Desktop/Active = false
EnumDisplayMonitors OK
Report #2 v1.1:
DeviceID = PCI\VEN_8086&DEV_5917&SUBSYS_00261414&REV_07
DeviceKey = \Registry\Machine\System\CurrentControlSet\Control\Video\{F6873EDE-E79E-11EA-8F6F-D1E000256671}\0000
DeviceName = \\.\DISPLAY9
DeviceString = Intel(R) UHD Graphics 620
Mirror = false
Desktop/Active = true
Associated devices:
Device #0:
DeviceID = \\?\DISPLAY#LGD0555#4&5b5cba1&2&UID265988#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
DeviceKey = \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0001
DeviceName = \\.\DISPLAY9\Monitor0
DeviceString = Surface Display
Mirror = false
Desktop/Active = false
Device #1:
DeviceID = \\?\DISPLAY#DEL40E0#4&5b5cba1&2&UID208387#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
DeviceKey = \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0003
DeviceName = \\.\DISPLAY9\Monitor1
DeviceString = Dell UP2516D (DP)
Mirror = false
Desktop/Active = true
DeviceID = PCI\VEN_8086&DEV_5917&SUBSYS_00261414&REV_07
DeviceKey = \Registry\Machine\System\CurrentControlSet\Control\Video\{F6873EDE-E79E-11EA-8F6F-D1E000256671}\0001
DeviceName = \\.\DISPLAY10
DeviceString = Intel(R) UHD Graphics 620
Mirror = false
Desktop/Active = true
Associated devices:
Device #0:
DeviceID = \\?\DISPLAY#LGD0555#4&5b5cba1&2&UID265988#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
DeviceKey = \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0001
DeviceName = \\.\DISPLAY10\Monitor0
DeviceString = Surface Display
Mirror = false
Desktop/Active = false
Device #1:
DeviceID = \\?\DISPLAY#DEL40E0#4&5b5cba1&2&UID200195#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
DeviceKey = \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0002
DeviceName = \\.\DISPLAY10\Monitor1
DeviceString = Dell UP2516D (DP)
Mirror = false
Desktop/Active = true
DeviceID = PCI\VEN_8086&DEV_5917&SUBSYS_00261414&REV_07
DeviceKey = \Registry\Machine\System\CurrentControlSet\Control\Video\{F6873EDE-E79E-11EA-8F6F-D1E000256671}\0002
DeviceName = \\.\DISPLAY11
DeviceString = Intel(R) UHD Graphics 620
Mirror = false
Desktop/Active = true
Associated devices:
Device #0:
DeviceID = \\?\DISPLAY#LGD0555#4&5b5cba1&2&UID265988#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
DeviceKey = \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0001
DeviceName = \\.\DISPLAY11\Monitor0
DeviceString = Surface Display
Mirror = false
Desktop/Active = false
Device #1:
DeviceID = \\?\DISPLAY#DEL40E0#4&5b5cba1&2&UID216579#{e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
DeviceKey = \Registry\Machine\System\CurrentControlSet\Control\Class\{4d36e96e-e325-11ce-bfc1-08002be10318}\0004
DeviceName = \\.\DISPLAY11\Monitor1
DeviceString = Dell UP2516D (DP)
Mirror = false
Desktop/Active = true
@RoL0NL
thanks, that was very useful.
Note: even if https://github.com/microsoft/PowerToys/issues/1777 is very similar to this issue, they are not exactly the same.
In this case Windows does return the correct monitor ID when enumerating the associated devices
of a given monitor, while for https://github.com/microsoft/PowerToys/issues/1777 it doesn't happen. We might fix the two issues in a different way (still evaluating the best approach).
@RoL0NL
if it's ok for you to install an unsigned build, we have a possible fix in the work.
I've attached the private build that may be able to detect the monitors correctly.
Before install it, quit PowerToys and delete the current FZ settings opening a command prompt and running:
del %localappdata%\Microsoft\PowerToys\FancyZones
@enricogior
This does indeed work! Nice work!
Here is the new zones-settings.json
by the way (after applying different types to all monitors). Thank you for the fix!
{
"devices": [
{
"device-id": "DEL40E0#4&5b5cba1&2&UID216579_2560_1440_{AD908D4B-B867-4D18-AAEC-E939D13DF890}",
"active-zoneset": {
"uuid": "{D6BB313C-7F66-4D2E-AB0C-669B9B09A0BE}",
"type": "priority-grid"
},
"editor-show-spacing": true,
"editor-spacing": 16,
"editor-zone-count": 3,
"editor-sensitivity-radius": 20
},
{
"device-id": "DEL40E0#4&5b5cba1&2&UID208387_2560_1440_{AD908D4B-B867-4D18-AAEC-E939D13DF890}",
"active-zoneset": {
"uuid": "{6A864A16-38FA-4D07-8A75-E4679CCDD9A2}",
"type": "rows"
},
"editor-show-spacing": true,
"editor-spacing": 16,
"editor-zone-count": 3,
"editor-sensitivity-radius": 20
},
{
"device-id": "DEL40E0#4&5b5cba1&2&UID200195_2560_1440_{AD908D4B-B867-4D18-AAEC-E939D13DF890}",
"active-zoneset": {
"uuid": "{748841ED-164F-419D-9D96-D4BA40718278}",
"type": "columns"
},
"editor-show-spacing": false,
"editor-spacing": 16,
"editor-zone-count": 3,
"editor-sensitivity-radius": 20
},
{
"device-id": "LGD0555#4&5b5cba1&2&UID265988_2736_1824_{AD908D4B-B867-4D18-AAEC-E939D13DF890}",
"active-zoneset": {
"uuid": "{0D389746-B5CB-468D-AAD3-D1996F7EC33E}",
"type": "grid"
},
"editor-show-spacing": true,
"editor-spacing": 16,
"editor-zone-count": 4,
"editor-sensitivity-radius": 20
}
],
"custom-zone-sets": []
}
@RoL0NL
great, we will add the fix to 0.25.
I'll keep the issue open until we release the fix.
Thanks.
@RoL0NL
one more thing, we are in the process to release 0.23 that doesn't contain this fix.
But the private build is from the 0.23 code base + the fix even if it's version number 0.21.2.
So you can skip to update to 0.23 and wait until 0.25 (end of October)
Great! Thank you for the extra info about the version numbers. Sorry for closing by the way ;)
Added in 0.25 release https://github.com/microsoft/PowerToys/releases/tag/v0.25.0
Most helpful comment
So, the first parts show identical ID's, the WMI report show different instance names and serial number (note that the second and fourth monitor have nearly identical serials, but are different.)
By the way, all three monitors are connected via the Surface Dock, which has only two (mini) DisplayPort connections. So, the third Dell monitor is connected to the DP-out port of the second monitor (Daisy chaining/MST). Looking at the DP Topology graph of the Intel Graphics Settings (Display>DisplayPort Topology), it looks like there is another MST-hub-like setup for the two DP connectors in the Dock, so can it be possible that all three monitors share the same graphics adapter port, somehow resulting in non-unique DeviceID's