programmübergreifender Informationsaustausch



  • hi

    Wie kann ich es realisieren das zwischen verschiedenen Programmen kurze Nachrichten ausgetauscht werden.
    Ein "Oberprogramm" startet bei mir ein kleines Aufnahmeprogramm ohne große eigene Fehlerbehandlung und ohne Eingabemöglichkeit. Dieses kleine Programm soll nun solche nachrichten wie start, stop, pause erhalten und z.b Statusmeldungen auf anfrage zurückschicken.

    Wie kann ich das elegant realisieren?

    Sowas wie: in Datei speichern und alle 5 sekunden öffnen und schaun ob ne neue Nachricht da steht will ich nicht. Das dauert zu lange.

    danke
    Till



  • Über Windows Nachrichten 😉

    Mit SendMessage



  • Daran hab ich natürlich als erstes gedacht... (obwohl PostMessage doch sinnvoller ist, oder?)

    Aber Send(Post)Message bekommt doch nur ein WindowHandle das in meinem Programm erstmal nicht kenne ... Wie kann ich es denn hinbekommen das die Programme das jeweils andere WindowHandle kennen?

    Und z.b beim Status müsste ich mehr daten als zwei Parameter übergeben. ALso vielleicht einen Zeiger auf ein struct. Aber erstens würde der struct doch dann in einem geschützen Speicherbereich liegen auf den das andere Programm nicht zugreifen darf und zweitens ist das andere Programm in VB geschrieben und das mit dem Zeiger wär bestimmt ein Problem.

    Lösungsvorschläge?



  • WM_COPYDATA funktioniert Prozessübergreifend.

    Um an Windows-Handles (HWND) zu kommen gibt es viele Möglichkeiten...

    FindWindow
    EnumWindows
    GetWindow
    ...



  • ok... der weg ist klar.

    Nur bekomm ich am Anfang gleich ein Problem.
    Wenn ich mit

    static UINT SD_AUDIOSTART = RegisterWindowMessage(TEXT("SD_AUDIOSTART"));
    

    eine Nachricht registriere kann ich SD_AUDIOSTART nicht in meiner WndProc Funktion benutzen. SD_AUDIOSTART ist jetzt ja eine variable und kann in der switch anweisung in meiner WindowProcedure nicht verwendet werden.
    Hat irgendwer einen Vorschlag? Ich wollte allerdings nicht den dreckigen weg der if Anweisung am ende der WindowProcedure gehen.



  • Evtl. geht's auch einfach über WM_APP+x 🙂



  • @flendidelidüders 😉
    Die VB anwendung ist was ziemlich grosses und benutzt auch selbst definierte Nachrichten. Da will ich nicht mit kollodieren.

    Wenns nicht anders geht wird wohl auf WM_APP+n hinauslaufen.
    (Bei mir in der Win32 Programmers Reference steht allerdings WM_USER anstatt WM_APP.. Unterschiede?)



  • Till schrieb:

    Hat irgendwer einen Vorschlag? Ich wollte allerdings nicht den dreckigen weg der if Anweisung am ende der WindowProcedure gehen.

    if wirst du wohl benutzen müssen, wenn switch nicht geht. 😉



  • WM_USER - Integer messages for use by private window classes
    WM_APP - Messages available for use by applications


Anmelden zum Antworten