如何在 process/apps 之间传递 IntPtr
How to pass IntPtr between process/apps
我有2份申请。
其中一个是 WPF 应用程序,另一个是系统托盘应用程序。
第一个应该以某种方式将他的 window 指针 IntPtr
传递给另一个
IntPtr thisWindowHandle = (new WindowInteropHelper(this)).Handle;
第二个应该接受它并检测 WPF 应用程序的活动屏幕。
Screen activeScreen = Screen.FromHandle(thisWindowHandle);
我的问题是我们如何在这些应用程序之间发送 IntPtr
并且是否可以这样做?
谢谢!
您可以使用 Microsoft Message Queuing 来达到这个目的。
另一种方法是,您可以通过标题找到您的 window,而无需像 here.
那样将 IntPtr 传递给它
有可能,window 句柄可以在同一桌面上同一会话中 运行 的进程之间交换。如果您的应用程序是一项服务,它就不会工作。
您需要使用标准的 .NET 进程互操作机制来传递句柄,例如 WCF、套接字、命名管道、文件或命令行参数。也许您只需要 Process.MainWindowHandle,这样您根本不需要传递任何东西,这当然是最简单的。
请记住故障模式,您的 WPF 应用程序崩溃并且您的 "tray app" 继续 运行 的情况很少会很好。在通知区域显示图标不需要单独的过程。
我有2份申请。
其中一个是 WPF 应用程序,另一个是系统托盘应用程序。
第一个应该以某种方式将他的 window 指针 IntPtr
IntPtr thisWindowHandle = (new WindowInteropHelper(this)).Handle;
第二个应该接受它并检测 WPF 应用程序的活动屏幕。
Screen activeScreen = Screen.FromHandle(thisWindowHandle);
我的问题是我们如何在这些应用程序之间发送 IntPtr
并且是否可以这样做?
谢谢!
您可以使用 Microsoft Message Queuing 来达到这个目的。
另一种方法是,您可以通过标题找到您的 window,而无需像 here.
那样将 IntPtr 传递给它有可能,window 句柄可以在同一桌面上同一会话中 运行 的进程之间交换。如果您的应用程序是一项服务,它就不会工作。
您需要使用标准的 .NET 进程互操作机制来传递句柄,例如 WCF、套接字、命名管道、文件或命令行参数。也许您只需要 Process.MainWindowHandle,这样您根本不需要传递任何东西,这当然是最简单的。
请记住故障模式,您的 WPF 应用程序崩溃并且您的 "tray app" 继续 运行 的情况很少会很好。在通知区域显示图标不需要单独的过程。