Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .task/checksum/build
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
59580c486f374847db3eaf5ef6840550
1 change: 1 addition & 0 deletions .task/checksum/restore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
249f80eb30502a59abbbf97324e45dbe
2 changes: 1 addition & 1 deletion DisplayManager.Linux/Program.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using Gregghz.DisplayManager.Services;
using Gregghz.DisplayManager.Services.Implementations;
using Gregghz.DisplayManager.UI.Cli;
using Gregghz.DisplayManager.Cli;
using Gtk;

namespace Gregghz.DisplayManager;
Expand Down
2 changes: 1 addition & 1 deletion DisplayManager.Mac/Program.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Gregghz.DisplayManager.Services.Implementations;
using Gregghz.DisplayManager.UI.Cli;
using Gregghz.DisplayManager.Cli;

namespace Gregghz.DisplayManager;

Expand Down
15 changes: 0 additions & 15 deletions DisplayManager.Windows/App.xaml

This file was deleted.

42 changes: 0 additions & 42 deletions DisplayManager.Windows/App.xaml.cs

This file was deleted.

14 changes: 1 addition & 13 deletions DisplayManager.Windows/DisplayManager.Windows.csproj
Original file line number Diff line number Diff line change
@@ -1,34 +1,22 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
<TargetPlatfomVersion>10.0.19041.0</TargetPlatfomVersion>
<TargetPlatfomMinVersion>10.0.17763</TargetPlatfomMinVersion>
<RootNamespace>Gregghz.DisplayManager.Windows</RootNamespace>
<ApplicationManifest>app.manifest</ApplicationManifest>
<Platform>x86;x64</Platform>
<RuntimeIdentifiers>win-x86;win-x64</RuntimeIdentifiers>
<PublishProfile>win-$(Platform).pubxml</PublishProfile>
<UseWinUI>true</UseWinUI>
<EnableMsixTooling>true</EnableMsixTooling>
<WindowsPackageType>None</WindowsPackageType>
<AppxPackage>false</AppxPackage>
<WinUISDKReferences>false</WinUISDKReferences>

<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.UI.Xaml" Version="2.8.6"/>
<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.5.240311000"/>
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.22621.3233"/>
</ItemGroup>

<ItemGroup>
<Manifest Include="app.manifest"/>
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\DisplayManager\DisplayManager.csproj"/>
</ItemGroup>
Expand Down
9 changes: 8 additions & 1 deletion DisplayManager.Windows/Extensions/SettingsExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@ namespace Gregghz.DisplayManager.Windows.Extensions;

public static class SettingsExtensions
{
public static Settings FromDevMode(string deviceId, in DEVMODE mode)
public static Settings FromDevMode(string deviceId, bool isConnected, in DEVMODE mode)
{
return new Settings(
deviceId,
mode.dmPositionX == 0 && mode.dmPositionY == 0,
isConnected,
new Position(mode.dmPositionX, mode.dmPositionY),
new Resolution(mode.dmPelsWidth, mode.dmPelsHeight),
(Orientation)mode.dmDisplayOrientation,
Expand All @@ -19,6 +20,12 @@ public static Settings FromDevMode(string deviceId, in DEVMODE mode)

public static DEVMODE UpdateDevMode(this Settings settings, ref DEVMODE mode)
{
mode.dmFields |= Constants.DM_POSITION |
Constants.DM_PELSWIDTH |
Constants.DM_PELSHEIGHT |
Constants.DM_DISPLAYORIENTATION |
Constants.DM_DISPLAYFREQUENCY;

if (settings.IsPrimary)
{
mode.dmPositionX = 0;
Expand Down
22 changes: 13 additions & 9 deletions DisplayManager.Windows/Native/Constants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,23 @@ namespace Gregghz.DisplayManager.Windows.Native;
public static class Constants
{
public const int ENUM_CURRENT_SETTINGS = -1;
public const uint EDD_GET_DEVICE_INTERFACE_NAME = 0x00000001;
public const int ENUM_REGISTRY_SETTINGS = -2;

public const int DISPLAY_DEVICE_ATTACHED_TO_DESKTOP = 0x00000001;
public const int DISPLAY_DEVICE_PRIMARY_DEVICE = 0x00000004;

public const int DM_POSITION = 0x00000020;
public const int DM_DISPLAYORIENTATION = 0x00000080;
public const int DM_PELSWIDTH = 0x00080000;
public const int DM_PELSHEIGHT = 0x00100000;
public const int DM_DISPLAYFREQUENCY = 0x00400000;

public const uint SDC_APPLY = 0x00000080;
public const uint SDC_TOPOLOGY_EXTEND = 0x00000004;

public const int CDS_NONE = 0x00;
public const int CDS_UPDATEREGISTRY = 0x01;
public const int CDS_TEST = 0x02;
public const int CDS_FULLSCREEN = 0x04;
public const int CDS_GLOBAL = 0x08;
public const int CDS_SET_PRIMARY = 0x10;
public const int CDS_VIDEOPARAMETERS = 0x20;
public const int CDS_ENABLE_UNSAFE_MODES = 0x100;
public const int CDS_DISABLE_UNSAFE_MODES = 0x200;
public const int CDS_RESET = 0x40000000;
public const int CDS_RESET_EX = 0x20000000;
public const int CDS_NORESET = 0x10000000;

public const int DISP_CHANGE_SUCCESSFUL = 0;
Expand Down
33 changes: 33 additions & 0 deletions DisplayManager.Windows/Native/DisplayAPI.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
using System.Runtime.InteropServices;

namespace Gregghz.DisplayManager.Windows.Native;

public static class DisplayApi
{
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern bool EnumDisplayDevices(
string lpDevice,
uint iDevNum,
ref DISPLAY_DEVICE lpDisplayDevice,
uint dwFlags);

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DISPLAY_DEVICE
{
public int cb;

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string DeviceName;

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string DeviceString;

public int StateFlags;

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string DeviceID;

[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string DeviceKey;
}
}
18 changes: 0 additions & 18 deletions DisplayManager.Windows/Native/DisplayDevice.cs

This file was deleted.

10 changes: 9 additions & 1 deletion DisplayManager.Windows/Native/User32.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,14 @@ public static extern int ChangeDisplaySettingsEx(string? lpszDeviceName, IntPtr
public static extern bool EnumDisplaySettings(string deviceName, int modeNum, ref DEVMODE devMode);

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern bool EnumDisplayDevices(string lpDevice, uint iDevNum, ref DISPLAY_DEVICE lpDisplayDevice,
public static extern bool EnumDisplayDevices(string? lpDevice, uint iDevNum, ref DisplayApi.DISPLAY_DEVICE lpDisplayDevice,
uint dwFlags);

[DllImport("user32.dll")]
public static extern int SetDisplayConfig(
uint numPathArrayElements,
IntPtr pathArray,
uint numModeInfoArrayElements,
IntPtr modeInfoArray,
uint flags);
}
15 changes: 15 additions & 0 deletions DisplayManager.Windows/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using Gregghz.DisplayManager.Services.Implementations;
using Gregghz.DisplayManager.Cli;
using Gregghz.DisplayManager.Windows.Services.Implementations;

var appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
var path = Path.Combine(appDataPath, "DisplayManager");
Directory.CreateDirectory(path);

var layoutService = new FileSystemLayoutService(path);
var displayService = new WindowsDisplayService();

var argsToRun = args.Length == 0 ? ["--help"] : args;

var console = new ConsoleMain(displayService, layoutService);
console.Run(argsToRun);
Loading