2016-04-30 12 views
1

Ich habe 2 Anwendung. Eine davon ist eine WPF App und eine andere ist sys tray app. Die erste sollte auf ein anderes passieren irgendwie seine Fensterzeiger IntPtrWie IntPtr zwischen Prozess/Anwendungen übergeben werden

IntPtr thisWindowHandle = (new WindowInteropHelper(this)).Handle; 

Und der zweite sollte es den aktiven Bildschirm von WPF-Anwendung akzeptieren und erfassen.

Screen activeScreen = Screen.FromHandle(thisWindowHandle); 

Meine Frage ist, wie wir IntPtr zwischen diesen Anwendungen senden können und ist es möglich, überhaupt zu tun?

Vielen Dank!

Antwort

1

Es ist möglich, Fenstergriffe zwischen Prozessen auszutauschen, die in derselben Sitzung auf demselben Desktop ausgeführt werden. Es würde nicht funktionieren, wenn deine App beispielsweise ein Dienst ist.

Sie müssen die standardmäßigen .NET-Prozess-Interop-Mechanismen verwenden, um das Handle wie WCF, einen Socket, eine Named Pipe, eine Datei oder ein Befehlszeilenargument zu übergeben. Vielleicht ist alles, was Sie brauchen, Process.MainWindowHandle, so dass Sie überhaupt nichts weitergeben müssen, das ist natürlich am einfachsten.

Behalten Sie die Fehlermodi im Hinterkopf, ein Szenario, in dem Ihre WPF-App abstürzt und Ihre "Tray-App" weiterhin ausgeführt wird, funktioniert selten. Das Anzeigen eines Symbols im Infobereich erfordert andernfalls keinen separaten Prozess.

0

Sie können Microsoft Message Queuing für diesen Zweck verwenden.

Eine andere Möglichkeit ist, Ihr Fenster nach seinem Titel zu finden, ohne ein IntPtr an es zu übergeben, wie erwähnt here.

Verwandte Themen