如何使用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桌面应用程序进程无法接收消息。你能帮我吗?

服务和桌面应用程序正在两个不同的窗口站运行。出于安全原因,不可能在在单独的窗口台上运行的应用程序之间发送窗口消息。

为了在服务和桌面应用程序之间进行通信,您必须使用某种类型的过程间通信方法(良好的可能性是插座,名为Pipes,dcom等)或在其中一个顶部运行的某个框架,例如远程或WCF。

我怀疑这是因为两个过程在不同的用户帐户下运行。

我认为您需要使用更改消息过滤函数允许接收它,请参阅此处:

ChangeWindowMessageFilterex函数

做到这一点的一种方法是在您的服务中托管WCF接口。然后,这允许(潜在的)任何应用程序和服务之间进行通信。

查看这些链接以获取详细示例:

http://www.codeproject.com/articles/38160/wcf-service-library-with-withwish-windows-service-nostinghttp://msdn.microsoft.com/en-us/library/ms733069.aspx

相关内容

  • 没有找到相关文章

最新更新