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)), Nil, Nil, 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
Narses: B- durch Delphi-Tags ersetztModeriert von
Tino: Topic aus VCL (Visual Component Library) verschoben am Mi 23.12.2009 um 15:14
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; 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.