# Ländereinstellung nur im eigenen Thread?



## TTimpe (1. Juni 2007)

Hallo,
ich habe ein Programm unter VB6 geschrieben, welches als Dezimaltrennzeichen zwingend den Punkt benötigt. Außerdem muss das Datumsformat als dd.MM.yyyy vorliegen. Diese Einstellungen werden aus der Registry HKEY_CURRENT_USER\Control Panel\International (sThousand und sShortDate) ausgelesen. Damit mein Programm stets die richtigen Einstellungen nutzt, setze ich diese beim Start und setze sie nach dem Beenden wieder zurück. Nun gibt es andere, gleichzeitig laufende Programme anderer Hersteller, die andere Einstellungen benötigen als die von mir gesetzten. Somit ist ein Parallelbetrieb nicht möglich. Unter Net gibt es die Möglichkeit, diese Einstellungen nur für den eigenen Thread zu setzen. Damit bleiben die Einstellungen für die anderen Programme erhalten. 
Gibt es auch unter VB6 die Möglichkeit, die benötigten Einstellungen nur für den eigenen Thread zu setzen?


----------



## ronaldh (4. Juni 2007)

Allgemeine Windows-Einstellungen in der Registry für ein eigenes Programm zu ändern ist hochgradig gefährlich und eine sehr schmutzige Sache.

Was machst Du, falls Dein Programm abschmiert? Dann bleiben die vom Anwender nicht gewünschten Einstellungen zurück. Windows ist nun mal ein Multitasking-System.

Du solltest die Anwendung so umschreiben, dass die Ländereinstellungen egal sind. Mit der Format-Funktion kannst Du die Anzeige und Art der Speicherung ja so machen, wie Du willst (wenn Du die Datum- oder Zahlenwerte in Textstrings speichern willst). Ansonsten sollte ein gutes Programm mit allen Ländereinstellungen umgehen können.

Grüsse
ronaldh


----------



## TTimpe (4. Juni 2007)

Danke für die Antwort,
die Problematik ist mir wohl bekannt, weshalb ich nun nach einer Lösung suche. Das Programm ist über viele Jahre gewachsen und hat mehr als 100.000 Codezeilen. Eine Änderung der Anzeigen über die Formatfunktion wäre an so vielen Stellen notwendig, dass der Aufwand riesig wäre. Wenn ich dem Programm aber mitteilen könnte, dass es grundsätzlich die Standard-Ländereinstellungen von Deutschland nutzen soll, aber nur für sich selbst, dann könnte in der Registry weiterhin stehen was will. Klar gäbe es ggf. Anzeigeprobleme im Ausland, weil nun alles für die deutsche Standardeinstellung gemacht wird, aber es funktioniert. Damit würde auch die Manipulation an der Registry entfallen. Mit Net ist das ein Einzeiler, aber unter VB kann ich so etwas nicht finden.
Kannst du mir helfen?


----------



## ronaldh (4. Juni 2007)

VB holt sich diese Einstellungen von Windows, eine Funktion zur Umstellung, die sich nur auf Dein Programm bezieht, kenne ich nicht.

Wenn wirklich keine realistische Möglichkeit gegeben ist, dass Programm diesbezüglich sicher zu machen, könntest Du mit den API-Funktionen GetNumberFormat und GetDateFormat die aktuellen Einstellung lesen, und im Falle von Einstellungen, mit denen das Programm nicht arbeitet, den Dienst verweigern. 

Ansonsten kann ich mir ein großes Programm eigentlich kaum vorstellen, welches keine eigenen Funktionen zur Eingabeprüfung gerade von Zahlen- und Datumsfeldern benutzt. Denn auch bei korrekten Einstellungen könnte der Anwender ja sonst dummes Zeug eingeben, dass muss doch auch geprüft werden. Wären derartige Routinen vorhanden, könnte man sie auch für eventuell erforderliche Feldkonvertierungen nutzen.

Grüsse
ronaldh


----------



## TTimpe (4. Juni 2007)

Hallo,
danke für die Ideen, aber ich bin entschlossen, die Funktion zu finden, wenn nötig über eine eingebundene, in Net geschriebene DLL. Hiermit sollte es in jedem Falle gehen, einziger Nachteil ist die Notwendigkeit von Framework 2.0 nur für diese Funktion, aber sei's drum. Mir scheint das die sicherste Variante, bevor ich an tausend Stellen Änderungen vornehmen muss.


----------

