2012-10-19 37 views
4

我想將一個消息從Windows服務傳遞到已經運行的Windows桌面應用程序。我已經在windows服務上實現了一個定時器。在一段時間之後,服務會向Windows應用程序發送消息。如何使用c#將消息從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桌面應用程序進程無法收到消息。你能幫我嗎?

+0

你看過管道或回送套接字連接嗎? –

回答

2

我懷疑這是因爲兩個進程在不同的用戶帳戶下運行。

我認爲你需要使用更改消息過濾功能,以允許收到了,在這裏看到:

ChangeWindowMessageFilterEx function

+0

感謝'賈斯汀赫維'您的迴應。這兩個進程都在同一個用戶帳戶上運行。 –

3

服務和桌面應用程序正在運行兩個不同的窗口站。出於安全原因,在獨立窗口站中運行的應用程序之間發送窗口消息是不可能的。

爲了在服務和桌面應用程序之間進行通信,您必須使用某種進程間通信方法(很好的可能性是套接字,命名管道,DCOM等)或某些運行在這些進程之上的框架如Remoting或WCF。

相關問題