diff --git a/App.config b/App.config
index 193aecc..c64beff 100644
--- a/App.config
+++ b/App.config
@@ -1,6 +1,6 @@
-
+
-
+
\ No newline at end of file
diff --git a/DisplayProfileManager.csproj b/DisplayProfileManager.csproj
index 4e467fe..3718856 100644
--- a/DisplayProfileManager.csproj
+++ b/DisplayProfileManager.csproj
@@ -8,7 +8,7 @@
WinExe
DisplayProfileManager
DisplayProfileManager
- v4.8
+ v4.8.1
512
{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
4
diff --git a/src/Helpers/AudioHelper.cs b/src/Helpers/AudioHelper.cs
index e65ce26..5c9a701 100644
--- a/src/Helpers/AudioHelper.cs
+++ b/src/Helpers/AudioHelper.cs
@@ -557,20 +557,28 @@ private static string GetDeviceNameViaWin32SystemDevicesWMI(IDevice device)
{
searcher.Options.Timeout = TimeSpan.FromSeconds(5);
- ManagementObjectCollection results = searcher.Get();
-
- foreach (var wmiDevice in results)
- {
- var deviceName = wmiDevice["Name"]?.ToString();
- var wmiDeviceId = wmiDevice["DeviceID"]?.ToString();
-
- // CRITICAL: Only process devices that could be related to our target device
- if (IsBluetoothDeviceFromWmiProperties(deviceName))
+ using (ManagementObjectCollection results = searcher.Get())
+ {
+ foreach (ManagementObject wmiDevice in results)
{
- // Enhanced device-specific correlation
- if (IsDeviceSpecificallyRelated(targetDeviceId, wmiDeviceId))
+ try
+ {
+ var deviceName = wmiDevice["Name"]?.ToString();
+ var wmiDeviceId = wmiDevice["DeviceID"]?.ToString();
+
+ // CRITICAL: Only process devices that could be related to our target device
+ if (IsBluetoothDeviceFromWmiProperties(deviceName))
+ {
+ // Enhanced device-specific correlation
+ if (IsDeviceSpecificallyRelated(targetDeviceId, wmiDeviceId))
+ {
+ return deviceName;
+ }
+ }
+ }
+ finally
{
- return deviceName;
+ wmiDevice.Dispose();
}
}
}
diff --git a/src/Helpers/DisplayConfigHelper.cs b/src/Helpers/DisplayConfigHelper.cs
index 4c6ca72..55e3c93 100644
--- a/src/Helpers/DisplayConfigHelper.cs
+++ b/src/Helpers/DisplayConfigHelper.cs
@@ -178,6 +178,7 @@ public struct DISPLAYCONFIG_PATH_TARGET_INFO
public uint scaling;
public DISPLAYCONFIG_RATIONAL refreshRate;
public uint scanLineOrdering;
+ [MarshalAs(UnmanagedType.Bool)]
public bool targetAvailable;
public uint statusFlags;
}
diff --git a/src/Helpers/DisplayHelper.cs b/src/Helpers/DisplayHelper.cs
index 771bfb8..70f56a5 100644
--- a/src/Helpers/DisplayHelper.cs
+++ b/src/Helpers/DisplayHelper.cs
@@ -387,21 +387,28 @@ public static List GetMonitorsFromWin32PnPEntity()
{
foreach (ManagementObject obj in collection)
{
- var monitor = new MonitorInfo
+ try
{
- Name = obj["Name"]?.ToString() ?? "",
- DeviceID = obj["DeviceID"]?.ToString() ?? "",
- PnPDeviceID = obj["PNPDeviceID"]?.ToString() ?? "",
- Description = obj["Description"]?.ToString() ?? "",
- Manufacturer = obj["Manufacturer"]?.ToString() ?? ""
- };
-
- logger.Debug($"WMI Win32PnPEntity Monitor: Name='{monitor.Name}', DeviceID='{monitor.DeviceID}', PnPDeviceID='{monitor.PnPDeviceID}'");
-
- // Filter out non-monitor devices
- if (!string.IsNullOrEmpty(monitor.Name))
+ var monitor = new MonitorInfo
+ {
+ Name = obj["Name"]?.ToString() ?? "",
+ DeviceID = obj["DeviceID"]?.ToString() ?? "",
+ PnPDeviceID = obj["PNPDeviceID"]?.ToString() ?? "",
+ Description = obj["Description"]?.ToString() ?? "",
+ Manufacturer = obj["Manufacturer"]?.ToString() ?? ""
+ };
+
+ logger.Debug($"WMI Win32PnPEntity Monitor: Name='{monitor.Name}', DeviceID='{monitor.DeviceID}', PnPDeviceID='{monitor.PnPDeviceID}'");
+
+ // Filter out non-monitor devices
+ if (!string.IsNullOrEmpty(monitor.Name))
+ {
+ monitors.Add(monitor);
+ }
+ }
+ finally
{
- monitors.Add(monitor);
+ obj.Dispose();
}
}
}
@@ -435,27 +442,33 @@ public static List GetMonitorIDsFromWmiMonitorID()
{
foreach (ManagementObject obj in collection)
{
- var monitorId = new MonitorIdInfo
+ try
{
- InstanceName = obj["InstanceName"]?.ToString() ?? "",
- // ManufacturerName, ProductCodeID, SerialNumberID are returned as ushort[] (UTF-16 words)
- ManufacturerName = ArrayUshortToString(obj["ManufacturerName"] as ushort[]),
- ProductCodeID = ArrayUshortToHexString(obj["ProductCodeID"] as ushort[]),
- SerialNumberID = ArrayUshortToString(obj["SerialNumberID"] as ushort[]),
- };
-
- logger.Debug($"WMI WmiMonitorID Monitor: " +
- $"InstanceName='{monitorId.InstanceName}', " +
- $"ManufacturerName='{monitorId.ManufacturerName}', " +
- $"ProductCodeID='{monitorId.ProductCodeID}', " +
- $"SerialNumberID='{monitorId.SerialNumberID}'");
-
- // Filter out non-monitor devices
- if (!string.IsNullOrEmpty(monitorId.InstanceName))
+ var monitorId = new MonitorIdInfo
+ {
+ InstanceName = obj["InstanceName"]?.ToString() ?? "",
+ // ManufacturerName, ProductCodeID, SerialNumberID are returned as ushort[] (UTF-16 words)
+ ManufacturerName = ArrayUshortToString(obj["ManufacturerName"] as ushort[]),
+ ProductCodeID = ArrayUshortToHexString(obj["ProductCodeID"] as ushort[]),
+ SerialNumberID = ArrayUshortToString(obj["SerialNumberID"] as ushort[]),
+ };
+
+ logger.Debug($"WMI WmiMonitorID Monitor: " +
+ $"InstanceName='{monitorId.InstanceName}', " +
+ $"ManufacturerName='{monitorId.ManufacturerName}', " +
+ $"ProductCodeID='{monitorId.ProductCodeID}', " +
+ $"SerialNumberID='{monitorId.SerialNumberID}'");
+
+ // Filter out non-monitor devices
+ if (!string.IsNullOrEmpty(monitorId.InstanceName))
+ {
+ monitorIDs.Add(monitorId);
+ }
+ }
+ finally
{
- monitorIDs.Add(monitorId);
+ obj.Dispose();
}
-
}
}
}