Entwickler-Ecke

Windows API - Shellexecute und Parameter


wayney - Mi 23.12.09 13:11
Titel: Shellexecute und Parameter
HAllo nochma,
nachdem mein letztes Problem erfolgreich gelöst wurde, habe ich jetzt ein neues.
Ich möchte nur den ausgewählten Litbox-Eintrag mit einem Parameter starten. JEdoch soll das Parameter durch eine vorherige Eingabe in einem Textfeld bestimmt sein. MEin Problem ist nun, wie sage ich Shellexecute, dass es das Programm mit einem Parameter starten soll.
Bestes Beispiel ist der Internet Explorer. Ich weis wie ich eine feste URl mit Shellexecute öffnen kann. Aber ich möchte, dass er auf die eingegeben Variablen zugreift und man diese jederzeit ändern kann. Habe es auch schon damit probiert:


Delphi-Quelltext
1:
Startp2.text:=ParamStr (2);                    

für das Textfeld
ShellExecute(Application.Handle, 'open', PChar(ListBox1.Items.Strings[ListBox1.ItemIndex]), PCHAR('Paramstr(2)'), Nil, SW_SHOW);
geht nicht
ShellExecute(Application.Handle, 'open', PChar(ListBox1.Items.Strings[ListBox1.ItemIndex]+paramstr (2)), NilNil, SW_SHOW);
damit greift er nicht auf das Parameter zu

Jedoch erkennt mein shellexecute nur Paramstr (2) als url.
Wie kann ich einen Text als Variable speichern. Int und str funktionieren scheinbar nicht und das Forum spukt auch nichts brauchbares aus.
Hoffe ihr könnt mir noch mal helfen.
mfg wayney

Moderiert von user profile iconNarses: B- durch Delphi-Tags ersetzt
Moderiert von user profile iconTino: Topic aus VCL (Visual Component Library) verschoben am Mi 23.12.2009 um 15:14


Bergmann89 - Mi 23.12.09 13:25

Hey,

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var FileName, Params: String;

  FileName := ListBox1.Items.Strings[ListBox1.ItemIndex];
  Params := StartP2.Text;
  ShellExecute(Application.Handle,
               'open',
               PAnsiChar(FileName),
               PAnsiChar(Params),
               PAnsiChar(ExtractFilePath(FileName)),
               SW_SHOW);

So sollte es gehen.

MfG Bergmann.


wayney - Mi 23.12.09 13:59

Jop geht tausend dank;)


JoelH - Mi 23.12.09 14:25

ich starte externe Programme mittels dieser Funktion


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
function RunProcess(FileName: string; ShowCmd: DWORD; wait: Boolean; ProcID: PDWord): Longword;
var
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
begin
  FillChar(StartupInfo, SizeOf(StartupInfo), #0);
  StartupInfo.cb          := SizeOf(StartupInfo);
  StartupInfo.dwFlags     := STARTF_USESHOWWINDOW;// or STARTF_FORCEONFEEDBACK;
  StartupInfo.wShowWindow := ShowCmd;
  if not CreateProcess(nil,
    @Filename[1],
    nil,
    nil,
    False, 
    CREATE_NEW_CONSOLE or
    NORMAL_PRIORITY_CLASS, 
    nil
    nil,
    StartupInfo, 
    ProcessInfo) 
    then
      Result := WAIT_FAILED 
  else 
  begin
    if wait = FALSE then 
    begin 
      if ProcID <> nil then ProcID^ := ProcessInfo.dwProcessId;
      exit; 
    end;
    WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
    GetExitCodeProcess(ProcessInfo.hProcess, Result); 
  end
  if ProcessInfo.hProcess <> 0 then
    CloseHandle(ProcessInfo.hProcess); 
  if ProcessInfo.hThread <> 0 then 
    CloseHandle(ProcessInfo.hThread);
end;


Die entsprechenden Parameter werden dabei einfach Leerzeichengetrennt mit dem Exenamen als Sting übergeben. Via wait kann man das Programm dazu bingen zu waren bis der externe Prozess beendet wurde.