Entwickler-Ecke

Dateizugriff - ShellExecute


chris_davidi - Di 09.09.03 10:40
Titel: ShellExecute
Hi.

Per ShellExecute kann man ja Programme starten.


Delphi-Quelltext
1:
ShellExecute(Application.Handle, 'open''C:\Programme\MSWorks\msworks.exe'nilnil, SW_SHOW);                    


Kann man aber auch machen, dass ich dem Programm wo ich gestartet einen Wert gebe und es über diesen Wert auch wieder schließen kann.

Stelle es mir so vor:

Programm wird per Button1.Click mit ShellExecute gestartet, bekommt den Wert X und wenn ich auf Button2 klicke, dass dieser das Programm wieder beendet, indem er x.close oder so etwas in der Art sagt.

Habt ihr da eine Idee, bzw. Code?


foxy - Di 09.09.03 10:47

mach dir mal genau gedanken darüber
1. du musst wissen wo sich das zu startende programm befindet
2. wenn du das weist, spillest du erst mal den namen und pfad in 2 strings auf
wie das geht steht schon hier im forum :) suchen benutzen

dann benutzt du in dem onclick ereignis eben die shellexecute mit den 2 strings ... somit startest du dein programm

dein programm schliessen also das, dass du geöffnet hast, wird etwas schwieriger .. wenn du erst ma da bist melde dich wieder


chris_davidi - Di 09.09.03 11:26

Ok, das weiß ich. Aber Schritt 2 ist mir unklar, verstehe ich nicht. Und über die Hilfe finde ich auch nichts wissenswertes, nur zuviele Beiträge. *g*


Delete - Di 09.09.03 13:11

foxy will sicher darauf hinaus, dass du Pfad- und Dateiname trennst und dann entsprechend getrennt bei ShellExecute angibst. Das ist aber IMHO nicht notwendig, da ich mal vermute, dass dein Beispielaufruf im ersten Posting funktioniert und Works startet. Oder?

Zum Beenden hast du IMHO zwei sinnvolle Möglichkeiten.

1. Du kennst den Klassennamen (empfehlenswert) und/oder Fenstertitel (weniger empfehlenswert, weil evtl. veränderbar und sprachabhängig) und kannst dann das Fenster mit Suche in: Delphi-Forum, Delphi-Library FINDWINDOW suchen und via SendMessage + WM_CLOSE abschießen.

2. Du machst einen Suche in: Delphi-Forum, Delphi-Library PROZESS SNAPSHOT und suchst gezielt nach dem Dateinamen. Dann killst du den Prozess.


Delete - Di 09.09.03 16:08

Oder du startest mit ShellExecuteEx oder CreateProcess und merkst dir die ProzessID, dann mußt du sie nachher nicht erst suchen.


wham1010 - Mi 12.11.03 23:46

wo wir grad dabei sind (wollt nicht schon wieder ein neues Thema bzgl. ShellExecute öffnen!):

Hab folgende Zeile in mein Programm eingefügt:

Delphi-Quelltext
1:
ShellExecute(0'open', PChar('mailto:my.name@provider.at?subject=Test&body=123456789'), nilnil, SW_HIDE);                    

dachte mir, dass nun das Outlook-Fenster zwar geöffnet, aber nicht sichtbar ist?! achja, und gibt es auch eine möglichkeit, das ich sie so erstellte mail auch gleich wegschicke (also, von meinem Programm aus, nicht von Outlook :lol: ?

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.


Licki - Do 13.11.03 16:51

Schaue mal unter http://www.pics-software.de/delphi/index.html , dort wirst du fündig.