Entwickler-Ecke
Windows API - ...die in Unicode übergebenen Parameter auslesen?
Anonymous - Mo 25.08.03 03:40
Titel: ...die in Unicode übergebenen Parameter auslesen?
Hiho,
als Delphianer lehnt man sich ja oft zurück und benutzt mal eben ParamCount und ParamStr(x). Leider ist diese Variante nur mit ANSI-Longstrings möglich ... Unicode ... keine Spur :-/
Leider, aber genau dazu gibt es ja eine wunderschöne Funktion seit Windows NT 3.5:
CommandLineToArgvW() [
http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/reference/functions/commandlinetoargv.asp]
Hier der Prototyp:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| type TWCarr = array[0..0] of PWideChar; PWCarr = ^TWCarr;
function CommandLineToArgvW( lpCmdLine: PWideChar; var NumArgs: Integer ): PWCarr; stdcall; external 'shell32.dll'; |
Hier ein Anwendungsbeispiel. Parameter 1 ist der Modulname ... Parameter 2 ist dann das nächste etc pp. Die Indizes in im Array sind aber nullbasiert ... also ist Parameter 1 mit Index 0 erreichbar etc pp. Im Integerwert wird die Anzahl der zurückgegebenen Parameter eingetragen. Freigeben obliegt dem Programm, welches die Funktion benutzt (siehe FINALLY).
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| var i: Integer; arrParams: PWCarr; begin arrParams := CommandLineToArgvW(GetCommandLineW, i); if arrParams <> nil then try case i of 3: Writeln(String(arrParams^[i - 1])); else Writeln(String(arrParams^[i - 2])); end; finally GlobalFree(THandle(arrParams)); end; end; |
Bernhard Geyer - Di 26.08.03 08:51
Titel: Wann verfügbar
Hallo Assarbad,
weißt Du auch ab welcher BS-Version diese Funktion verfügbar ist? Die MS-Beschreibung ist da mal (wieder) wiedersprüchlich:
MSDN-Library Juli 2003: Verfügbar erst ab Shell32.dll version 6.0 unter XP :(
Win32-Developers-Library (Delphi 6): Win95 No, WinNT Yes, Unicode No :roll:
Bernhard
Anonymous - Di 26.08.03 10:50
Hehe, eigentlich ist die Doku nicht widersprüchlich. Es steht nur einmal bei der Sektion "Windows Controls" (die erst seit Win XP im PSDK ist) und einmal bei der Sektion "DLLs, Processes and Threads" (welches die richtige für unser Problem ist ;))
Ich zitiere MS:
Zitat: |
Client: Included in Windows XP, Windows 2000 Professional, and Windows NT Workstation 3.5 and later.
Server: Included in Windows Server 2003, Windows 2000 Server, and Windows NT Server 3.5 and later. |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!