[tools 2/2] testbot/SetWinLocale: Use the Powershell script to get keyboard layouts.
Francois Gouget
fgouget at codeweavers.com
Wed Feb 16 13:15:55 CST 2022
The Powershell API can provide information about locales related to
the ones that have been installed which the registry does not. For
instance after installing fr_FR one can also get the LCID and keyboard
layout for fr_BE, fr_CH, etc.
Add GetWinProperties() to standardize retrieving information from the
SetWinLocale.ps1 script.
Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
---
testbot/bin/SetWinLocale | 40 ++++++++++++++--------------------------
1 file changed, 14 insertions(+), 26 deletions(-)
diff --git a/testbot/bin/SetWinLocale b/testbot/bin/SetWinLocale
index 29b57b30f8..73c774e6e4 100755
--- a/testbot/bin/SetWinLocale
+++ b/testbot/bin/SetWinLocale
@@ -43,7 +43,6 @@ use WineTestBot::Utils;
my $HKCU_INTERNATIONAL = "HKCU\\Control Panel\\International";
my $HKCU_GEO = "HKCU\\Control Panel\\International\\Geo";
-my $HKCU_USER_PROFILE = "HKCU\\Control Panel\\International\\User Profile";
#
@@ -679,10 +678,11 @@ else
FatalError("could not open '$0.ps1' for reading: $!\n");
}
-sub GetWinSettings()
+sub GetWinProperties($)
{
- my $Cmd = ["powershell.exe", "-ExecutionPolicy", "ByPass", "-File",
- "$name0.ps1", "settings"];
+ my ($Cmd) = @_;
+
+ Debug(Elapsed($Start), " Running: @$Cmd\n");
my $Ret = $TA->RunAndWait($Cmd, 0, 30, undef, "$name0.out", "$name0.out");
FatalError("failed to run @$Cmd: ", $TA->GetLastError(), "\n") if ($Ret < 0);
my $Out = $TA->GetFileToString("$name0.out") if (!$Ret);
@@ -705,6 +705,12 @@ sub GetWinSettings()
return $Settings;
}
+sub GetWinSettings()
+{
+ return GetWinProperties(["powershell.exe", "-ExecutionPolicy", "ByPass",
+ "-File", "$name0.ps1", "settings"]);
+}
+
sub Value2Str($)
{
my ($Value) = @_;
@@ -774,28 +780,10 @@ sub GetWinKeyboardIds($)
{
my ($Locale) = @_;
- # The locale information is sometimes stored in a key with a non-standard
- # name, despite the standard locale name being used everywhere else!
- my $Key = $LocaleInfoKeys{$Locale} || $Locale;
- my $Values = RegGetValues("$HKCU_USER_PROFILE\\$Key", "*:*");
- if (!%$Values)
- {
- $Key =~ s/-.*$//;
- $Values = RegGetValues("$HKCU_USER_PROFILE\\$Key", "*:*");
- }
-
- # Look for the locale's keyboard id(s).
- my %WinLayouts;
- foreach my $VName (keys %$Values)
- {
- # The value is the keyboard layout's preference order
- $WinLayouts{hex($Values->{$VName})} = $VName if ($VName =~ /^[0-9A-F]{4}:/);
- }
- $WinKeyboardIds{$Locale} = %WinLayouts ? [] : $Keyboards{$Locale};
- foreach my $Index (sort { $a cmp $b } keys %WinLayouts)
- {
- push @{$WinKeyboardIds{$Locale}}, $WinLayouts{$Index};
- }
+ my $Info = GetWinProperties(["powershell.exe", "-ExecutionPolicy", "ByPass",
+ "-File", "$name0.ps1", "info", $Locale]);
+ $WinKeyboardIds{$Locale} = $Info->{InputMethodTips} ? [$Info->{InputMethodTips}] : $Keyboards{$Locale};
+ Debug("WinKeyboardIds=", Value2Str($WinKeyboardIds{$Locale}), "\n");
if (!$WinKeyboardIds{$Locale})
{
FatalError("could not find the $Locale LCID and keyboard ids. Maybe the locale is not installed?\n");
--
2.30.2
More information about the wine-devel
mailing list