Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Probleme mit ShellExecute (https://www.delphipraxis.net/155682-probleme-mit-shellexecute.html)

Alfonso 3. Nov 2010 18:12

Probleme mit ShellExecute
 
Hi,
mit Shellexecute rufe ich eine Datei auf (z.b: C:\test\test.pdf) und das jeweils assoziierte Programm öffnet es, in diesem Fall Acrobat Reader.
Wenn ich unter Windows 7 PNG oder JPG mit dem Windows Paint Programm verknüpft habe, was auch der Standard ist, wird nichts geöffnet und es gibt auch keine Fehlermeldung. Verknüpfe ich es mit Irfanview, läuft es perfekt.

Delphi-Quellcode:
function ExecuteFile(const FileName, Params, DefaultDir: string;
  ShowCmd: Integer): THandle;
//Programm ausführen
var
  zFileName, zParams, zDir: array[0..79] of Char;
begin
  Result := ShellExecute(Application.Handle, nil,
    StrPCopy(zFileName, FileName), StrPCopy(zParams, Params),
    StrPCopy(zDir, DefaultDir), ShowCmd);
end;
Weis jemand Rat?

Gruß
Alfonso

Assarbad 3. Nov 2010 18:13

AW: Probleme mit ShellExecute
 
Warum nil und nicht 'open' als zweiter Parameter? I.e. als Verb.

Zitat:

NULL
In systems prior to Microsoft Windows 2000, the default verb is used if it is valid and available in the registry. If not, the "open" verb is used.

In Windows 2000 and later, the default verb is used if available. If not, the "open" verb is used. If neither verb is available, the system uses the first verb listed in the registry.

Luckie 3. Nov 2010 18:15

AW: Probleme mit ShellExecute
 
Du gibst in deiner Funkion doch schon den Rückgabewert von Shellexecute zurück. Warum guckst du nicht einfach, was zurückgegeben wird? :roll:

PS: Shellexecute gibt kein Handle zurück.

Assarbad 3. Nov 2010 18:18

AW: Probleme mit ShellExecute
 
Zitat:

Zitat von Luckie (Beitrag 1059436)
Du gibst in deiner Funkion doch schon den Rückgabewert von Shellexecute zurück. Warum guckst du nicht einfach, was zurückgegeben wird? :roll:

Das kann ich fast verstehen. MSDN-Library durchsuchenShellExecute ist dahingehend echt vermurkst. Wenn man MSDN-Library durchsuchenShellExecuteEx benutzt bekommt man wenigstens echte Win32-Fehlercodes und nicht den Quark den ShellExecute liefert.

Aber zumindest gäbe das einen Anhaltspunkt.

Matze 3. Nov 2010 18:27

AW: Probleme mit ShellExecute
 
Hallo Alfonso,

ich hatte auch mal Probleme mit ShellExecute (wobei ich immer 'open' verwendete).
Eine Lösung, die bei mir immer funktionierte, habe ich damals in die Code-Library gegeben: Dateien und Anwendungen aus Delphi heraus starten

Grüße
Matze

Assarbad 3. Nov 2010 18:31

AW: Probleme mit ShellExecute
 
Zitat:

Zitat von Matze (Beitrag 1059446)
Eine Lösung, die bei mir immer funktionierte, habe ich damals in die Code-Library gegeben: Dateien und Anwendungen aus Delphi heraus starten

Welche der beiden Lösungen meinste denn? :mrgreen:

Nee, wenn sowas schon da ist, würde ich auch ShellExecuteEx (erste Lösung von Matze) benutzen. Da kann man danach MSDN-Library durchsuchenGetLastError aufrufen und bekommt eine sinnvolle Rückgabe. Bei ShellExecute ist das nicht garantiert.

Alfonso 3. Nov 2010 18:44

AW: Probleme mit ShellExecute
 
Hallo Matze und alle anderen,

erst mal danke schön für die verdammt schnelle Antwort. Es zeigt sich wieder, selber suchen ist viel Zeitaufwendiger als die Experten hier zu Fragen.
Matze, dein Code aus der Library war Goldrichtig. Damit funktioniert es.

Danke!

Gruß
Alfonso


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz