C# - Frage bezüglich Shellexecute und Parametern

svenk2

Grünschnabel
Hallo,

ich wende mich Unwissenderweise schon wieder an Euch. Gibt es eine Möglichkeit in C# von einem externen Programm via Shellexecute verschiedene Parameter zu empfangen und diese dann weiterverarbeiten bzw mit diesen Parameter weiterarbeiten.

Ich sende von einem externen Programm in etwa so:

Code:
procedure XYZ
begin
  ShellExecute ('MEINEAPP.exe', 'PARAMETER');
end;

Und nun möchte ich den Parameter in meiner App einlesen unter weiterverarbeiten. Hab jetzt ne ganze Weile gesucht, finde aber immer nur Beispiele und/oder Erklärungen wie meine App Parameter schickt, nicht aber empfängt oder ich bin zu d**f zum Suchen.

Hättet ihr vielleicht ein kurzes Beispiel oder ein paar Links, wo ich mich einlesen kann?

Danke schon mal

LG
 
Ich glaube nicht, dass ShellExecute da die richtige Funktion ist. Ich nehme mal an, dein ShellExecute ist mit dem ShellExecuteW der WinAPI verwandt: ShellExecuteW function (shellapi.h) - Win32 apps

Diese Funktion ist dazu da, Dateien zu öffnen/editieren/zu drucken u.a. - und zwar mit dem standardmäßig eingestellten Programm. Wenn du also eine MP3-Datei hast und die einfach öffnen möchtest, dann benutzt du ShellExecute. Hingegen, wenn du eine Executable hast, vermute ich, dass ShellExecute eher die falsche Funktion für ist und CreateProcess bessere wäre.

Jedoch habe ich gerade folgenden Thread gefunden: Why do we need to pass LPCTSTR lpParameters with ShellExecute Dort wird erklärt, wie man an die Parameter herankommt.
 
Hallo,

ich versuche mal mein Gedankengang etwas zu erläutern. Ich kann in dem externen Programm mittels eines Scripts bestimmte Zustände des Programms erfassen. Ich möchte diese erfassten Zustände dann an mein Programm übergeben um dort mit diesen Zuständen zu arbeiten.

Kleines Beispiel:

Externes Programm ist gestartet, dieser Zustand soll dann an mein Programm übergeben werden und dort z.B. eine LED leuchten lassen, oder einfach Text ausgeben "Programm XYZ gestartet". Das wäre natürlich nur ein Zustand der abgefragt werden soll. Aktuell habe ich das noch über *.txt-Dateien gelöst, die dann zeilenweile von meiner App eingelesen werden. Daher dachte ich, dieser Weg mit Shellexecute bzw. HiddenShellExecute der "bessere" Weg wäre. Aber ok, wieder was gelernt. Werde mir war mal den Link von dir anschauen, aber schaue dann mal, obnoch andere Lösungen in Betracht kommen.

Lg und Danke schon mal
 
Ich glaube das, was du möchtest, ist Interprozesskommunikation (interprocess communication, IPC). Das ist das Schlagwort dafür.
Die genaue Ausprägung dafür, wie du IPC realisierst, hängt von den beteiligten Sprachen und dem Problemumfang ab. In sehr high-level Programmiersprachen hätte man vielleicht sofort Websockets für eine Kommunikation gestartet.

ShellExecute und auch CreateProcess erstellen aber immer einen neuen Prozess. Ich dachte, du möchtest Daten an einen bestehenden Prozess übergeben?
 
Nein, ich möchte Daten VON einem bestehenden Prozess, also einem externen Programm, abfragen. Wie gesagt, dieses externe Programm stammt nicht von mir, ist, wenn mich jetzt recht entsinne in Delphi geschrieben, bietet aber die Möglichkeit, mittels Script auf bestimmte, vom Entwickler freigegeben Prozesse zuzugreifen um eben den Status zu erfragen und über eine Vielzahl von verschiedenen Wegen weiterzugeben.

Einige dieser Wege spielen für mein Vorhaben keine Rolle, da sie nur dazu dienen, bestimmte technische Geräte zu steuern.
Interessanteste Punkte wäre hier wirklich Shellexecute, Kommunication über COM Schnittstelle oder MIDI oder wie aktuell bei mir, dass die benötigten Zustände in einer *.txt-Datei gespeichert werden und dann wiederum in meinem Programm eingelesen werden.

Ich werde mir das mal mit der Interprozesskommunikation anschauen, da ich aber kein "Monster" Projekt erstellen will und damit später auch kein Geld verdienen werde, werde ich vielleicht doch besser bei der Variante mit der *.txt-Datei bleiben.


Lg
 
:) Danke, werd ich mir mal anschauen, zumindest das Letzte, da ich ja nicht möchte, dass jedesmal ein neuer Prozess gestartet wird.

Vielen Dank

Lg
 
Zurück