Entwickler-Ecke
Windows API - ShellExecute
Sylvus - Di 31.03.09 18:05
Titel: ShellExecute
Hay Leute, kleines Problem...
Ich will in meinem Programm ein beliebiges Dokument aufrufen, dessen Pfad der User selbst vorgibt, also z.B.:
D:\Programme\BlenderPortable2.46\meinDokument.odt
Ich weiß jedoch nicht, welches Dateiformat (doc,odt,txt..) die Datei hat, aber ich will ja auch das Windows die mit dem Standart Programm öffnet! Jetzt lautet meine Frage wie ich das anstelle :)
Also:
Delphi-Quelltext
1: 2: 3: 4: 5:
| var tempname : string = 'D:\Programme\BlenderPortable2.46\meinDokument.odt'; begin ShellExecute(Handle,nil,???,nil,tempname,SW_SHOW); end; |
Wäre nett wenn jemand die ??? ergänzen könnte, oder einfach den richtigen Befehl posten könnte :)
Dankeschön!!
Viele Grüße
Sylvus
jaenicke - Di 31.03.09 18:10
Du musst das auf PChar casten, und der zweite Parameter ist 'open':
Delphi-Quelltext
1:
| ShellExecute(Handle, 'open', PChar(tempname), ...); |
Sylvus - Di 31.03.09 18:14
Herzlichen Dank, funktioniert super!
Nur werd ich nicht ganz aus der Hilfe schlau, also wenn ich versuche zu verstehen was ich gemacht habe^^
Ich wandle ja den string in ein PChar um, dabei besteht ein PChar aus verschiedenen Teilen? Oder ist ein PChar nur ein pointer, der immer ein Zeichen weiter wandert?
Viele Grüße
Sylvus
und nochmal dankeschön für die schnelle Antwort!
jaenicke - Di 31.03.09 18:16
PChar ist ein Pointer auf eine nullterminierte Zeichenkette. Du musst bei einer solchen Zeichenkette nach dem Nullzeichen suchen um die Länge der Zeichenkette zu ermitteln.
Im Gegensatz dazu steht vor der eigentlichen Zeichenkette beim Datentyp String in Delphi eine Information über die Länge der Zeichenkette und ein Referenzzähler.
Sylvus - Di 31.03.09 18:33
ahhh gut haben wir das auch geklärt, noch ne kurze Frage, dann ist alles geklärt :)
ich hab jetzt
Delphi-Quelltext
1: 2: 3: 4:
| try ShellExecute(...) except ShowMessage(...) end; |
aber er zeigt mir die Nachricht nicht an, auch wenn er keine Datei öffnen kann, weil die Datei nicht existiert!
Kann ich das irgendwie anders abfangen? Also prüfen ob er die Datei auch öffnet?
Vielen Dank
Sylvus
JayEff - Di 31.03.09 18:39
Shellexecute wirft keine Exceptions sondern gibt einen Fehlercode zurück, siehe
Zitat: |
SHELLEXECUTE: Return Value
If the function succeeds, it returns a value greater than 32. If the function fails, it returns an error value that indicates the cause of the failure.[...] |
Dort gibt's ne liste, was die Fehler-Zahlen bedeuten, aber für dich reicht einfach:
Delphi-Quelltext
1:
| if Shellexecute(...) > 32 then Erfolg else Fehler |
Edit: Autsch - Ich glaub das war ein Known-Bug.
jaenicke - Di 31.03.09 18:39
Wie wäre es mit dem Rückgabewert von ShellExecute?
// EDIT: :oops: ja, ShellExecute^^
Sylvus - Di 31.03.09 19:03
RückgabeWert von ShowMessage verstehe ich nicht, aber das andere funktioniert wunderbar!
Ich werd jetzt mal versuchen meine alte Delphi-Hilfe zu aktualisieren, damit ich mir das auch selbst erarbeiten kann!
Vielen Dank für die schnellen Antworten!
bye bye
Sylvus
JayEff - Di 31.03.09 19:09
Sylvus hat folgendes geschrieben : |
RückgabeWert von ShowMessage verstehe ich nicht, aber das andere funktioniert wunderbar! |
Er meinte auch den Rückgabewert von Shellexecute, Showmessage ist eine Prozedur und hat keinen :mrgreen:
Shellexecute steht so leider nicht in der Hilfe drin, API-Funktionen findet man aber immer auf msdn, siehe der Link in meinem Zitat :zustimm:
Edit: Die MSDN-Suche vom Delphi-Forum scheint nicht zu funktionieren, hier ein direkter Link :motz:
http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx
Sylvus - Di 31.03.09 19:14
aaachso ok alles klar - Problem gelöst! Danke nochmal an alle :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!