想要從一個程式傳送消息到另一個程式可以使用下面兩個Win32 API
1. SendMessage( ):用來傳遞消息代號
2. FindWindows( ):用來找出目標視窗的Handler
下面例子為由Client端發送訊息至Server端
Client端程式
using System.Runtime.InteropServices;
public class Client
{
[DllImport("User32.dll", EntryPoint = "FindWindow")]
private static extern int FindWindows(string lpClassName, string lpWindowName);
[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(int hWnd, int Msg, int wParam, int lParam);
public Cliect()
{
//傳送代號為1982,且帶兩個參數為8與1的訊息到另一支程式
SendMsgToServer(1982, 8, 1);
}
//傳送訊息至Server端
public void SendMsgToServer(int msgCode, int wp, int lp)
{
//先取得另一支程式的視窗Handler,
//這裡使用視窗標題名稱 "Form1" 來尋找
int windowHandler = FindWindows(null, @"Form1");
if (windowHandler > 0)
{
//傳送訊息
int hr = SendMessage(windowHandler, msgCode, wp, lp);
}
}
}
Server端程式 (主要為覆寫 DefWndProc 事件處理函式)
publc class Server
{
protected override void DefWndProc(ref Message m)
{
if (m.Msg == 1982)
{
MessageBox.Show(string.Format( "My birthday is {0}-{1}-{2}", m.Msg, m.WParam, m.LParam));
}
else
base.DefWndProc(ref m);
}
}
PS1. 如果電腦中同時有數個相同標題名稱的視窗,只有最上層的視窗收的到訊號,也就是說FindWindows( )只會回傳最上層視窗的Handler。
PS2.無法發送訊號時,請檢查msgCode是否太小。
沒有留言:
張貼留言