diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb
index 01b1bab..9d915ff 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb
@@ -128,6 +128,10 @@ Public Module ModLaunch
Loaders.Insert(3, New LoaderTask(Of Integer, Integer)("内存优化", AddressOf McLaunchMemoryOptimize) With {.ProgressWeight = 30})
Case 2 '关闭
End Select
+ '显示设置
+ If Setup.Get("LaunchGraphicSetup") Then
+ Loaders.Insert(3, New LoaderTask(Of Integer, Integer)("检查显示设置", AddressOf McLaunchCheckGraphicSettings) With {.ProgressWeight = 2})
+ End If
Dim LaunchLoader As New LoaderCombo(Of Object)("Minecraft 启动", Loaders) With {.Show = False}
If McLoginLoader.State = LoadState.Finished Then McLoginLoader.State = LoadState.Waiting '要求重启登录主加载器,它会自行决定是否启动副加载器
'等待加载器执行并更新 UI
@@ -203,6 +207,48 @@ NextInner:
#End Region
+#Region "显示设置"
+
+ Private Sub McLaunchCheckGraphicSettings(Loader As LoaderTask(Of Integer, Integer))
+ Const GPU_KEY As String = "Software\Microsoft\DirectX\UserGpuPreferences"
+ Const TARGET_SETUP As String = "GpuPreference=2;"
+ Dim javaPath As String = McLaunchJavaSelected.PathJavaw
+
+ McLaunchLog("显示设置开始")
+ '读取现行设置
+ Try
+ Dim parentKey As Microsoft.Win32.RegistryKey = My.Computer.Registry.CurrentUser
+ Dim regKey As Microsoft.Win32.RegistryKey = parentKey.OpenSubKey(GPU_KEY, False)
+ If regKey IsNot Nothing Then
+ Dim currentSetting As Object = regKey.GetValue(javaPath)
+ If currentSetting IsNot Nothing And TARGET_SETUP.Equals(currentSetting.ToString()) Then
+ McLaunchLog("不需要调整显示设置")
+ Exit Sub
+ End If
+ regKey.Close()
+ End If
+ Catch ex As Exception
+ McLaunchLog("无法读取注册表,跳过显示设置")
+ Exit Sub
+ End Try
+ '更新设置
+ Try
+ If Not IsAdmin() Then RunAsAdmin("")
+ Dim parentKey As Microsoft.Win32.RegistryKey = My.Computer.Registry.CurrentUser
+ Dim regKey As Microsoft.Win32.RegistryKey = parentKey.OpenSubKey(GPU_KEY, True)
+ If regKey Is Nothing Then
+ regKey = parentKey.CreateSubKey(GPU_KEY)
+ End If
+ regKey.SetValue(javaPath, TARGET_SETUP)
+ Catch ex As Exception
+ McLaunchLog("无法写入显示设置")
+ Exit Sub
+ End Try
+ McLaunchLog("已修改显示设置")
+ End Sub
+
+#End Region
+
#Region "预检测"
Private Sub McLaunchPrecheck()
diff --git a/Plain Craft Launcher 2/Pages/PageSetup/ModSetup.vb b/Plain Craft Launcher 2/Pages/PageSetup/ModSetup.vb
index b23290e..39a4181 100644
--- a/Plain Craft Launcher 2/Pages/PageSetup/ModSetup.vb
+++ b/Plain Craft Launcher 2/Pages/PageSetup/ModSetup.vb
@@ -103,6 +103,7 @@
{"LaunchAdvanceRunWait", New SetupEntry(True)},
{"LaunchAdvanceAssets", New SetupEntry(False)},
{"LaunchAdvanceJava", New SetupEntry(False)},
+ {"LaunchGraphicSetup", New SetupEntry(False)},
{"LaunchRamType", New SetupEntry(0)},
{"LaunchRamCustom", New SetupEntry(15)},
{"LinkEula", New SetupEntry(False, Source:=SetupSource.Registry)},
diff --git a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml
index 8b692a4..254aa50 100644
--- a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml
+++ b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml
@@ -170,6 +170,13 @@
+
+
+
+
+
+
diff --git a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml.vb b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml.vb
index c36c123..2b52e3a 100644
--- a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml.vb
@@ -45,6 +45,9 @@
CType(FindName("RadioRamType" & Setup.Load("LaunchRamType")), MyRadioBox).Checked = True
SliderRamCustom.Value = Setup.Get("LaunchRamCustom")
+ '显示卡
+ CheckAdvanceGraphicSetup.Checked = Setup.Get("LaunchGraphicSetup")
+
'高级设置
TextAdvanceJvm.Text = Setup.Get("LaunchAdvanceJvm")
TextAdvanceGame.Text = Setup.Get("LaunchAdvanceGame")
@@ -83,6 +86,7 @@
Setup.Reset("LaunchAdvanceAssets")
Setup.Reset("LaunchAdvanceRun")
Setup.Reset("LaunchAdvanceRunWait")
+ Setup.Reset("LaunchGraphicSetup")
Setup.Reset("LaunchArgumentJavaAll")
Setup.Reset("LaunchArgumentJavaSelect")
@@ -110,7 +114,7 @@
Private Shared Sub ComboChange(sender As MyComboBox, e As Object) Handles ComboArgumentIndie.SelectionChanged, ComboArgumentVisibie.SelectionChanged, ComboArgumentWindowType.SelectionChanged, ComboArgumentPriority.SelectionChanged
If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.SelectedIndex)
End Sub
- Private Shared Sub CheckBoxChange(sender As MyCheckBox, e As Object) Handles CheckAdvanceAssets.Change, CheckAdvanceJava.Change, CheckAdvanceRunWait.Change, CheckArgumentRam.Change
+ Private Shared Sub CheckBoxChange(sender As MyCheckBox, e As Object) Handles CheckAdvanceAssets.Change, CheckAdvanceJava.Change, CheckAdvanceRunWait.Change, CheckArgumentRam.Change, CheckAdvanceGraphicSetup.Change
If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Checked)
End Sub