Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

VB - Parameter an gestartete EXE übergeben

Empfohlene Antworten

Veröffentlicht

Hi

Ich wüsste mal gerne wie man an eine laufende EXE nen parameter übergeben kann.

Bis jetzt hab ichs mit nem Key in der Reg realisiert aber ich glaub net das dass fürs system so gesund is wenn ich jede sekunde nen key lese.

Hoffentlich kann mir jemand helfen :(

Gruß

|ReDBullet|

Ähm, wie meinst Du das? Soll es beim Aufruf geschehen?

Z.B. "programm.exe /parameter1 /parameter2"

Bitte schilder mal das Problem genauer.

hi

also: die exe ist schon gestartet und irgendwann will ich ihr halt nochmal einen parameter geben mitten in der laufzeit.

geht das überhaupt ?

gruß

|ReDBullet|

Parameter? Von wo? Eintrag aus einer INI-Datei? Benutzereingabe? Daten aus einem anderen Programm?

Wenn du etwas an das Programm übergeben möchtest, während es läuft, ist das ja kein Parameter mehr. Das heisst dann anders. Da ich allerdings nicht weiß, was du meinst, kann ich dir nicht sagen, wie es heisst. Beschreib mal genau, was du z.B. übergeben möchtest und an welcher Stelle.

Du sagtest was von einem Registry Key, den du alle paar Sekunden ausliest. Meinst du vielleicht eine globale Variable, die man von überall aus aufrufen kann?

ja globale variable klingt net schlecht

also noch genauer:

ich bau an nem mp3 player und der soll wenn ich nochmal auf ne mp3-file click diese file adden (sodass das lied was vorher drin war auch drin bleibt).

da das prog neu gestartet wird wenn ich auf ne mp3-file click hab ich in die main sub (die auch als erstes im programm gestartet wird) ne abfrage reingemacht ob der player schon läuft wenn das prog schon läuft schreibt er das lied das er per command bekommen hat in die reg als key und das programm das schon läuft liest wie gesagt immer wieder die reg und wenn was neues drin steht added er das und das wollte ich halt irgendwie umgehen.

k?

gruß

|ReDBullet|

Ok, die Registry kannst Du mir einem Eintrag in einer INI-Datei umgehen. Ansonsten musst Du für Deinen MP3Player nur eine Instanz zulassen.

mh naja eigentlich lass ich ja nur eine instanz zu mit:

Option Explicit

Sub Main()

Dim MemTitle$

If App.PrevInstance = True Then

End

Else

Form1.Show

End If

End Sub

und ne ini-file müsste ich ja auch immer wieder lesen und ich glaub das das noch mehr zu lasten der performance wäre :(

Da ich zu VB selbst nicht viel sagen kann wollt ich hier anderen den Vortritt lassen, aber wenn keiner will ;)

Jede Exe läuft in einem eigenen Prozess, diese Prozesse haben je einen zugeteilten Speicherbereich, auf den nur sie zugreifen können. Das ist eine Schutzvorrichtung um z.B. nicht einfach irgendwelche Passwörter o.ä. aus einem anderen Programm klauen zu können (das geht zwar trotzdem wenn man will, aber nicht so einfach). Auch wird damit verhindert, das ein Programm aus versehen die Daten eines anderen überschreibt und es zu einem Absturz oder Datenverölust o.ä. kommen kann.

Es ist also nicht möglich, in den Bereich eines anderen Programms zu schreiben.

Soweit erstmal zur theorie. Aber natürlich kennst du aber ähnliches von anderen Programmen. Und es gilt: Wenn andere Programme es können kannst du es (theoretisch) auch.

Ich hab nur eine kurze Erklärung zur Vorgehensweise. Das Beispiel dazu bzw. der Code ist aber nciht für VB deswegen spar ich mir das hier. Es sollte zumindest mal ein Hinweis sein, wonach du suchen musst.

Mit der Windows-Nachricht WM_COPYDATA ist es unter 32 Bit-Windows möglich,

Daten verschiedenster Natur zwischen unterschiedlichen Prozessen auszutauschen.

Eine Windows-interne Funktionalität ermöglicht bei Verwendung von WM_COPYDATA die Nutzung

eines gemeinsamen Speicherbereichs über eine Datenstruktur COPYDATASTRUCT,

die wie folgt aussieht:

}

type

TCopyDataStruct = packed record

dwData: DWORD; // anwendungsspezifischer Wert

cbData: DWORD; // Byte-Länge der zu übertragenden Daten

lpData: Pointer; // Adresse der Daten

end;

{

Dabei geschieht der Datenaustausch auf folgende Weise

(Zitat aus J. Richter, "Windows Programmierung für Experten",

Microsoft Press 1997, S. 524):

"Beim Senden einer Meldung des Typs WM_COPYDATA reserviert die Funktion SendMessage

einen Speicherbereich der angegebenen Größe (cbData Bytes) und kopiert die Daten

vom Adreßraum ihres Prozesses in eben diesen Speicherbereich. Danach sendet SendMessage

die Meldung an das ausgewählte Fenster. Wenn schließlich die empfangende Fensterprozedur

mit der Bearbeitung der Meldung beginnt, verweist der Parameter lParam auf eine

COPYDATASTRUCT-Struktur im Adreßraum des empfangenden Prozesses.

Die lpData-Komponente der Struktur verweist auf den gemeinsamen

Speicherbereich, dessen Adresse jedoch an den Adreßraum des

empfangenden Prozesses angepaßt worden ist.

ok danke ich werd mal sehn ob sich das in VB irgendwie machen lässt

danke für den tipp ;)

gruß

|ReDBullet|

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.