-roTekuGeL- Geschrieben 16. Dezember 2002 Geschrieben 16. Dezember 2002 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| Zitieren
Gast Geschrieben 18. Dezember 2002 Geschrieben 18. Dezember 2002 Ähm, wie meinst Du das? Soll es beim Aufruf geschehen? Z.B. "programm.exe /parameter1 /parameter2" Bitte schilder mal das Problem genauer. Zitieren
-roTekuGeL- Geschrieben 18. Dezember 2002 Autor Geschrieben 18. Dezember 2002 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| Zitieren
Gast Geschrieben 18. Dezember 2002 Geschrieben 18. Dezember 2002 Parameter? Von wo? Eintrag aus einer INI-Datei? Benutzereingabe? Daten aus einem anderen Programm? Zitieren
Gast King555 Geschrieben 18. Dezember 2002 Geschrieben 18. Dezember 2002 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? Zitieren
-roTekuGeL- Geschrieben 18. Dezember 2002 Autor Geschrieben 18. Dezember 2002 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| Zitieren
Gast Geschrieben 18. Dezember 2002 Geschrieben 18. Dezember 2002 Ok, die Registry kannst Du mir einem Eintrag in einer INI-Datei umgehen. Ansonsten musst Du für Deinen MP3Player nur eine Instanz zulassen. Zitieren
-roTekuGeL- Geschrieben 18. Dezember 2002 Autor Geschrieben 18. Dezember 2002 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 Zitieren
geloescht_JesterDay Geschrieben 18. Dezember 2002 Geschrieben 18. Dezember 2002 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. Zitieren
-roTekuGeL- Geschrieben 18. Dezember 2002 Autor Geschrieben 18. Dezember 2002 ok danke ich werd mal sehn ob sich das in VB irgendwie machen lässt danke für den tipp gruß |ReDBullet| Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.