WindowsDisplayAPI
WindowsDisplayAPI copied to clipboard
Enabling displays does not work
Hello,
I tried to use the new version of Your library and it seems that enabling displays stopped working. The sample throws an exception for "DeviceContext: Enable All" in
var validSetting = display.DisplayScreen.GetPreferredSetting();
because display.DisplayScreen is null. I tried to enable displays in my code via API call but it did not work either.
Hey,
This is the master
branch, right? Since the latest release and the NuGet package don't have the DisplayScreen
class yet.
I will take a look at that. Thanks for reporting.
Yes, sorry for not specifying that. Let me know if I can be of any help with this.
I checked the v1.3.0.13 release and it does not work either. No exception is raised, but the disabled display is not enabled. In v1.2.0.2 it works fine.
What you are trying to do? The DriverContext
API is a legacy and might not work as expected. Especially if you are trying to enable a device that was connected to a display source or if it was in a clone group. You simply can't do much.
I suggest using classes inside the DisplayConfig
namespace. Find your physical device using the PathDisplayTarget
and create a logical desktop corresponding to using the PathDisplaySource
class then wire them all together and apply the configuration using the PathInfo
class.
I gave more descriptive information in the following issues: https://github.com/falahati/NvAPIWrapper/issues/8#issuecomment-465103838 https://github.com/falahati/NvAPIWrapper/issues/26#issuecomment-634543169
I have a display that is "disconnected" (in the terminology of Windows display settings) - it is connected, but disabled. Calling
display.Enable(new WindowsDisplayAPI.DisplaySetting(display.GetPreferedSetting()));
in previous versions of Your library started the display (that is the desired state for me). This functionality is not present in the latest release. Is it a bug or a feature? :-)
I don't think I change anything related to this with the last release, give me a moment to check it on my device. So the v1.2 or the v1.1 works but v1.3 fails? What are the values of the unattached display's properties? Does it have a valid display name? ("//DISPLAY1", "//DISPLAY2" ...) And is there an already attached display that has the same name?
I found the bug. In previous versions (tested on v1.1 and v1.2) the attached displays had names "//DISPLAY1", "//DISPLAY2", "//DISPLAY3" and the unattached display had name "//DISPLAY4". In the new release (v1.3), the attached display names stay the same, but the unattached display has the name "//DISPLAY2" (so there is a duplicity in the naming).
Ok, the only change between the version that might be remotely related is the changes to the GetDisplayDevices()
method. I will take another look into that. Meanwhile, if you don't need the DPI functionality you can use v1.2 safely.
Thanks for reporting this issue
[DllImport("user32")]
public static extern Win32Status DisplayConfigGetDeviceInfo(
ref DisplayConfigSupportVirtualResolution targetSupportVirtualResolution
);
Does it work well?
This is the Windows api:
WINUSERAPI LONG WINAPI DisplayConfigGetDeviceInfo( Inout_ DISPLAYCONFIG_DEVICE_INFO_HEADER* requestPacket);
And How convert DisplayConfigSupportVirtualResolution
to DISPLAYCONFIG_DEVICE_INFO_HEADER
?
Yes, that part is correct. It is not the source of the problem.
You see, DisplayConfigGetDeviceInfo
fills data based on the header of the passed struct
. So in this case, DisplayConfigSupportVirtualResolution
is a struct
that is used to get virtual resolution information. What you are seeing in the native signature as DISPLAYCONFIG_DEVICE_INFO_HEADER
is actually defined as DisplayConfigDeviceInfoHeader
in this library and is included as the header of the DisplayConfigSupportVirtualResolution
to notify the native method of the type of the data requested.
Check here: https://github.com/falahati/WindowsDisplayAPI/blob/62e27b37dd1a3aa4e49a36286ae39b5aee7f3671/WindowsDisplayAPI/Native/DisplayConfig/Structures/DisplayConfigSupportVirtualResolution.cs#L11 And here: https://github.com/falahati/WindowsDisplayAPI/blob/62e27b37dd1a3aa4e49a36286ae39b5aee7f3671/WindowsDisplayAPI/Native/DisplayConfig/Structures/DisplayConfigDeviceInfoHeader.cs