Autor Beitrag
Gast
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mo 25.08.03 03:40 
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()

Hier der Prototyp:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
type
  TWCarr = array[0..0of PWideChar;
  PWCarr = ^TWCarr;

function CommandLineToArgvW(
  lpCmdLine: PWideChar;
  var NumArgs: Integer
  ): PWCarr; stdcallexternal '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).

ausblenden 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])); // Parameter 3
    else
        Writeln(String(arrParams^[i - 2])); // Parameter 2
    end;
  finally
    GlobalFree(THandle(arrParams));
  end;
end;
Bernhard Geyer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 721
Erhaltene Danke: 3



BeitragVerfasst: 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
Gast
Gast
Erhaltene Danke: 1



BeitragVerfasst: 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.
Ist die Frage beantwortet? Das Problem gelöst?

Dann klicke hier, um das Thema entsprechend zu markieren!