Kann ich die Standardsprache meines Hostsystems (Windows XP) mit einer Java-Anwendung ändern? Wenn ja, wie kann ich das tun?
Antworten
Zu viele Anzeigen?Sie können die Standard-Eingabesprache über die Windows SystemParameterInfo API.
BOOL WINAPI SystemParametersInfo(
__in UINT uiAction,
__in UINT uiParam,
__inout PVOID pvParam,
__in UINT fWinIni
);
Verwendung von JNA ist viel einfacher als die Verwendung von JNI. Um diese API-Funktion in User32.dll mit JNA aufzurufen, erstellen Sie eine Schnittstelle:
public interface User32 extends StdCallLibrary
{
User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class);
bool SystemParametersInfo(int uiAction, int uiParam, int[] pInt, int fWinIni);
}
Sie bestimmen die LCID der Sprache, in die Sie wechseln möchten. ( Hier ist die Liste von MSDN). Englisch ist zum Beispiel 0x409. Und dann verwenden Sie die LCID im Aufruf von SystemParametersInfo
:
int lcid = 0x409;
final int SPI_SETDEFAULTINPUTLANG = 90;
User32.INSTANCE.SystemParamtersInfo(SPI_SETDEFAULTINPUTLANG, 0, new int[] { lcid }, 0);
Und dann wurde Ihre Standard-Eingabesprache geändert!
Es gibt keine eingebauten Wege, die von der Java SE API bereitgestellt werden. Zumindest sehe ich nichts in der Desktop
API. Sie müssen OS-native APIs nutzen. Vergessen Sie Java für diesen Teil, wie genau würden Sie das ohne Java machen? Sobald Sie das herausgefunden haben, rufen Sie die jeweilige API mit JNI in Java.