diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb index 2390cf0..e5ce04b 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 fa7f48d..f758a5e 100644 --- a/Plain Craft Launcher 2/Pages/PageSetup/ModSetup.vb +++ b/Plain Craft Launcher 2/Pages/PageSetup/ModSetup.vb @@ -104,6 +104,7 @@ {"LaunchAdvanceAssets", New SetupEntry(False)}, {"LaunchAdvanceUseLaunchWrapper", New SetupEntry(True)}, {"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 7e8101e..cc5d728 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 98dead5..70ad448 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") @@ -85,6 +88,7 @@ Setup.Reset("LaunchAdvanceAssets") Setup.Reset("LaunchAdvanceRun") Setup.Reset("LaunchAdvanceRunWait") + Setup.Reset("LaunchGraphicSetup") Setup.Reset("LaunchArgumentJavaAll") Setup.Reset("LaunchArgumentJavaSelect") @@ -112,7 +116,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, CheckAdvanceUseLaunchWrapper.Change + Private Shared Sub CheckBoxChange(sender As MyCheckBox, e As Object) Handles CheckAdvanceAssets.Change, CheckAdvanceJava.Change, CheckAdvanceRunWait.Change, CheckArgumentRam.Change, CheckAdvanceUseLaunchWrapper.Change, CheckAdvanceGraphicSetup.Change If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Checked) End Sub