Skip to content

Commit 122cc91

Browse files
committed
添加图形模式显示和切换功能。CPU与GPU监控均关闭时才会提示不能使用自动转速控制模式。
1 parent 5466a7f commit 122cc91

4 files changed

Lines changed: 68 additions & 53 deletions

File tree

HelpForm.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,8 @@ public HelpForm() {
4646
Text = "版本号:" + version +
4747
"\n更新说明:\n" +
4848
"(1)功能:新增本机信息,包括IR、南桥、环境传感器温度和主板产品号等;\n" +
49-
"(2)功能:新增刷新频率和温度显示方式菜单;\n" +
50-
"(3)修复:启动时Tpp设置失效的异常;\n" +
51-
"(4)修复:增强温度过高时自动切换模式的稳定性。\n\n" +
49+
"(2)功能:添加图形模式显示和切换功能;\n" +
50+
"(3)修复:CPU与GPU监控均关闭时才会提示不能使用自动转速控制模式。\n\n" +
5251

5352
"本项目已开源至Github:https://github.com/breadeding/OmenSuperHub\n\n" +
5453
"一. “风扇配置”菜单说明:\n" +

OmenHardware.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,8 @@ public static void PrintSystemDesignData() {
125125
Console.WriteLine($" => AMD BIOS 定义超频 (Bit0) : {((b6 & 0x01) != 0 ? "是" : "否")}");
126126
Console.WriteLine();
127127

128-
// --- 字节 [7]: 保留/未使用 ---
129-
Console.WriteLine($"[7] (保留) = 0x{data[7]:X2}");
128+
// --- 字节 [7]: 图形模式支持标记 ---
129+
Console.WriteLine($"[7] 图形模式支持标记 = 0x{data[7]:X2}");
130130
Console.WriteLine();
131131

132132
// --- 字节 [8]: Default Concurrent TDP ---
@@ -193,7 +193,7 @@ public enum GraphicsMode {
193193
}
194194

195195
/// <summary>
196-
/// 获取当前显卡模式(读取时返回的是当前生效的模式,可能需要重启后才会变化
196+
/// 获取当前显卡模式(指BIOS中的设置
197197
/// </summary>
198198
public static GraphicsMode GetGfxMode() {
199199
byte[] result = SendOmenBiosWmi(82, new byte[4] { 0, 0, 0, 0 }, 4, 1);

Program.cs

Lines changed: 61 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ static class Program {
7272
static ToolStripMenuItem pchSensorMenu;
7373
static ToolStripMenuItem vrSensorMenu;
7474
static ToolStripMenuItem adapterPowerMenu;
75+
7576
static bool isSysInfoMenuOpen = false;
7677
static int? maxCPUTemp = null;
7778
static int maxGPUTemp = 87;
@@ -183,29 +184,6 @@ static void Main(string[] args) {
183184
//trayIcon.BalloonTipIcon = ToolTipIcon.Warning;
184185
//trayIcon.ShowBalloonTip(3000);
185186

186-
// 读取当前模式
187-
//GraphicsMode current = GetGfxMode();
188-
//Console.WriteLine($"当前显卡模式:{current}");
189-
190-
// 设置
191-
//NvidiaAPI_SYS_UIControl(false);
192-
193-
// 检查支持的模式
194-
byte supported = GetSupportedGfxModes();
195-
bool nvddsSupported = (supported & 0x08) != 0; // SupportMode_DDS = 8
196-
Console.WriteLine($"NVIDIA DDS 支持: {nvddsSupported}");
197-
198-
if (AmdGpuSwitcher.IsSupported()) {
199-
var current = AmdGpuSwitcher.GetMode();
200-
Console.WriteLine($"当前模式: {(current == AmdGpuSwitcher.LocalADLSmartMuxEnableState.ADL_MUXCONTROL_ENABLED ? "独显直连" : "混合输出")}");
201-
202-
// 切换到独显直连
203-
//AmdGpuSwitcher.SetMode(AmdGpuSwitcher.LocalADLSmartMuxEnableState.ADL_MUXCONTROL_ENABLED);
204-
//Console.WriteLine("已切换");
205-
} else {
206-
Console.WriteLine("该设备不支持 AMD SmartAccess Graphics");
207-
}
208-
209187
Application.Run();
210188
}
211189
}
@@ -908,21 +886,42 @@ static void InitTrayIcon() {
908886
RestoreCPUPower();
909887
}, false));
910888
performanceControlMenu.DropDownItems.Add(new ToolStripSeparator()); // Separator between groups
911-
performanceControlMenu.DropDownItems.Add(CreateMenuItem("最大GPU功率", "gpuPowerGroup", (s, e) => {
912-
gpuPower = "max";
913-
SetMaxGpuPower();
914-
SaveConfig("GpuPower");
915-
}, true));
916-
performanceControlMenu.DropDownItems.Add(CreateMenuItem("中等GPU功率", "gpuPowerGroup", (s, e) => {
917-
gpuPower = "med";
918-
SetMedGpuPower();
919-
SaveConfig("GpuPower");
920-
}, false));
921-
performanceControlMenu.DropDownItems.Add(CreateMenuItem("最小GPU功率", "gpuPowerGroup", (s, e) => {
922-
gpuPower = "min";
923-
SetMinGpuPower();
924-
SaveConfig("GpuPower");
925-
}, false));
889+
// 图形模式
890+
ToolStripMenuItem graphicsModeControlMenu = new ToolStripMenuItem("图形模式");
891+
if (HasAmdGpu()) {
892+
var initAmdMode = AmdGpuSwitcher.GetMode();
893+
bool amdIsDiscrete = initAmdMode == AmdGpuSwitcher.LocalADLSmartMuxEnableState.ADL_MUXCONTROL_ENABLED;
894+
graphicsModeControlMenu.DropDownItems.Add(CreateMenuItem("独显直连", "graphicsModeGroup", (s, e) => {
895+
AmdGpuSwitcher.SetMode(AmdGpuSwitcher.LocalADLSmartMuxEnableState.ADL_MUXCONTROL_ENABLED);
896+
}, amdIsDiscrete));
897+
graphicsModeControlMenu.DropDownItems.Add(CreateMenuItem("混合输出", "graphicsModeGroup", (s, e) => {
898+
AmdGpuSwitcher.SetMode(AmdGpuSwitcher.LocalADLSmartMuxEnableState.ADL_MUXCONTROL_DISABLED);
899+
}, !amdIsDiscrete));
900+
} else {
901+
var initNvMode = GetGfxMode();
902+
graphicsModeControlMenu.DropDownItems.Add(CreateMenuItem("NV动态切换", "graphicsModeGroup", (s, e) => {
903+
LaunchDDS();
904+
}, initNvMode == GraphicsMode.Hybrid));
905+
graphicsModeControlMenu.DropDownItems.Add(CreateMenuItem("独显直连", "graphicsModeGroup", (s, e) => {
906+
LaunchDDS();
907+
}, initNvMode == GraphicsMode.Discrete));
908+
}
909+
performanceControlMenu.DropDownItems.Add(graphicsModeControlMenu);
910+
graphicsModeControlMenu.DropDownOpening += (s, e) => {
911+
if (HasAmdGpu()) {
912+
var amdMode = AmdGpuSwitcher.GetMode();
913+
bool isDisc = amdMode == AmdGpuSwitcher.LocalADLSmartMuxEnableState.ADL_MUXCONTROL_ENABLED;
914+
UpdateCheckedState("graphicsModeGroup", isDisc ? "独显直连" : "混合输出");
915+
} else {
916+
var nvMode = GetGfxMode();
917+
string chk;
918+
switch (nvMode) {
919+
case GraphicsMode.Discrete: chk = "独显直连"; break;
920+
default: chk = "NV动态切换"; break;
921+
}
922+
UpdateCheckedState("graphicsModeGroup", chk);
923+
}
924+
};
926925
performanceControlMenu.DropDownItems.Add(new ToolStripSeparator()); // Separator between groups
927926
ToolStripMenuItem DBMenu = new ToolStripMenuItem("切换DB版本");
928927
DBMenu.DropDownItems.Add(CreateMenuItem("解锁版本", "DBGroup", (s, e) => {
@@ -1070,6 +1069,23 @@ static void InitTrayIcon() {
10701069
}, false));
10711070
}
10721071
performanceControlMenu.DropDownItems.Add(cpuPowerMenu);
1072+
ToolStripMenuItem gpuPowerMenu = new ToolStripMenuItem("GPU功率");
1073+
gpuPowerMenu.DropDownItems.Add(CreateMenuItem("最大", "gpuPowerGroup", (s, e) => {
1074+
gpuPower = "max";
1075+
SetMaxGpuPower();
1076+
SaveConfig("GpuPower");
1077+
}, true));
1078+
gpuPowerMenu.DropDownItems.Add(CreateMenuItem("中等", "gpuPowerGroup", (s, e) => {
1079+
gpuPower = "med";
1080+
SetMedGpuPower();
1081+
SaveConfig("GpuPower");
1082+
}, false));
1083+
gpuPowerMenu.DropDownItems.Add(CreateMenuItem("最小", "gpuPowerGroup", (s, e) => {
1084+
gpuPower = "min";
1085+
SetMinGpuPower();
1086+
SaveConfig("GpuPower");
1087+
}, false));
1088+
performanceControlMenu.DropDownItems.Add(gpuPowerMenu);
10731089
ToolStripMenuItem gpuClockMenu = new ToolStripMenuItem("GPU频率限制");
10741090
gpuClockMenu.DropDownItems.Add(CreateMenuItem("还原", "gpuClockGroup", (s, e) => {
10751091
gpuClock = 0;
@@ -1123,8 +1139,8 @@ static void InitTrayIcon() {
11231139
SaveConfig("MonitorCPU");
11241140
}, true));
11251141
monitorCPUMenu.DropDownItems.Add(CreateMenuItem("关闭CPU监控", "monitorCPUGroup", (s, e) => {
1126-
// 自动转速模式下禁止关闭监控
1127-
if (fanControl == "auto") {
1142+
// 自动转速模式下禁止彻底关闭监控
1143+
if (!monitorGPU && fanControl == "auto") {
11281144
MessageBox.Show("当前为自动转速模式,若要关闭监控需切换为其他转速控制模式。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
11291145
UpdateCheckedState("monitorCPUGroup", monitorCPU ? "开启CPU监控" : "关闭CPU监控");
11301146
return;
@@ -1167,8 +1183,8 @@ static void InitTrayIcon() {
11671183
SaveConfig("MonitorGPU");
11681184
}, true));
11691185
monitorGPUMenu.DropDownItems.Add(CreateMenuItem("关闭GPU监控", "monitorGPUGroup", (s, e) => {
1170-
// 自动转速模式下禁止关闭监控
1171-
if (fanControl == "auto") {
1186+
// 自动转速模式下禁止彻底关闭监控
1187+
if (!monitorCPU && fanControl == "auto") {
11721188
MessageBox.Show("当前为自动转速模式,若要关闭监控需切换为其他转速控制模式。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
11731189
UpdateCheckedState("monitorGPUGroup", monitorGPU ? "开启GPU监控" : "关闭GPU监控");
11741190
return;
@@ -2634,15 +2650,15 @@ static void RestoreConfig() {
26342650
switch (gpuPower) {
26352651
case "max":
26362652
SetMaxGpuPower();
2637-
UpdateCheckedState("gpuPowerGroup", "最大GPU功率");
2653+
UpdateCheckedState("gpuPowerGroup", "最大");
26382654
break;
26392655
case "med":
26402656
SetMedGpuPower();
2641-
UpdateCheckedState("gpuPowerGroup", "中等GPU功率");
2657+
UpdateCheckedState("gpuPowerGroup", "中等");
26422658
break;
26432659
case "min":
26442660
SetMinGpuPower();
2645-
UpdateCheckedState("gpuPowerGroup", "最小GPU功率");
2661+
UpdateCheckedState("gpuPowerGroup", "最小");
26462662
break;
26472663
}
26482664

Properties/AssemblyVersion.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
using System.Reflection;
22

3-
[assembly: AssemblyVersion("2026.5.3.1")]
4-
[assembly: AssemblyInformationalVersion("2026.5.3")]
3+
[assembly: AssemblyVersion("2026.5.6.0")]
4+
[assembly: AssemblyInformationalVersion("2026.5.6")]

0 commit comments

Comments
 (0)