nohouse303
Goto Top

Regions- und Sprachoptionen per Skript ändern

Hallo Onliners,

mein heutiges Problem.
Ich habe eine Software die nach Installation von SP2 (WinXP) Punkt und Komma nicht mehr richtig unterscheidet
Lösung: Ich gehe auf die Regions- und Sprachoptionen und wähle sagen wir Englisch. Dann drücke ich Übernehmen. Danach wähle ich wieder Deutsch (Übernehmen) und starte mein Porgramm. Alles läuft.
Das muss jeder User machen, der mit dieser Software arbeiten will.

Frage: Gibt es eine Möglichkeit per Autostart (Batch, Skript) diesen Vorgang zu automatisieren?

Schon mal im voraus Danke für eure Unterstützung.

Gruss Nohouse

Content-Key: 19477

Url: https://administrator.de/contentid/19477

Printed on: April 18, 2024 at 06:04 o'clock

Member: Biber
Biber Nov 10, 2005, updated at Mar 30, 2023 at 01:06:41 (UTC)
Goto Top
Moin Nohouse303,
kein Problem...bis auf die Vorarbeit..die wird wohl an Dir hängenbleiben..

Im meinem Workshop Batch for Runaways - Part III - Datums- und Zeitvariablen im Batch habe ich mal ein bisschen gegraben, wo denn die "Regional Settings" so stehen in M$s Innereien.
Für Deinen Fall gäbe es also zwei eben-mal-schnell realisierbare Möglichkeiten:

1) per Hand mal eine RegionalSettings.reg-Datei, mit der dein Programm läuft, aus der Registry zu exportieren.
Beim Kunden dann vor Programmstart dessen alte Reg-Werte in diesem Zweig sichern, Deine Reg einlesen, nach Programmende den alten Zustand wiederherstellen.
2) oder mal im Detail nachzuforschen. welche zwei oder drei RegKeys denn verantwortlich sind für Dein Komma/Punkt-Problem. Und nur diese RegKeys zu ersetzen/zu ergänzen.

Aber die Recherche musst Du wohl erst machen.. Bätche brauchen immer irgendwelche festen Punkte im Raum, bevor sie loslaufen können.
Beim Handwerklichen kann ich dann bei Bedarf gerne Hilfestellung geben.

Grüße
Biber
Member: Nohouse303
Nohouse303 Nov 11, 2005 at 13:00:23 (UTC)
Goto Top
Hallo, erstmal Danke für deine schnelle Antwort.

Habe die Reginhalte verglichen und muss wohl folgende Inhalte ergänzen.

Nachfolgender Pfad existiert beireits. Aber ohne Eintrag

[HKEY_USERS\S-1-5-21-8915387-466359577-720635935-18223\Control Panel\International]
"Locale"="00000407"  
"sLanguage"="DEU"  
"sCountry"="Deutschland"  
"iCountry"="49"  
"s1159"=""  
"s2359"=""  
"sTimeFormat"="HH:mm:ss"  
"sTime"=":"  
"iTime"="1"  
"iTLZero"="1"  
"iTimePrefix"="0"  
"sShortDate"="dd.MM.yyyy"  
"sDate"="."  
"iDate"="1"  
"sLongDate"="dddd, d. MMMM yyyy"  
"sCurrency"="?"  
"iCurrency"="3"  
"iNegCurr"="8"  
"iCurrDigits"="2"  
"sDecimal"=","  
"sMonDecimalSep"=","  
"sThousand"="."  
"sMonThousandSep"="."  
"sList"=";"  
"iDigits"="2"  
"iLZero"="1"  
"iNegNumber"="1"  
"sNativeDigits"="0123456789"  
"NumShape"="1"  
"iMeasure"="0"  
"iCalendarType"="1"  
"iFirstDayOfWeek"="0"  
"iFirstWeekOfYear"="2"  
"sGrouping"="3;0"  
"sMonGrouping"="3;0"  
"sPositiveSign"=""  
"sNegativeSign"="-"  
Dieser Pfad mit Eintrag ist neu hinzugekommen.
[HKEY_USERS\S-1-5-21-8915387-466359577-720635935-18223\Control Panel\International\Geo]
"Nation"="94"  

Wie kann ich jetzt ohne Abfrage den Vorgang automatisieren?

Danke schon mal im voraus.

Gruss Nohouse
Member: Biber
Biber Nov 11, 2005 at 14:34:05 (UTC)
Goto Top
Moin Nohouse,
mach es analog zu dem Beispiel in dem o.a. Tut mit reg.exe oder mit RegEdit.exe

und das Ganze in einem kleinen Programmaufruf-Batch:
---StartNohouseProggi.bat
@echo off &setlocal
Set "tempreg=%temp%\My.reg"  
Echo Windows Registry Editor Version 5.00 >%tempreg%
Echo. >>%tempreg%
Echo [HKEY_CURRENT_USER\Control Panel\International\Geo] >>%tempreg%
Echo "Nation"="94">>%tempreg%  
regedit /s %tempreg%
start /w x:\yz\NohouseProggi.exe
---StartNohouseProggi.bat

..aber auf jeden Fall unter HKCU ersetzen, nicht unter dieser SID-ID.. die passt ja nur auf einem Rechner.
HTH Biber
Member: Nohouse303
Nohouse303 Nov 12, 2005 at 15:45:07 (UTC)
Goto Top
Hallo, erstmal vielen Dank für das schnelle posten.
Bin allerdings noch frisch was die Batchprogrammierung angeht.
Was Bedeutet die Zeile:

Set "tempreg=%temp%\My.reg"   

Wird eine neue Datei mit dem Namen My.reg erstellt?

Fehlt in der folgendenzeile nicht ein ">" for ...Version 5.00 >%tempreg%

Echo Windows Registry Editor Version 5.00 >%tempreg%

Meine Batch sieht jetzt folgendermaßen aus.
Die SIS lese ich mir aus.

@echo on &setlocal 
Set "tempreg=%temp%\My.reg"   

for /r "C:\Dokumente und Einstellungen\%USERNAME%\Lokale Einstellungen\Anwendungsdaten\Microsoft\Credentials" %%a in (.) do set Letztes=%%a  

for /F "delims=\ tokens=8" %%i in ("%Letztes%") do Set Dirname=%%i   

Echo Windows Registry Editor Version 5.00 >%tempreg% 
Echo. >>%tempreg% 
Echo [HKEY_USERS\%Dirname%\Control Panel\International\Geo] >>%tempreg% 
Echo "Nation"="94">>%tempreg%   

Echo [HKEY_USERS\%Dirname%\Control Panel\International]>>%tempreg%
Echo "Locale"="00000407" >>%tempreg%  
Echo "sLanguage"="DEU" >>%tempreg%  
Echo "sCountry"="Deutschland" >>%tempreg%  
Echo "iCountry"="49" >>%tempreg%  

regedit /s %tempreg% 

Kann das funktionieren?

Gruss und Danke

Nohouse
Member: Biber
Biber Nov 12, 2005, updated at Mar 30, 2023 at 01:09:06 (UTC)
Goto Top
Moin, Nohouse,
Hallo, erstmal vielen Dank für das schnelle posten.
Dafür nich'....

Was Bedeutet die Zeile:
Set "tempreg=%temp%\My.reg"
Hier setze ich nur eine Variable namens "tempreg" für die temporäre Datei, die ich mit "Echo" schreibe.
Und die soll im Verzeichnis %temp% angelegt werden, da hat jeder Zugriff.
Dass diese "Set"-Anweisung in Anführungszeichen funktioniert, sagt M$ nicht, aber ich. Dokumentiert ist es nicht.

Wird eine neue Datei mit dem Namen My.reg erstellt?
Jepp, aber erst später..
Fehlt in der folgendenzeile nicht ein ">" vor ...Version 5.00 >%tempreg%
Nein.. in der ersten ECHO-Zeile wird die Datei neu angelegt, ggf. eine vorhandene überschreiben. In den folgenden Zeilen wird angehängt.

Meine Batch sieht jetzt folgendermaßen aus.
Die SIS lese ich mir aus.
Halte ich für überflüssig und gefährlich. Wozu?? Der aktuelle Benutzer heißt immer HKEY_CURRENT_USER *kopfschüttelt

**
@echo on &setlocal
Set "tempreg=%temp%\My.reg"

for /r "C:\Dokumente und Einstellungen\%USERNAME%\Lokale Einstellungen\Anwendungsdaten\Microsoft\Credentials"
Hmmm, ist nicht portabel. Bei mir (mit Installation auf Laufwerk Dface-smile würdest Du ins Leere laufen..
Nimm besser statt

"C:\Dokumente und Einstellungen\%USERNAME%\Lokale Einstellungen\Anwendungsdaten\Microsoft\Credentials"...  
...folgendes: "%APPDATA%\Microsoft\Credentials".  

Macht es außerdem lesbarer.
Wenn bei Deinen Kunden da was drin steht... ich würde erst prüfen, ob das Verzeichnis ..\Credentials" existiert und nicht HIDDEN/SYSTEM ist.

Denn sonst greift der FOR /R..IN DO-Befehl .. möglicherweise daneben.

%%a in (.) do set Letztes=%%a
...ich würde ....%%a in (.) do set "Letztes=%%a" ......schreiben

for /F "delims=\ tokens=8" %%i in ("%Letztes%") do Set Dirname=%%i
...ich würde ...set "Set Dirname=%%i" ......schreiben.

jo, mag sein... glaub ich Dir mal einfach, dass bei %Letztes% das Richtige drin steht.

Echo Windows Registry Editor Version 5.00 >%tempreg%
Echo. >>%tempreg%
Echo [HKEY_USERS\%Dirname%\Control Panel\International\Geo] >>%tempreg%
WARUM AUF HKEY_USERS???? Darfst Du das überall????
Gehst Du immer mit ADMIN-Rechten rein?... Mach ich nicht mal bei Freunden...
...
...
regedit /s %tempreg%

Kann das funktionieren?

Ja, kann... funk-ti-o-nie-ren *seufz
.. dubios sind mir diese SID/HKEY_USERS-Zugriffe... dazu brauchst Du die Rechte. Ich würde immer über HKEY_CURRENT_USER gehen.
Und dieses "C:\Dokumente......" hatte ich ja angesprochen. Klappt halt in 70% der Fälle. Bei 30% wirst Du angerufen.."jammer..geht nicht.."

Gruss zurück

Biber
Member: Nohouse303
Nohouse303 Nov 13, 2005 at 08:34:29 (UTC)
Goto Top
Top!

Danke Dir für deine Hilfe.

Werde ich Montag gleich mal ausprobieren.

Gruss der Nohouse303
Member: Biber
Biber Feb 11, 2006 at 12:27:10 (UTC)
Goto Top
@fadi
Das gefällt mir aber grundsätzlich gut. Probier ich aus.
In der Praxis würde ich wahrscheinlich eine Kombination aus beiden Ansätzen vorziehen - die bestehenden Regional Settings vorher sichern und ggf. später restaurieren.
Aber die Übersichtlichkeit Deiner Variante hat was Charmantes. Danke.

Gruß
Biber
Member: cyrus1683
cyrus1683 Jul 16, 2007 at 08:56:52 (UTC)
Goto Top
Hallo,

ich bin grad dabei ein Script zu schreiben mit dem ich unter XP 64 bit die Sprache wechseln kann. Bei XP 64 gibt es ja Language Packs, wo man dann in der Systemst. von einer Sprache zu anderen wechseln kann.
Da wir mehrere Niederlassungen auch im Ausland haben, will ich dazu ne Batch schreiben und hab dafür die Einträge unter
[HKEY_USERS\S-1-5-21-8915387-466359577-720635935-18223\Control Panel\International]
und
[HKEY_USERS\S-1-5-21-8915387-466359577-720635935-18223\Control Panel\International\Geo]

dementsprechend geändert. Das macht er auch ohne Prob nur leider ist trotzdem noch alles englisch....zumindest die Anmeldung ist schon auf deutsch aber das Startmenü usw. noch nicht.
Meine Frage: Gibt es noch andere Stellen in der Registry die man ändern muss?

Wäre echt dankbar für nen Hinweis!
Mitglied: 50496
50496 Jul 16, 2007 at 09:03:47 (UTC)
Goto Top
Die SID für den User ist variabel und überall anders. Erstens hast du die nicht überall zur Verfügung und zweitens kommst du immer nur an den angemeldeten User (HKEY_CURRENT_USER) ran. Das hat Biber weiter vor schon beschrieben.

Außerdem muss das MUI installiert sein. Wo dort die Umschaltung erfolgt, weiß ich aber nicht. Die Texte stehen jedenfalls in den entsprechenden Ressourcen der jeweiligen DLLs.
Member: cyrus1683
cyrus1683 Jul 16, 2007 at 09:16:27 (UTC)
Goto Top
kann ich irgendwie durch einen Befehl herausfinden welche SID der aktuelle User hat?
dann bräuchte ich die ja nur abfragen!
Mitglied: 50496
50496 Jul 16, 2007 at 09:25:26 (UTC)
Goto Top
Wozu willst du die abfragen? Der Schlüssel für den aktuellen User wird bei der Anmeldung nach HKEY_CURRENT_USER kopiert, da musst du ändern.
Member: cyrus1683
cyrus1683 Jul 16, 2007 at 11:42:32 (UTC)
Goto Top
ja schreibfehler, klar muss ich da was ändern ;)

hab mal mit RegMond aufgezeichnet was in der Registry alles geändert wird.
momentan sieht mein Code so aus:

reg add HKCU\Software\Microsoft\Windows\ShellNoRoam\MUICache\ /v LangID /f /t REG_BINARY /d "09 04"  
reg add HKCU\Software\Microsoft\Windows\ShellNoRoam\MUICache\ /v "@C:\WINNT\ime (x86)\sptip.dll,-600" /f /t REG_BINARY /d "Speech Recognition"  
reg add "HKCU\Control Panel\Desktop\" /v MUILanguagePending /f /t REG_SZ /d 00000407  
reg add "HKCU\Keyboard Layout\Toggle\" /v "Language Hotkey" /f /t REG_SZ /d 1  
reg add "HKCU\Keyboard Layout\Toggle\" /v "Layout Hotkey" /f /t REG_SZ /d 2  
reg add HKCU\Software\Microsoft\CTF\LangBar\ /v ShowStatus /f /t REG_DWORD /d 0x4
reg add HKCU\Software\Microsoft\CTF\LangBar\ /v Transparency /f /t REG_DWORD /d 0xFF
reg add HKCU\Software\Microsoft\CTF\LangBar\ /v Label /f /t REG_DWORD /d 0x1
reg add HKCU\Software\Microsoft\CTF\LangBar\ /v ExtraIconsOnMinimized /f /t REG_DWORD /d 0x0
reg add "HKCU\Software\Microsoft\windows\CurrentVersion\Run\" /v "ctfmon.exe" /f /t REG_SZ /d "C:\WINNT\system32\CTFMON.EXE"  
reg add "HKCU\Control Panel\International" /v iCountry /f /t REG_SZ /d 49  
reg add "HKCU\Control Panel\International" /v iCurrency /f /t REG_SZ /d 3  
reg add "HKCU\Control Panel\International" /v iLZero /f /t REG_SZ /d 1  
reg add "HKCU\Control Panel\International" /v iNegCurr /f /t REG_SZ /d 8  
reg add "HKCU\Control Panel\International" /v Locale /f /t REG_SZ /d 00000407  
reg add "HKCU\Control Panel\International" /v s1159 /f /t REG_SZ /d   
reg add "HKCU\Control Panel\International" /v s2359 /f /t REG_SZ /d   
reg add "HKCU\Control Panel\International" /v sCountry /f /t REG_SZ /d Germany  
reg add "HKCU\Control Panel\International" /v sCurrency /f /t REG_SZ /d €  
reg add "HKCU\Control Panel\International" /v sDate /f /t REG_SZ /d .  
reg add "HKCU\Control Panel\International" /v sLanguage /f /t REG_SZ /d DEU  
reg add "HKCU\Control Panel\International" /v sList /f /t REG_SZ /d ;  
reg add "HKCU\Control Panel\International" /v sLongDate /f /t REG_SZ /d dddd. d. MMMM yyyy  
reg add "HKCU\Control Panel\International" /v sMonDecimalSep /f /t REG_SZ /d ,  
reg add "HKCU\Control Panel\International" /v sMonThousandSep /f /t REG_SZ /d .  
reg add "HKCU\Control Panel\International" /v sShortDate /f /t REG_SZ /d dd.MM.yyyy  
reg add "HKCU\Control Panel\International" /v sThousand /f /t REG_SZ /d .  

reg add "HKCU\Control Panel\International\Geo" /v Nation /f /t REG_SZ /d 94  
Member: Nohouse303
Nohouse303 Feb 18, 2008 at 17:45:12 (UTC)
Goto Top
Hallo Users,

nach Jahren der Abweisenheit muss ich diesen Beitrag noch mals wieder aufleben lassen.

Problem:

Jetzt muss ich auch das Eingabegebietsschema ändern.

Das mache ich neuerdings wie folgt:

Reg add "HKEY_USERS\%Dirname%\Keyboard Layout\Preload" /v "1" /t "Reg_SZ" /d "00000409" /f >NUL  
Reg add "HKEY_USERS\%Dirname%\Keyboard Layout\Preload" /v "2" /t "Reg_SZ" /d "00000407" /f >NUL  

Die Änderungen werden auch in der Regedit sichtbar. Jedoch im Windowsfenster nicht. Soll heissen, die Einstellungen werden nicht wirksam!!

Warum nicht?

Gruss der Nohouse