发送端:
static void Main(string[] args)
{
while(true)
{
String strInput = Console.ReadLine();
if (strInput == "q")
break;
int hPdf = IPCTool.FindWindow(null, @"pdfWatermark0");
if (hPdf != 0)
{
IPCTool.COPYDATASTRUCT cds;
cds.dwData = (IntPtr)256;
cds.lpData = "hello cSharpTestConsole";
cds.cbData = 256;
IPCTool.SendMessage(hPdf, 0x004A, 0, ref cds);
}
}
}
接收端:
// override window proc
protected override void DefWndProc(ref Message m)
{
switch(m.Msg)
{
case 0x004A:
{
IPCTool.COPYDATASTRUCT cdata = new IPCTool.COPYDATASTRUCT();
//cdata = (IPCTool.COPYDATASTRUCT)Marshal.PtrToStructure(m.LParam, typeof(IPCTool.COPYDATASTRUCT));
cdata = (IPCTool.COPYDATASTRUCT)m.GetLParam(cdata.GetType());
// MessageBox.Show(cdata.lpData);
break;
}
default:
base.DefWndProc(ref m);
break;
}
}
结构定义:
public class IPCTool
{
public struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
[MarshalAs(UnmanagedType.LPStr)]
public string lpData;
}
[DllImport("User32.dll", EntryPoint = "SendMessage")]
public static extern int SendMessage(
int hWnd, //目标窗口的handle
int Msg, // 消息
int wParam, // 第一个消息参数
ref COPYDATASTRUCT lParam // 第二个消息参数
);
[DllImport("User32.dll", EntryPoint = "FindWindow")]
public static extern int FindWindow(string lpClassName, string
lpWindowName);
const int WM_COPYDATA = 0x004A;
}