Skip to content

Commit de303f4

Browse files
authored
Merge pull request #5845 from nanhuajiaren/main
新功能:自动修改显卡设置
2 parents 0b181ba + ad8eb32 commit de303f4

File tree

4 files changed

+59
-1
lines changed

4 files changed

+59
-1
lines changed

Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb

+46
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,10 @@ Public Module ModLaunch
128128
Loaders.Insert(3, New LoaderTask(Of Integer, Integer)("内存优化", AddressOf McLaunchMemoryOptimize) With {.ProgressWeight = 30})
129129
Case 2 '关闭
130130
End Select
131+
'显示设置
132+
If Setup.Get("LaunchGraphicSetup") Then
133+
Loaders.Insert(3, New LoaderTask(Of Integer, Integer)("检查显示设置", AddressOf McLaunchCheckGraphicSettings) With {.ProgressWeight = 2})
134+
End If
131135
Dim LaunchLoader As New LoaderCombo(Of Object)("Minecraft 启动", Loaders) With {.Show = False}
132136
If McLoginLoader.State = LoadState.Finished Then McLoginLoader.State = LoadState.Waiting '要求重启登录主加载器,它会自行决定是否启动副加载器
133137
'等待加载器执行并更新 UI
@@ -203,6 +207,48 @@ NextInner:
203207

204208
#End Region
205209

210+
#Region "显示设置"
211+
212+
Private Sub McLaunchCheckGraphicSettings(Loader As LoaderTask(Of Integer, Integer))
213+
Const GPU_KEY As String = "Software\Microsoft\DirectX\UserGpuPreferences"
214+
Const TARGET_SETUP As String = "GpuPreference=2;"
215+
Dim javaPath As String = McLaunchJavaSelected.PathJavaw
216+
217+
McLaunchLog("显示设置开始")
218+
'读取现行设置
219+
Try
220+
Dim parentKey As Microsoft.Win32.RegistryKey = My.Computer.Registry.CurrentUser
221+
Dim regKey As Microsoft.Win32.RegistryKey = parentKey.OpenSubKey(GPU_KEY, False)
222+
If regKey IsNot Nothing Then
223+
Dim currentSetting As Object = regKey.GetValue(javaPath)
224+
If currentSetting IsNot Nothing And TARGET_SETUP.Equals(currentSetting.ToString()) Then
225+
McLaunchLog("不需要调整显示设置")
226+
Exit Sub
227+
End If
228+
regKey.Close()
229+
End If
230+
Catch ex As Exception
231+
McLaunchLog("无法读取注册表,跳过显示设置")
232+
Exit Sub
233+
End Try
234+
'更新设置
235+
Try
236+
If Not IsAdmin() Then RunAsAdmin("")
237+
Dim parentKey As Microsoft.Win32.RegistryKey = My.Computer.Registry.CurrentUser
238+
Dim regKey As Microsoft.Win32.RegistryKey = parentKey.OpenSubKey(GPU_KEY, True)
239+
If regKey Is Nothing Then
240+
regKey = parentKey.CreateSubKey(GPU_KEY)
241+
End If
242+
regKey.SetValue(javaPath, TARGET_SETUP)
243+
Catch ex As Exception
244+
McLaunchLog("无法写入显示设置")
245+
Exit Sub
246+
End Try
247+
McLaunchLog("已修改显示设置")
248+
End Sub
249+
250+
#End Region
251+
206252
#Region "预检测"
207253

208254
Private Sub McLaunchPrecheck()

Plain Craft Launcher 2/Pages/PageSetup/ModSetup.vb

+1
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@
104104
{"LaunchAdvanceAssets", New SetupEntry(False)},
105105
{"LaunchAdvanceUseLaunchWrapper", New SetupEntry(True)},
106106
{"LaunchAdvanceJava", New SetupEntry(False)},
107+
{"LaunchGraphicSetup", New SetupEntry(False)},
107108
{"LaunchRamType", New SetupEntry(0)},
108109
{"LaunchRamCustom", New SetupEntry(15)},
109110
{"LinkEula", New SetupEntry(False, Source:=SetupSource.Registry)},

Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml

+7
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,13 @@
170170
</Grid>
171171
</StackPanel>
172172
</local:MyCard>
173+
<local:MyCard Margin="0,0,0,15" Title="显示卡" CanSwap="True" IsSwaped="True">
174+
<StackPanel Margin="25,40,25,15">
175+
<local:MyHint Text="此选项对应 Windows 设置中的“系统 > 屏幕 > 显示卡”页面,只在部分设备上有实际效果。" IsWarn="False" Margin="0,0,0,10" />
176+
<local:MyCheckBox Text="启动前调整图形设置" x:Name="CheckAdvanceGraphicSetup" Tag="LaunchGraphicSetup"
177+
ToolTip="启动前将 Java 的显示卡设置调整为“高性能”。若游戏运行时 GPU 占用过低,或在使用 OBS 捕捉时遇到黑屏问题,可尝试此功能。" />
178+
</StackPanel>
179+
</local:MyCard>
173180
<local:MyCard x:Name="CardSkin" Margin="0,0,0,15" Title="离线皮肤" CanSwap="True" IsSwaped="True">
174181
<StackPanel Margin="25,40,25,15">
175182
<local:MyHint Text="由于技术问题,此功能只保证对 1.19.2 以前的版本有效!" IsWarn="True" Margin="0,0,0,10" />

Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml.vb

+5-1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@
4545
CType(FindName("RadioRamType" & Setup.Load("LaunchRamType")), MyRadioBox).Checked = True
4646
SliderRamCustom.Value = Setup.Get("LaunchRamCustom")
4747

48+
'显示卡
49+
CheckAdvanceGraphicSetup.Checked = Setup.Get("LaunchGraphicSetup")
50+
4851
'高级设置
4952
TextAdvanceJvm.Text = Setup.Get("LaunchAdvanceJvm")
5053
TextAdvanceGame.Text = Setup.Get("LaunchAdvanceGame")
@@ -85,6 +88,7 @@
8588
Setup.Reset("LaunchAdvanceAssets")
8689
Setup.Reset("LaunchAdvanceRun")
8790
Setup.Reset("LaunchAdvanceRunWait")
91+
Setup.Reset("LaunchGraphicSetup")
8892

8993
Setup.Reset("LaunchArgumentJavaAll")
9094
Setup.Reset("LaunchArgumentJavaSelect")
@@ -112,7 +116,7 @@
112116
Private Shared Sub ComboChange(sender As MyComboBox, e As Object) Handles ComboArgumentIndie.SelectionChanged, ComboArgumentVisibie.SelectionChanged, ComboArgumentWindowType.SelectionChanged, ComboArgumentPriority.SelectionChanged
113117
If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.SelectedIndex)
114118
End Sub
115-
Private Shared Sub CheckBoxChange(sender As MyCheckBox, e As Object) Handles CheckAdvanceAssets.Change, CheckAdvanceJava.Change, CheckAdvanceRunWait.Change, CheckArgumentRam.Change, CheckAdvanceUseLaunchWrapper.Change
119+
Private Shared Sub CheckBoxChange(sender As MyCheckBox, e As Object) Handles CheckAdvanceAssets.Change, CheckAdvanceJava.Change, CheckAdvanceRunWait.Change, CheckArgumentRam.Change, CheckAdvanceUseLaunchWrapper.Change, CheckAdvanceGraphicSetup.Change
116120
If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Checked)
117121
End Sub
118122

0 commit comments

Comments
 (0)