如何使用c#将消息从Windows服务传递到Windows桌面应用程序?
我想将一条消息从Windows服务传递到已经运行的Windows桌面应用程序。 我在Windows服务上实现了一个计时器。 在一段时间之后,服务向Windows应用程序发送消息。
服务或发件人代码如下:
System.Diagnostics.Process[] lProcs = System.Diagnostics.Process.GetProcessesByName("TestProcess2"); if (lProcs.Length > 0) { IntPtr handle = lProcs[0].MainWindowHandle; if (handle != IntPtr.Zero) SendMessage(handle, 232, IntPtr.Zero, IntPtr.Zero); }
和windows桌面应用程序(接收器)代码如下:
protected override void WndProc(ref Message m) { if (m.Msg == 232) { MessageBox.Show("Received"); } else { base.WndProc(ref m); } }
当两个进程都是windows桌面应用程序时,上面的代码工作正常。 当我使用Windows服务作为发件人时,Windows桌面应用程序进程无法接收消息。 你能帮我吗?
服务和桌面应用程序在两个不同的Window Station中运行。 出于安全原因,无法在单独的Window Station中运行的应用程序之间发送窗口消息。
为了在服务和桌面应用程序之间进行通信,您必须使用某种进程间通信方法(良好的可能性是套接字,命名管道,DCOM等)或在其中一个上运行的某些框架,例如远程处理或者WCF。
我怀疑这是因为这两个进程在不同的用户帐户下运行。
我认为您需要使用更改消息filterfunction来允许它被接收,请参见此处:
ChangeWindowMessageFilterEx函数
一种方法是在服务中托管WCF接口。 然后,这允许(可能)任何应用程序和服务之间的通信。
查看这些链接以获取详细示例:
https://www.codeproject.com/Articles/38160/WCF-Service-Library-with-Windows-Service-Hosting https://msdn.microsoft.com/en-us/library/ms733069.aspx
上述就是C#学习教程:如何使用c#将消息从Windows服务传递到Windows桌面应用程序?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/954366.html