Skip to content

Commit

Permalink
Actually Fix this Time
Browse files Browse the repository at this point in the history
- Added two methods of getting screen resolution
  - First one runs if running as admin, and gets the screen information from HKLM:\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration\
    - Location contains refresh rate, so I added that in too
  - Second method uses implementation in lptstr#131 which is about 4x slower for me, but seems to be the only way to get it working that I can find
  • Loading branch information
Carterpersall committed Sep 22, 2022
1 parent 111cd1c commit 7533641
Showing 1 changed file with 86 additions and 4 deletions.
90 changes: 86 additions & 4 deletions winfetch.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -617,11 +617,93 @@ function info_uptime {
# ===== RESOLUTION =====
function info_resolution {
Add-Type -AssemblyName System.Windows.Forms
$monitors = [System.Windows.Forms.Screen]::AllScreens
$scale = (Get-CimInstance -Namespace root\wmi -ClassName WmiMonitorBasicDisplayParams -CimSession $cimSession).DisplayTransferCharacteristic

# Checks if running as admin
if((New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)){
[System.Collections.ArrayList]$displays = @()
# Gets the current screen layout from the registry
Get-ChildItem -path HKLM:\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\Configuration\ | Get-ItemProperty | ForEach-Object{
if($_.Timestamp -gt $timestamp){
$layout = $_
$timestamp = $_.timestamp
}
}

$displays = for($i = 0;$i -lt $monitors.Length;$i++){
"$($monitors[$i].Bounds.Size.Width * ($scale[$i] / 96))x$($monitors[$i].Bounds.Size.Height * ($scale[$i] / 96))"
# Gets resolution and refresh rate for each display
$displays = $layout | Get-ChildItem | Get-ChildItem | Get-ItemProperty | ForEach-Object{
"$($_."ActiveSize.cx")x$($_."ActiveSize.cy")@$($_."VSyncFreq.Numerator"/$_."VSyncFreq.Denominator")Hz"
}
}else{
# Use Add-Type Method (at least 4x slower)
Add-Type @"
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System;
using System.Linq;
namespace WinAPI
{
public class MonitorMethods
{
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
struct MONITORINFOEX
{
public int Size;
public Rect Monitor;
public Rect WorkArea;
public uint Flags;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string DeviceName;
}
[DllImport("Shcore.dll")]
static public extern bool SetProcessDpiAwareness(int value);
[DllImport("user32.dll")]
static extern bool EnumDisplayMonitors(
IntPtr hdc,
IntPtr lprcClip,
EnumMonitorsDelegate lpfnEnum,
IntPtr dwData
);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern bool GetMonitorInfo(IntPtr hMonitor, ref MONITORINFOEX lpmi);
[StructLayout(LayoutKind.Sequential)]
public struct Rect
{
public int left;
public int top;
public int right;
public int bottom;
}
delegate bool EnumMonitorsDelegate(IntPtr hMonitor, IntPtr hdcMonitor, ref Rect lprcMonitor, IntPtr dwData);
static private List<DisplayInfo> m_displays = new List<DisplayInfo>();
static bool EnumProc(IntPtr hMonitor, IntPtr hdcMonitor, ref Rect lprcMonitor, IntPtr dwData)
{
MONITORINFOEX mONITORINFOEX = new MONITORINFOEX();
mONITORINFOEX.Size = Marshal.SizeOf(typeof(MONITORINFOEX));
GetMonitorInfo(hMonitor, ref mONITORINFOEX);
var displayInfo = new DisplayInfo();
displayInfo.X = (int)((mONITORINFOEX.Monitor.right - mONITORINFOEX.Monitor.left));
displayInfo.Y = (int)((mONITORINFOEX.Monitor.bottom - mONITORINFOEX.Monitor.top));
m_displays.Add(displayInfo);
return true;
}
public class DisplayInfo
{
public int X;
public int Y;
}
public static string GetResolution()
{
SetProcessDpiAwareness(2);
m_displays = new List<DisplayInfo>();
EnumDisplayMonitors(IntPtr.Zero, IntPtr.Zero, EnumProc, IntPtr.Zero);
return String.Join(", ", m_displays.Select(displayInfo => displayInfo.X.ToString() + "x" + displayInfo.Y.ToString()));
}
}
}
"@
$displays = [WinAPI.MonitorMethods]::GetResolution()
}

return @{
Expand Down

0 comments on commit 7533641

Please sign in to comment.