Deine im ersten Posting angeführte Prozedur funktioniert doch perfekt!
Zum Testen habe ich lediglich den ASCII-Code für ein großes Ü ($9A)
oder ein kleines ü ($81) an Deine Prozedur übergeben und er wird
korrekt in den von Windows verwendeten ANSI-Code umgesetzt:
Code: Alles auswählen
Procedure.s UmlautzuWin(Umlaut.s)
OemToChar_(Umlaut,Umlaut)
Debug Umlaut
ProcedureReturn Umlaut
EndProcedure
UmlautzuWin("KR" + Chr($9A) + "GER") ; Gibt "KRÜGER" aus
UmlautzuWin("J" + Chr($81) + "rgen") ; Gibt "Jürgen" aus
Dies funktioniert so allerdings nicht, wenn Du unter Compiler-Optionen
die Option "Unicode-Executable erstellen" aktiviert hast, da in diesem Fall
für den ersten und zweiten Parameter von OemToChar() nicht die gleiche
Variable verwendet werden darf:
MSDN hat geschrieben:If the OemToChar function is being used as an ANSI function, the string can be translated in place by setting the lpszDst parameter to the same address as the lpszSrc parameter. This cannot be done if OemToChar is being used as a wide-character function.