Programmübergreifend arbeiten



  • Hallo zusammen.

    Ich habe hier eine Anwendung, die mir die RS 232 ausliest. Funktioniert auch alles wunderbar.

    Jetzt sollen aber diese Daten an ein anderes Programm zur "Auswertung" weitergesendet werden.

    Das funktioniert auch soweit. Problem dabei ist, dass ich bis jetzt mit FindWindow(x,y); arbeite.

    Jetzt wäre es für den Anwender natürlich ziemlich blöd, wenn ich ihm in meinem Hauptporgramm den Titel des Fenster, auf das die Daten gesendet werden sollen, eingeben lassen würde.

    Es könnte ja durchaus sein, dass der Dateiname aus x zahlen besteht, wobei die Fehleranfälligkeit den Namen einzutippen natürlich sehr hoch ist.

    Da kam mir dann die Idee mit den Fensterklassen. Das ging dann aber auch wieder nicht, weil er ja durchaus mal den Editor und dann vielleicht mal Word oder Excel aufrufen könnte um seine Daten zu bearbeiten.

    Dann kam mir die Idee, dass ich vielleicht in meinem Hauptprogramm eine ShellExecute mache, die dann das Programm aufruft, das er gerne möchte. Davon würde ich mir dann die ID holen und sobald er das Dokument geöffnet hat, den Windowstitel.

    Ist natürlich alles bedingt viel arbeit. Desshalb wollte ich mal fragen, ob von euch vielleicht noch jemand eine andere Idee hat.

    Außerdem wüsste ich jetzt auch grad net, wie ich mir eine ID von einem gerade geöffneten Fenster hole...

    Danke für eure Hilfe



  • Hi,

    wenn Du Daten Prozessübergreifend austauschen möchtest, gibt es mehrere
    Möglichkeiten, um das zu machen.

    1. Du könntest mit RegisterWindow einen eindeutigen Namen für das Mainframe
    der Clientanwendung (z.B. eine GUID) vergeben.
    Dann kannst Du per FindWindow deine Clientanwendung finden.

    2. Du registriest Dir eine eigene Nachricht (z.B auch mit einer GUID) und sendest
    die Nachricht dann mit SendMessageTimeout an jedes Toplevel-Window.

    Wenn Du keine Antwort auf die Nachricht bzw. FindWindow bekommst, startest Du
    den Client mit ShellExecute, und läufst die Routine nocheinmal durch.

    Die Daten serialisierst Du z.B in ein File oder einen Shared-Memory-Bereich,
    welche dann von der Clientanwendung wieder ausgelesen werden.

    Gruß
    Frank


Anmelden zum Antworten