Entwickler-Ecke

Dateizugriff - Shellexecute funzt net


Bela Urlaub - Mo 26.05.03 22:47
Titel: Shellexecute funzt net
Hi Leutz,

Ich hab schon die ganze db vom DF durchsucht, aba nix geht.
Ich habe aus anderen Beiträgen diesen Code:

Delphi-Quelltext
1:
ShellExecute(Application.Handle, 'open''c:\Windows\explorer.exe'nilnil, SW_SHOW);                    

In die Uses hab ich auch ShellAPI eingetragen, aber es geht nicht.
Stattdessen kommt
Zitat:
[Fataler Fehler] Ausgabedatei 'C:\Doku...\Tobias\..\..\Delphi-Projekte\WinView\Project1.exe' kann nicht erstellt werden.

Sry, wenn ich doppelt poste, aba ich glaub, nua so erkennt man mein Prob. am Besten!

Bitte helft mir schnell, den ich muss es bis MI für die Schule fertig haben! THX jetzt schon mal


toms - Mo 26.05.03 22:54

Hi!

Das liegt IMO nicht an ShellExecute(...) sondern daran, dass
noch eine (versteckte?) Instanz deiner Exe-Datei Läuft.


Bela Urlaub - Mo 26.05.03 22:59

Meinst du damit, die ganzen Prozesse, die Windows laufen lässt?
z.B. Dass man den Desktop sieht?
Wenn ja, gibts da noch was anderes, mit der ich die Explorer.exe als DEN
Explorer öffnen kann?


toms - Mo 26.05.03 23:00

Nein, deine Project1.exe läuft wahrscheinlich schon (oder noch).
Kannst ja mal im Taskmanager nachschauen, ob Project1.exe läuft.


Bela Urlaub - Mo 26.05.03 23:04

und was machen, wenn im TM kein Eintrag der Project1.exe is??
dann hab ich doch n Problem oda??
Aba irgendwas muss es doch geben :?


Bela Urlaub - Mo 26.05.03 23:15

Mia is jezt grad was aufgefallen:
Wenn ich die Einträge in der unit.pas wieda rausmach kommt eine Fehlermeldung: ':' erwartet aber ';' gefunden
Was bedeutet das jetzt?
Muss ich jetzt wieder von Vorne wegen diesem Fehler anfangen oda was muss ich jetzt machen??


foxy - Di 27.05.03 09:08

poste doch einfach mal das stückchen code das du hast ... also od er fehler auftritt :) das wäre viel einfacher


Bela Urlaub - Di 27.05.03 14:22

Es zeigt dann immer noch den [Fataler Fehler] an.
Und ausser diesem Message-Fenster kommt nix


Ex0rzist - Di 27.05.03 14:37

Kannst du die Project1.exe manuell löschen?


Bela Urlaub - Di 27.05.03 15:06

wie meinst du das?
Aus dem TM oda von da Festplatte?


Delete - Di 27.05.03 15:58

Von der Platte.


Bela Urlaub - Di 27.05.03 17:51

geht


Delete - Di 27.05.03 17:55

Und jetzt versuch noch mal zu kompilieren.


Bela Urlaub - Di 27.05.03 18:00

jo, geht net


Delete - Di 27.05.03 18:02

Und was bekommst du jetzt für eine Fehlermeldung? Sorry für die dumme Frage, aber meine Glaskugel ist in Reparatur.

ShellAPI hast du eingebunden?


Bela Urlaub - Di 27.05.03 18:28

des gleiche wie vorher :?


Bela Urlaub - Di 27.05.03 21:55

oki, Hat sich erledigt!!!
Hab einfach den Pfad weggelassen und einfach higeschrieben:

Delphi-Quelltext
1:
ShellExecute (Application.Handle, 'open''explorer.exe'nilnil, SW_SHOW);                    

und jetzt gehts ohne Probs!


Terra23 - So 01.06.03 13:10

Mag ja sein, daß ich mich irre, aber ich rufe ShellExecute mit anderen Parameterangaben auf:


Delphi-Quelltext
1:
ShellExecute(0Nil, "Pfadangabe", NilNil, SW_NORMAL);                    


Delete - Mo 02.06.03 15:49

Terra23 hat folgendes geschrieben:
Mag ja sein, daß ich mich irre, aber ich rufe ShellExecute mit anderen Parameterangaben auf

Was soll da groß anders sein?


Delphi-Quelltext
1:
ShellExecute(0,                    

Du benutzt Null (= das Desktop-Handle), Bela benutzt das Handle von TApplication. Ich nehme meist das TForm-Handle (bzw. bei NonVCL das Fensterhandle des erzeugten Fensters/Dialogs).


Delphi-Quelltext
1:
  Nil,                    

Dein nil bedeutet, Windows entscheidet, welche Aktion benutzt wird. Das kann z.B. bei mir bei Batch-, JS- oder VBS-Dateien in die Hose gehen, wenn ein Programm versucht, diese zu starten. Meine Standardaktion dieser Dateitypen ist nämlich "edit". :) Insofern ist es sinnvoller, die gewünschte Aktion ("open" bspw.) direkt anzugeben; was natürlich voraussetzt, dass es dieses Verb in der Registry auch gibt.


Delphi-Quelltext
1:
2:
3:
  "Pfadangabe",
  Nil,
  Nil,

Keine Unterschiede zu sehen.


Delphi-Quelltext
1:
  SW_NORMAL);                    

Ob SW_NORMAL (aka SW_SHOWNORMAL) oder nur SW_SHOW. Das bleibt dem Programmierer überlassen. Man muss sich halt vorher überlegen, wie die Anwendung beim Aufruf reagieren soll. Darum gibt es ja die unterschiedlichen SW_???-Konstanten.