From a815183d3d052d730769b8c119bac4f170a9db65 Mon Sep 17 00:00:00 2001
From: Ciilu <109708109+Ciilu@users.noreply.github.com>
Date: Wed, 4 Feb 2026 10:38:19 +0800
Subject: [PATCH 1/7] update
---
.../java/org/jackhuang/hmcl/setting/Config.java | 15 +++++++++++++++
.../org/jackhuang/hmcl/ui/main/SettingsPage.java | 8 ++++++++
.../resources/assets/lang/I18N_zh_CN.properties | 1 +
3 files changed, 24 insertions(+)
diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java
index 9d75154153..87b2d70096 100644
--- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java
+++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java
@@ -659,6 +659,21 @@ public void setDisableAutoGameOptions(boolean disableAutoGameOptions) {
this.disableAutoGameOptions.set(disableAutoGameOptions);
}
+ @SerializedName("windowsHighPerformance")
+ private final BooleanProperty windowsHighPerformance = new SimpleBooleanProperty(false);
+
+ public BooleanProperty windowsHighPerformanceProperty() {
+ return windowsHighPerformance;
+ }
+
+ public boolean iswindowsHighPerformance() {
+ return windowsHighPerformance.get();
+ }
+
+ public void setwindowsHighPerformance(boolean windowsHighPerformance) {
+ this.windowsHighPerformance.set(windowsHighPerformance);
+ }
+
// Accounts
@SerializedName("authlibInjectorServers")
diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java
index b01031fd3d..90ce615c3f 100644
--- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java
+++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java
@@ -272,6 +272,14 @@ else if (locale.isSameLanguage(currentLocale))
settingsPane.getContent().add(disableAutoGameOptionsPane);
}
+ {
+ LineToggleButton windowsHighPerformance = new LineToggleButton();
+ windowsHighPerformance.setTitle(i18n("settings.launcher.windows_gpu_preferences"));
+ windowsHighPerformance.selectedProperty().bindBidirectional(config().windowsHighPerformanceProperty());
+
+ settingsPane.getContent().add(windowsHighPerformance);
+ }
+
{
BorderPane debugPane = new BorderPane();
diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties
index d47299447f..38d457084a 100644
--- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties
+++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties
@@ -1198,6 +1198,7 @@ settings.launcher.brightness.light=浅色模式
settings.launcher.common_path.tooltip=启动器将所有游戏资源及依赖库文件存放于此集中管理。如果游戏文件夹内有现成的将不会使用公共库文件。
settings.launcher.debug=调试
settings.launcher.disable_auto_game_options=不自动切换游戏语言
+settings.launcher.windows_gpu_preferences=[Windows] 自动使用高性能 GPU 启动游戏
settings.launcher.download=下载
settings.launcher.download.threads=线程数
settings.launcher.download.threads.auto=自动选择线程数
From 2156f8e330cbcf4604d4e6c8d334d58d3644225a Mon Sep 17 00:00:00 2001
From: Ciilu <109708109+Ciilu@users.noreply.github.com>
Date: Wed, 4 Feb 2026 11:29:53 +0800
Subject: [PATCH 2/7] update
---
.../jackhuang/hmcl/game/LauncherHelper.java | 31 ++++++++++
.../org/jackhuang/hmcl/setting/Config.java | 4 +-
.../resources/assets/lang/I18N.properties | 1 +
.../resources/assets/lang/I18N_zh.properties | 1 +
.../hmcl/util/platform/windows/Advapi32.java | 18 ++++++
.../util/platform/windows/WinConstants.java | 4 ++
.../hmcl/util/platform/windows/WinReg.java | 61 +++++++++++++++++++
7 files changed, 118 insertions(+), 2 deletions(-)
diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java
index 62f435842d..fc5aea23a3 100644
--- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java
+++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java
@@ -47,6 +47,7 @@
import org.jackhuang.hmcl.util.io.FileUtils;
import org.jackhuang.hmcl.util.io.ResponseCodeException;
import org.jackhuang.hmcl.util.platform.*;
+import org.jackhuang.hmcl.util.platform.windows.WinReg;
import org.jackhuang.hmcl.util.versioning.GameVersionNumber;
import org.jackhuang.hmcl.util.versioning.VersionNumber;
@@ -65,6 +66,7 @@
import static javafx.application.Platform.runLater;
import static javafx.application.Platform.setImplicitExit;
+import static org.jackhuang.hmcl.setting.ConfigHolder.config;
import static org.jackhuang.hmcl.ui.FXUtils.runInFX;
import static org.jackhuang.hmcl.util.DataSizeUnit.MEGABYTES;
import static org.jackhuang.hmcl.util.Lang.resolveException;
@@ -84,6 +86,7 @@ public final class LauncherHelper {
private boolean showLogs;
private QuickPlayOption quickPlayOption;
private boolean disableOfflineSkin = false;
+ private boolean gpuRegAlreadyExistsed = false;
public LauncherHelper(Profile profile, Account account, String selectedVersion) {
this.profile = Objects.requireNonNull(profile);
@@ -207,6 +210,24 @@ private void launch0() {
if (quickPlayOption != null) {
launchOptionsBuilder.setQuickPlayOption(quickPlayOption);
}
+ if (config().isWindowsHighPerformance()) {
+ Object current = WinReg.INSTANCE.queryValue(
+ WinReg.HKEY.HKEY_CURRENT_USER,
+ "Software\\Microsoft\\DirectX\\UserGpuPreferences",
+ FileUtils.getAbsolutePath(javaVersionRef.get().getBinary())
+ );
+ if (current instanceof String) {
+ gpuRegAlreadyExistsed = true;
+ } else {
+ WinReg.INSTANCE.setValue(
+ WinReg.HKEY.HKEY_CURRENT_USER,
+ "Software\\Microsoft\\DirectX\\UserGpuPreferences",
+ FileUtils.getAbsolutePath(javaVersionRef.get().getBinary()),
+ "GpuPreference=2;"
+ );
+ }
+ }
+
LaunchOptions launchOptions = launchOptionsBuilder.create();
LOG.info("Here's the structure of game mod directory:\n" + FileUtils.printFileStructure(repository.getModsDirectory(selectedVersion), 10));
@@ -822,6 +843,16 @@ public void run() {
}
private void finishLaunch() {
+ if (!gpuRegAlreadyExistsed && config().isWindowsHighPerformance()) {
+ try {
+ Thread.sleep(5000L);
+ } catch (InterruptedException ignored) {}
+ WinReg.INSTANCE.deleteValue(
+ WinReg.HKEY.HKEY_CURRENT_USER,
+ "Software\\Microsoft\\DirectX\\UserGpuPreferences",
+ process.getProcess().info().command().orElseThrow()
+ );
+ }
switch (launcherVisibility) {
case HIDE_AND_REOPEN:
runLater(() -> {
diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java
index 87b2d70096..86b8f8b762 100644
--- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java
+++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java
@@ -666,11 +666,11 @@ public BooleanProperty windowsHighPerformanceProperty() {
return windowsHighPerformance;
}
- public boolean iswindowsHighPerformance() {
+ public boolean isWindowsHighPerformance() {
return windowsHighPerformance.get();
}
- public void setwindowsHighPerformance(boolean windowsHighPerformance) {
+ public void setWindowsHighPerformance(boolean windowsHighPerformance) {
this.windowsHighPerformance.set(windowsHighPerformance);
}
diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties
index 579fdfe5ea..62029c553b 100644
--- a/HMCL/src/main/resources/assets/lang/I18N.properties
+++ b/HMCL/src/main/resources/assets/lang/I18N.properties
@@ -1413,6 +1413,7 @@ settings.launcher.brightness.light=Light Mode
settings.launcher.common_path.tooltip=HMCL will put all game assets and dependencies here. If there are existing libraries in the game directory, then HMCL will prefer to use them first.
settings.launcher.debug=Debug
settings.launcher.disable_auto_game_options=Do not switch game language
+settings.launcher.windows_gpu_preferences=[Windows] Automatically launch games using the high-performance GPU
settings.launcher.download=Download
settings.launcher.download.threads=Threads
settings.launcher.download.threads.auto=Automatically Determine
diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties
index c1166f1b4d..77dd14e6f5 100644
--- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties
+++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties
@@ -1193,6 +1193,7 @@ settings.launcher.brightness.light=淺色模式
settings.launcher.common_path.tooltip=啟動器將所有遊戲資源及相依元件庫檔案放於此集中管理。如果遊戲目錄內有現成的將不會使用公共庫檔案。
settings.launcher.debug=除錯
settings.launcher.disable_auto_game_options=不自動切換遊戲語言
+settings.launcher.windows_gpu_preferences=[Windows] 自動使用高效能 GPU 啟動遊戲
settings.launcher.download=下載
settings.launcher.download.threads=執行緒數
settings.launcher.download.threads.auto=自動選取執行緒數
diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/windows/Advapi32.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/windows/Advapi32.java
index 274826cd69..fe463e639b 100644
--- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/windows/Advapi32.java
+++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/windows/Advapi32.java
@@ -56,4 +56,22 @@ int RegEnumKeyExW(Pointer hKey, int dwIndex,
IntByReference lpReserved,
Pointer lpClass, IntByReference lpcchClass,
Pointer lpftLastWriteTime);
+
+ /**
+ * @see RegCreateKeyExW function
+ */
+ int RegCreateKeyExW(Pointer hKey, WString lpSubKey, int Reserved, WString lpClass,
+ int dwOptions, int samDesired, Pointer lpSecurityAttributes,
+ PointerByReference phkResult, IntByReference lpdwDisposition);
+
+ /**
+ * @see RegSetValueExW function
+ */
+ int RegSetValueExW(Pointer hKey, WString lpValueName, int Reserved, int dwType,
+ Pointer lpData, int cbData);
+
+ /**
+ * @see RegDeleteValueW function
+ */
+ int RegDeleteValueW(Pointer hKey, WString lpValueName);
}
diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/windows/WinConstants.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/windows/WinConstants.java
index 01888d0308..d080830ed3 100644
--- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/windows/WinConstants.java
+++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/windows/WinConstants.java
@@ -53,6 +53,8 @@ public interface WinConstants {
// https://learn.microsoft.com/windows/win32/sysinfo/registry-key-security-and-access-rights
int KEY_QUERY_VALUE = 0x0001;
int KEY_ENUMERATE_SUB_KEYS = 0x0008;
+ int KEY_WRITE = 0x20006;
+ int KEY_SET_VALUE = 0x0002;
int KEY_READ = 0x20019;
// https://learn.microsoft.com/windows/win32/sysinfo/registry-value-types
@@ -100,4 +102,6 @@ public interface WinConstants {
// https://learn.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute
int DWMWA_USE_IMMERSIVE_DARK_MODE = 20;
+ // https://learn.microsoft.com/windows/win32/api/winreg/nf-winreg-regcreatekeyexw
+ int REG_OPTION_NON_VOLATILE = 0x0000;
}
diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/windows/WinReg.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/windows/WinReg.java
index 0067160500..5c4d56d3c1 100644
--- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/windows/WinReg.java
+++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/windows/WinReg.java
@@ -88,6 +88,10 @@ public List querySubKeys(HKEY root, String key) {
return list;
}
+ public abstract boolean setValue(HKEY root, String key, String valueName, String value);
+
+ public abstract boolean deleteValue(HKEY root, String key, String valueName);
+
private static final class JNAWinReg extends WinReg {
private final Advapi32 advapi32;
@@ -245,6 +249,63 @@ public List querySubKeyNames(HKEY root, String key) {
return Collections.emptyList();
}
+
+ @Override
+ public boolean setValue(HKEY root, String key, String valueName, String value) {
+ PointerByReference phkKey = new PointerByReference();
+ int status = advapi32.RegCreateKeyExW(
+ root.toPointer(),
+ new WString(key),
+ 0,
+ null,
+ WinConstants.REG_OPTION_NON_VOLATILE,
+ WinConstants.KEY_WRITE,
+ null,
+ phkKey,
+ null
+ );
+
+ if (status != WinConstants.ERROR_SUCCESS) {
+ return false;
+ }
+
+ Pointer hkey = phkKey.getValue();
+ try {
+ byte[] data = (value + "\0").getBytes(StandardCharsets.UTF_16LE);
+ try (Memory mem = new Memory(data.length)) {
+ mem.write(0, data, 0, data.length);
+ status = advapi32.RegSetValueExW(
+ hkey,
+ new WString(valueName),
+ 0,
+ WinConstants.REG_SZ,
+ mem,
+ data.length
+ );
+ }
+ return status == WinConstants.ERROR_SUCCESS;
+ } finally {
+ advapi32.RegCloseKey(hkey);
+ }
+ }
+
+ @Override
+ public boolean deleteValue(HKEY root, String key, String valueName) {
+ PointerByReference phkKey = new PointerByReference();
+ int status = advapi32.RegOpenKeyExW(root.toPointer(), new WString(key), 0, WinConstants.KEY_SET_VALUE, phkKey);
+
+ if (status != WinConstants.ERROR_SUCCESS) {
+ return false;
+ }
+
+ Pointer hkey = phkKey.getValue();
+ try {
+ status = advapi32.RegDeleteValueW(hkey, new WString(valueName));
+ return status == WinConstants.ERROR_SUCCESS;
+ } finally {
+ advapi32.RegCloseKey(hkey);
+ }
+ }
}
}
From 4cc086c95f78bdb1e78565f8c9a6599afd033967 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=BE=9E=E5=BA=90?=
<109708109+Ciilu@users.noreply.github.com>
Date: Fri, 20 Feb 2026 22:17:41 +0800
Subject: [PATCH 3/7] update
---
.../jackhuang/hmcl/game/LauncherHelper.java | 55 +++++++++++--------
1 file changed, 33 insertions(+), 22 deletions(-)
diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java
index fc5aea23a3..77c77e7204 100644
--- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java
+++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java
@@ -86,7 +86,7 @@ public final class LauncherHelper {
private boolean showLogs;
private QuickPlayOption quickPlayOption;
private boolean disableOfflineSkin = false;
- private boolean gpuRegAlreadyExistsed = false;
+ private boolean modifyedGpuReg = false;
public LauncherHelper(Profile profile, Account account, String selectedVersion) {
this.profile = Objects.requireNonNull(profile);
@@ -211,20 +211,26 @@ private void launch0() {
launchOptionsBuilder.setQuickPlayOption(quickPlayOption);
}
if (config().isWindowsHighPerformance()) {
- Object current = WinReg.INSTANCE.queryValue(
- WinReg.HKEY.HKEY_CURRENT_USER,
- "Software\\Microsoft\\DirectX\\UserGpuPreferences",
- FileUtils.getAbsolutePath(javaVersionRef.get().getBinary())
- );
- if (current instanceof String) {
- gpuRegAlreadyExistsed = true;
- } else {
- WinReg.INSTANCE.setValue(
- WinReg.HKEY.HKEY_CURRENT_USER,
- "Software\\Microsoft\\DirectX\\UserGpuPreferences",
- FileUtils.getAbsolutePath(javaVersionRef.get().getBinary()),
- "GpuPreference=2;"
- );
+ try {
+ WinReg reg = WinReg.INSTANCE;
+ if (reg != null) {
+ Object current = reg.queryValue(
+ WinReg.HKEY.HKEY_CURRENT_USER,
+ "Software\\Microsoft\\DirectX\\UserGpuPreferences",
+ FileUtils.getAbsolutePath(javaVersionRef.get().getBinary())
+ );
+ if (!(current instanceof String)) {
+ reg.setValue(
+ WinReg.HKEY.HKEY_CURRENT_USER,
+ "Software\\Microsoft\\DirectX\\UserGpuPreferences",
+ FileUtils.getAbsolutePath(javaVersionRef.get().getBinary()),
+ "GpuPreference=2;"
+ );
+ modifyedGpuReg = true;
+ }
+ }
+ } catch (Exception e) {
+ LOG.warning("Failed to apply high performance GPU preference", e);
}
}
@@ -843,15 +849,20 @@ public void run() {
}
private void finishLaunch() {
- if (!gpuRegAlreadyExistsed && config().isWindowsHighPerformance()) {
+ if (modifyedGpuReg) {
try {
Thread.sleep(5000L);
- } catch (InterruptedException ignored) {}
- WinReg.INSTANCE.deleteValue(
- WinReg.HKEY.HKEY_CURRENT_USER,
- "Software\\Microsoft\\DirectX\\UserGpuPreferences",
- process.getProcess().info().command().orElseThrow()
- );
+ } catch (InterruptedException ignored) {
+ }
+ try {
+ WinReg.INSTANCE.deleteValue(
+ WinReg.HKEY.HKEY_CURRENT_USER,
+ "Software\\Microsoft\\DirectX\\UserGpuPreferences",
+ process.getProcess().info().command().orElseThrow()
+ );
+ } catch (Exception e) {
+ LOG.warning("Failed to revert high performance GPU preference", e);
+ }
}
switch (launcherVisibility) {
case HIDE_AND_REOPEN:
From e2528923b37bfcc88600244a5655181cec6b334a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=BE=9E=E5=BA=90?=
<109708109+Ciilu@users.noreply.github.com>
Date: Fri, 20 Feb 2026 23:17:13 +0800
Subject: [PATCH 4/7] update
---
.../main/java/org/jackhuang/hmcl/game/LauncherHelper.java | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java
index 77c77e7204..faeb5e19b0 100644
--- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java
+++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java
@@ -86,7 +86,7 @@ public final class LauncherHelper {
private boolean showLogs;
private QuickPlayOption quickPlayOption;
private boolean disableOfflineSkin = false;
- private boolean modifyedGpuReg = false;
+ private boolean modifiedGpuReg = false;
public LauncherHelper(Profile profile, Account account, String selectedVersion) {
this.profile = Objects.requireNonNull(profile);
@@ -226,7 +226,7 @@ private void launch0() {
FileUtils.getAbsolutePath(javaVersionRef.get().getBinary()),
"GpuPreference=2;"
);
- modifyedGpuReg = true;
+ modifiedGpuReg = true;
}
}
} catch (Exception e) {
@@ -849,7 +849,7 @@ public void run() {
}
private void finishLaunch() {
- if (modifyedGpuReg) {
+ if (modifiedGpuReg) {
try {
Thread.sleep(5000L);
} catch (InterruptedException ignored) {
From 6656050cfd93818f2e86a4c3f56b481954515f97 Mon Sep 17 00:00:00 2001
From: Glavo
Date: Fri, 27 Mar 2026 21:10:16 +0800
Subject: [PATCH 5/7] Unify GPU preference setting key across languages.
---
HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java | 2 +-
HMCL/src/main/resources/assets/lang/I18N.properties | 2 +-
HMCL/src/main/resources/assets/lang/I18N_zh.properties | 2 +-
HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java
index 77853d8cdc..a3d06d04d9 100644
--- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java
+++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java
@@ -291,7 +291,7 @@ else if (locale.isSameLanguage(currentLocale))
{
LineToggleButton windowsHighPerformance = new LineToggleButton();
- windowsHighPerformance.setTitle(i18n("settings.launcher.windows_gpu_preferences"));
+ windowsHighPerformance.setTitle(i18n("settings.launcher.gpu_preferences"));
windowsHighPerformance.selectedProperty().bindBidirectional(config().windowsHighPerformanceProperty());
settingsPane.getContent().add(windowsHighPerformance);
diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties
index 186ab1e923..3fa2fcac2f 100644
--- a/HMCL/src/main/resources/assets/lang/I18N.properties
+++ b/HMCL/src/main/resources/assets/lang/I18N.properties
@@ -1426,7 +1426,6 @@ settings.launcher.common_path.tooltip=HMCL will put all game assets and dependen
settings.launcher.debug=Debug
settings.launcher.disable_april_fools=Do not enable April Fools features
settings.launcher.disable_auto_game_options=Do not switch game language
-settings.launcher.windows_gpu_preferences=[Windows] Automatically launch games using the high-performance GPU
settings.launcher.download=Download
settings.launcher.download.threads=Threads
settings.launcher.download.threads.auto=Automatically Determine
@@ -1440,6 +1439,7 @@ settings.launcher.font.anti_aliasing.auto=Auto
settings.launcher.font.anti_aliasing.gray=Grayscale
settings.launcher.font.anti_aliasing.lcd=Sub-pixel
settings.launcher.general=General
+settings.launcher.gpu_preferences=Automatically launch games using the high-performance GPU
settings.launcher.language=Language
settings.launcher.launcher_log.export=Export Launcher Logs
settings.launcher.launcher_log.export.failed=Failed to export logs.
diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties
index 5c2ad10b00..54b9ca2d4d 100644
--- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties
+++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties
@@ -1211,7 +1211,6 @@ settings.launcher.common_path.tooltip=啟動器將所有遊戲資源及相依元
settings.launcher.debug=除錯
settings.launcher.disable_april_fools=不啟用愚人節功能
settings.launcher.disable_auto_game_options=不自動切換遊戲語言
-settings.launcher.windows_gpu_preferences=[Windows] 自動使用高效能 GPU 啟動遊戲
settings.launcher.download=下載
settings.launcher.download.threads=執行緒數
settings.launcher.download.threads.auto=自動選取執行緒數
@@ -1225,6 +1224,7 @@ settings.launcher.font.anti_aliasing.auto=自動
settings.launcher.font.anti_aliasing.gray=灰階
settings.launcher.font.anti_aliasing.lcd=子像素
settings.launcher.general=一般
+settings.launcher.gpu_preferences=自動使用高效能 GPU 啟動遊戲
settings.launcher.language=語言
settings.launcher.launcher_log.export=匯出啟動器日誌
settings.launcher.launcher_log.export.failed=無法匯出日誌。
diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties
index 3ea46f9f1c..6e58f1d6ef 100644
--- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties
+++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties
@@ -1216,7 +1216,6 @@ settings.launcher.common_path.tooltip=启动器将所有游戏资源及依赖库
settings.launcher.debug=调试
settings.launcher.disable_april_fools=不启用愚人节功能
settings.launcher.disable_auto_game_options=不自动切换游戏语言
-settings.launcher.windows_gpu_preferences=[Windows] 自动使用高性能 GPU 启动游戏
settings.launcher.download=下载
settings.launcher.download.threads=线程数
settings.launcher.download.threads.auto=自动选择线程数
@@ -1230,6 +1229,7 @@ settings.launcher.font.anti_aliasing.auto=自动
settings.launcher.font.anti_aliasing.gray=灰度
settings.launcher.font.anti_aliasing.lcd=子像素
settings.launcher.general=通用
+settings.launcher.gpu_preferences=自动使用高性能 GPU 启动游戏
settings.launcher.language=语言
settings.launcher.launcher_log.export=导出启动器日志
settings.launcher.launcher_log.export.failed=无法导出日志
From 590149fcc8c633da951d2408ddcd6dc8fbc6f47f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=BE=9E=E5=BA=90?=
<109708109+CiiLu@users.noreply.github.com>
Date: Sat, 4 Apr 2026 12:33:30 +0800
Subject: [PATCH 6/7] Apply suggestions from code review
Co-authored-by: 3gf8jv4dv <3gf8jv4dv@gmail.com>
---
HMCL/src/main/resources/assets/lang/I18N.properties | 2 +-
HMCL/src/main/resources/assets/lang/I18N_zh.properties | 2 +-
HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties
index 3fa2fcac2f..ad44109f90 100644
--- a/HMCL/src/main/resources/assets/lang/I18N.properties
+++ b/HMCL/src/main/resources/assets/lang/I18N.properties
@@ -1439,7 +1439,7 @@ settings.launcher.font.anti_aliasing.auto=Auto
settings.launcher.font.anti_aliasing.gray=Grayscale
settings.launcher.font.anti_aliasing.lcd=Sub-pixel
settings.launcher.general=General
-settings.launcher.gpu_preferences=Automatically launch games using the high-performance GPU
+settings.launcher.gpu_preferences=Launch games with high-performance GPU
settings.launcher.language=Language
settings.launcher.launcher_log.export=Export Launcher Logs
settings.launcher.launcher_log.export.failed=Failed to export logs.
diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties
index 54b9ca2d4d..d6eb8b62f2 100644
--- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties
+++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties
@@ -1224,7 +1224,7 @@ settings.launcher.font.anti_aliasing.auto=自動
settings.launcher.font.anti_aliasing.gray=灰階
settings.launcher.font.anti_aliasing.lcd=子像素
settings.launcher.general=一般
-settings.launcher.gpu_preferences=自動使用高效能 GPU 啟動遊戲
+settings.launcher.gpu_preferences=使用高效能 GPU 啟動遊戲
settings.launcher.language=語言
settings.launcher.launcher_log.export=匯出啟動器日誌
settings.launcher.launcher_log.export.failed=無法匯出日誌。
diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties
index 6e58f1d6ef..a352568332 100644
--- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties
+++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties
@@ -1229,7 +1229,7 @@ settings.launcher.font.anti_aliasing.auto=自动
settings.launcher.font.anti_aliasing.gray=灰度
settings.launcher.font.anti_aliasing.lcd=子像素
settings.launcher.general=通用
-settings.launcher.gpu_preferences=自动使用高性能 GPU 启动游戏
+settings.launcher.gpu_preferences=使用高性能 GPU 启动游戏
settings.launcher.language=语言
settings.launcher.launcher_log.export=导出启动器日志
settings.launcher.launcher_log.export.failed=无法导出日志
From 7029921067f80c5ef41dc84a874c6016487c3537 Mon Sep 17 00:00:00 2001
From: CiiLu <109708109+CiiLu@users.noreply.github.com>
Date: Sat, 25 Apr 2026 22:04:23 +0800
Subject: [PATCH 7/7] update
---
HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java | 3 ++-
.../src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java | 1 +
HMCL/src/main/resources/assets/lang/I18N.properties | 1 +
HMCL/src/main/resources/assets/lang/I18N_zh.properties | 1 +
HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties | 1 +
5 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java
index 574e053d2e..cc713ef9e5 100644
--- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java
+++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Config.java
@@ -717,7 +717,8 @@ public boolean isWindowsHighPerformance() {
public void setWindowsHighPerformance(boolean windowsHighPerformance) {
this.windowsHighPerformance.set(windowsHighPerformance);
-
+ }
+
@SerializedName("allowAutoAgent")
private final BooleanProperty allowAutoAgent = new SimpleBooleanProperty(false);
diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java
index 6687ed2585..a849e9fa12 100644
--- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java
+++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/SettingsPage.java
@@ -263,6 +263,7 @@ else if (locale.isSameLanguage(currentLocale))
{
LineToggleButton windowsHighPerformance = new LineToggleButton();
windowsHighPerformance.setTitle(i18n("settings.launcher.gpu_preferences"));
+ windowsHighPerformance.setSubtitle(i18n("settings.advanced.windows_only"));
windowsHighPerformance.selectedProperty().bindBidirectional(config().windowsHighPerformanceProperty());
settingsPane.getContent().add(windowsHighPerformance);
diff --git a/HMCL/src/main/resources/assets/lang/I18N.properties b/HMCL/src/main/resources/assets/lang/I18N.properties
index 280210ddda..56b91fa60d 100644
--- a/HMCL/src/main/resources/assets/lang/I18N.properties
+++ b/HMCL/src/main/resources/assets/lang/I18N.properties
@@ -1429,6 +1429,7 @@ settings.advanced.unsupported_system_options=Settings not applicable to the curr
settings.advanced.use_native_glfw=Use System GLFW
settings.advanced.use_native_openal=Use System OpenAL
settings.advanced.linux_freebsd_only=Linux/FreeBSD Only
+settings.advanced.windows_only=Windows Only
settings.advanced.workaround=Workaround
settings.advanced.workaround.warning=Workaround options are intended only for advanced users. Tweaking with these options may crash the game. Unless you know what you are doing, please do not edit these options.
settings.advanced.wrapper_launcher=Wrapper Command
diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh.properties b/HMCL/src/main/resources/assets/lang/I18N_zh.properties
index d18f7ce5bb..73036ac3e8 100644
--- a/HMCL/src/main/resources/assets/lang/I18N_zh.properties
+++ b/HMCL/src/main/resources/assets/lang/I18N_zh.properties
@@ -1220,6 +1220,7 @@ settings.advanced.unsupported_system_options=不適用於目前系統的選項
settings.advanced.use_native_glfw=使用系統 GLFW
settings.advanced.use_native_openal=使用系統 OpenAL
settings.advanced.linux_freebsd_only=僅限 Linux/FreeBSD
+settings.advanced.windows_only=僅限 Windows
settings.advanced.workaround=除錯選項
settings.advanced.workaround.warning=除錯選項僅提供給專業玩家使用。修改除錯選項可能會導致遊戲無法啟動。除非你知道你在做什麼,否則請不要修改這些選項。
settings.advanced.wrapper_launcher=前置指令
diff --git a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties
index 38c4f4a0d9..1fcf5a079c 100644
--- a/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties
+++ b/HMCL/src/main/resources/assets/lang/I18N_zh_CN.properties
@@ -1225,6 +1225,7 @@ settings.advanced.unsupported_system_options=不适用于当前系统的选项
settings.advanced.use_native_glfw=使用系统 GLFW
settings.advanced.use_native_openal=使用系统 OpenAL
settings.advanced.linux_freebsd_only=仅 Linux/FreeBSD
+settings.advanced.windows_only=仅 Windows
settings.advanced.workaround=调试选项
settings.advanced.workaround.warning=调试选项仅提供给专业玩家使用。调试选项可能会导致游戏无法启动。除非你知道你在做什么,否则请不要修改这些选项!
settings.advanced.wrapper_launcher=包装命令