Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi SetupDiClassNameFromGuid auf deutsch (https://www.delphipraxis.net/185839-setupdiclassnamefromguid-auf-deutsch.html)

Mattze 10. Jul 2015 12:10

SetupDiClassNameFromGuid auf deutsch
 
Hallo,

mit SetupDiClassNameFromGuid kriege ich ja die Namen der Gerätetypen wie im Gerätemanager.
Nur: auf englisch.

Wie kriege ich diese Namen nun auf deutsch?

(Wobei ich das Problem auch allgemein habe. Ich kriege nach irgendeiner MS-Function etwas auf englisch zurück. Das System zeigt diese Dinge aber auf deutsch an. Wie wird das gemacht?)

Gruß
Mattze

Union 10. Jul 2015 13:40

AW: SetupDiClassNameFromGuid auf deutsch
 
In dem Fall evtl. die Klassenbeschreibung holen:

Delphi-Quellcode:
function SetupDiClassNameFromGuid(ClassGuid: PGUID; ClassName: PChar;ClassNameSize: DWORD; RequiredSize: PDWORD): BOOL; stdcall;external 'Setupapi.dll' name 'SetupDiClassNameFromGuidW';
function SetupDiGetClassDescription(ClassGuid: PGUID; ClassName: PChar;ClassNameSize: DWORD; RequiredSize: PDWORD): BOOL; stdcall;external 'Setupapi.dll' name 'SetupDiGetClassDescriptionW';

function GetLocName : string;
const
  // Maus
  AGUID : TGUID = '{4d36e96f-e325-11ce-bfc1-08002be10318}';
var
  LSize : DWORD;
  LClassname : PChar;
begin

  LSize := 0;
  GetMem(LClassname, 0);
  SetupDiClassNameFromGuid(@AGUID, LClassname, LSize, @LSize);
  GetMem(LClassname, LSize);
  SetupDiClassNameFromGuid(@AGUID, LClassname, LSize, @LSize);
  Result := LClassname;
  FreeMem(LClassname);

  LSize := 0;
  GetMem(LClassname, 0);
  SetupDiGetClassDescription(@AGUID, LClassname, LSize, @LSize);
  GetMem(LClassname, LSize);
  SetupDiGetClassDescription(@AGUID, LClassname, LSize, @LSize);
  Result := Result + ' - ' +LClassname;
  FreeMem(LClassname);

end;

Mattze 10. Jul 2015 14:44

AW: SetupDiClassNameFromGuid auf deutsch
 
Hallo,

vielen Dank! Genau das war es. Ich wäre sicher nicht so bald darauf gekommen, mal bei SetupDiGetClassDescription nachzuschauen.

Scheinbar gibt es da wirklich keine allgemeine Regel. Ich würde mir eine allgemeine Funktion GetLocalName wünschen. (Allerdings ist das wegen der verschiedenen Eingabeparameter bestimmt nicht so möglich. Schade!)

Apropos Maus:
Ich hatte das gleiche Problem mit den Cursornamen. Bsp: Crosshair, auf deutsch: Präzisionsauswahl.
Gelöst bekam ich das nur mit einer eigenen "Übersetzungstabelle" für Cursornamen.
Aber das halte ich nicht für eine gute Lösung!!!

Na ja...

Gruß
Mattze

Union 10. Jul 2015 15:39

AW: SetupDiClassNameFromGuid auf deutsch
 
Gerade bei den Positionsanzeigern ist das auch schwierig, denn die können ja u.A. aus *.cur, *.ani, HINSTANCE etc. geladen werden. Diese Daten haben keine Struktur, welche die Speicherung von Namen zuläßt, geschweige denn mehrsprachig wie z.b. bei FileVersionInfo.
[Edit]
Du findest die Bezeichnungen in separaten Resourcen, für die Positionsanzeiger in %systemroot%\system32\<Locale>\main.cpl.mui
<Locale> ist dann z.b. für Deutschland de-DE:
Code:
STRINGTABLE
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
{
208,    "Ausgelastet\000"
209,    "Hintergrundaktivität\000"
210,    "Nicht verfügbar\000"
211,    "Textauswahl\000"
212,    "Präzisionsauswahl\000"
213,    "Vertikale Größenänderung\000"
214,    "Horizontale Größenänderung\000"
215,    "Diagonale Größenänderung 1\000"
216,    "Diagonale Größenänderung 2\000"
217,    "Verschieben\000"
218,    "Hilfeauswahl\000"
219,    "Handschrift\000"
220,    "Alternative Auswahl\000"
221,    "(Kein)\000"
222,    " (Systemschema)\000"
223,    "Schema ersetzen?\000"
}
Leider gibt das nur die Liste, die Zuordnung der Resourcen-IDs erfolgt ja in der main.cpl

Mattze 10. Jul 2015 18:22

AW: SetupDiClassNameFromGuid auf deutsch
 
Hallo,

und nochmals viiielen Dank!
Du weißt gar nicht, wie sehr Du mir da geholfen hast.
Z. Bsp. steht beim Cursorschema "Magnified" in der Registry als letztes im String
"...main.cpl, -1007" Ich wusste zwar, dass das ein String aus einer String-Ressource ist, aber nicht, wie man da ran kommt.
Einfach deshalb nicht, weil ich die "mui-Regel" (hier: main.cpl.mui) nicht kannte.
Toll!!!

Gruß
Mattze


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz