![]() |
ShellExecute Problem mit zweitem Parameter
Moin zusammen.
Ich habe derzeit einige Probleme mit ShellExexcute : 1)
Code:
obige Prozedur läuft ohne Probleme, Datei wird mit der dazugehörigen Anwendung geöffnet.
procedure TfrmMain.OpenMedia(Media: String);
var n : Integer; sFile : String; err : Integer; begin err := 63; err := ShellExecute(Handle, 'open', PChar(Media), nil, nil, SW_SHOWNORMAL); if err <= 32 then ShowMessage(ShellExecuteErrMsg(err)); end; 2)
Code:
Media :
procedure TfrmMain.OpenMediaWithApplication(Media, Application: String);
var n : Integer; sFile : String; err : Integer; begin err := 63; err := ShellExecute(Handle, 'open', PChar(Application), PChar(Media), nil, SW_SHOWNORMAL); if err <= 32 then ShowMessage(ShellExecuteErrMsg(err)); ShowMessage(IntToStr(err)); // <--- Rückgabewert ist 42 end; M:\DB_MED\MediaFiles\Video\Incognito_JapanTour2012 .avi übergebe ich die Anwendung, mit der die Datei (Media) geöffnet werden soll im ersten Parameter und den Dateinamen im zweiten Parameter, bekomm' ich einen Rückgabewert von 42 (kein Fehler), der Dateiname des zweiten Parameters scheint aber bei der Anwendung nicht anzukommen: bsp. MediaPlayer oder VLC MediaPlayer --> beide können die Datei nicht öffnen, lt. Fehlermeldung weist die Datei eine unbekannte Fehlermeldung auf (ist aber *.avi, mehrfach kontrolliert). Media ist die gleiche Datei wie auch in der ersten Prozedur benutzt. Weiß jemand Rat ? BS : Win10 und Win7, beide 64Bit, gleiches Ergebnis. |
AW: ShellExecute Problem mit zweitem Parameter
Hallo,
ich hatte auch mal ein Problem mit ShellExexcute() wo bestimmte Dateien nicht aufgerufen wurden. Nachdem ich den Dateinamen in Anführungszeichen gesetzt hatte habe ich das Problem nicht mehr.
Delphi-Quellcode:
Ob das jetzt dein Problem löst vermag ich nicht zu sagen, da ich auch nicht weiß was genau sich hinter
PChar('"' + Media + '"')
Zitat:
|
AW: ShellExecute Problem mit zweitem Parameter
@ juergen,
danke, das war's . . . vielleicht weiß ja noch jemand den Hintergrund . . . |
AW: ShellExecute Problem mit zweitem Parameter
Parameter werden durch Leerzeichen getrennt. Enthält ein Dateiname Leerzeichen, so wird er wie entsprechend viele Parameter behandelt.
Dateinamen mit Leerzeichen muss man in Hochkommata setzen. Das ist eigentlich der Fall, seit dem Windows bei Dateinamen mehr als 8.3 zulässt. (War das Windows 95 bzw. Windows NT?) |
AW: ShellExecute Problem mit zweitem Parameter
... daran hab' ich auch schon gedacht, und Leerzeichen durch Unterstriche ersetzt, das Ergebnis war allerdings das Gleiche,
und Unterstriche sind meines Wissens in Dateinamen erlaubt . . . |
AW: ShellExecute Problem mit zweitem Parameter
Zeig' doch bitte mal den konkreten Inhalt von Media, so kann man doch nur spekulieren.
|
AW: ShellExecute Problem mit zweitem Parameter
Media-Inhalt (ein Beispiel) im ersten Post
|
AW: ShellExecute Problem mit zweitem Parameter
In
M:\DB_MED\MediaFiles\Video\Incognito_JapanTour2012 .avi ist ein SPACE vorhanden. |
AW: ShellExecute Problem mit zweitem Parameter
Zitat:
|
AW: ShellExecute Problem mit zweitem Parameter
Hmm..
Zitat:
Dann ist der Fehler gefunden... ;) |
AW: ShellExecute Problem mit zweitem Parameter
Zitat:
Da hat nur das Forum zugeschlagen, welches zu lange "Wörter" trennt, damit ein Zeilenumbruch in die Anzeige rein kann. :zwinker: |
AW: ShellExecute Problem mit zweitem Parameter
Zitat:
OK, nichts für ungut.. Nur Leerzeichen in Parameter sind ja Trennen für 'verschiedene' Parameter.. Deshalb geht es mit Anführungszeichen, da dann die Leerzeichen ein Teil 'eines' Parameters (eingeschlossen in den ") sind.. |
AW: ShellExecute Problem mit zweitem Parameter
Ich hab's jetzt generell zwischen Anführungszeichen gesetzt,
löst erst mal das Problem.:) |
AW: ShellExecute Problem mit zweitem Parameter
Das stimmt und dagegen hab ich auch nichts gesagt. :zwinker:
Nur da hier Mehrere auf dieses eine nichtexistente Leerzeichen eingingen, gedachte ich mal zu erwähnen, daß Dieses hier nur angezeigt wird, aber nicht im Namen vorkommt. (das erkennt man gut, wenn man den Ursprungspost zitieren will) |
AW: ShellExecute Problem mit zweitem Parameter
Zitat:
stecken könnte - daher habe ich es erst mal als Lösung genommen, inzwischen (zwei Stunden später) entferne ich diese (und evt. andere unliebsame Zeichen) mittels StringReplace. Ein ... PChar(Chr(34) + Media + Chr(34)) kann allerdings nicht schaden . . .:-D |
AW: ShellExecute Problem mit zweitem Parameter
Zwei Funktionen zur Auswahl:
Delphi-Quellcode:
function RemoveSpaces(const s: string): string;
var len, p: integer; pc: PChar; const WhiteSpace = [#0, #9, #10, #13, #32]; begin len := Length(s); SetLength(Result, len); pc := @s[1]; p := 0; while len > 0 do begin if not (pc^ in WhiteSpace) then begin inc(p); Result[p] := pc^; end; inc(pc); dec(len); end; SetLength(Result, p); end; function DeleteSpaces(Str: string): string; var i: Integer; begin i:=0; while i<=Length(Str) do if Str[i]=' ' then Delete(Str, i, 1) else Inc(i); Result:=Str; end; procedure TForm1.Button1Click(Sender: TObject); begin Edit2.text:= RemoveSpaces(Edit1.text); end; procedure TForm1.Button2Click(Sender: TObject); begin Edit2.text:= DeleteSpaces(Edit1.text); end; |
AW: ShellExecute Problem mit zweitem Parameter
Zitat:
Delphi-Quellcode:
. Finde ich besser lesbar, weil man nicht überlegen muss, was denn nun Chr(34) ist. Trotz des "Ansi" im Funktionsnamen eignet sich die Funktion für Unicode-Strings, wenn man die aus SysUtils verwendet - siehe
PChar(AnsiQuotedStr(Media, '"'))
![]() Grüße Dalai |
AW: ShellExecute Problem mit zweitem Parameter
Zitat:
Code:
finde ich persönlich kürzer und auch verständlich
. . .
const OldString : Array[1..3] = (Chr(32), Chr(10), Chr(19)); NewString : String = Chr(95); var i : Byte; Destination : String; . . . Destination := [irgendwas]; for i := 1 to 3 do Destination := ReplaceString(Destination, OldString[i], NewString, [rfReplaceAll, rfIgnoreCase]); . . . |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz