画像ファイル
画像ファイル プロセス間通信(SendMessage)
Page1 Page2
SendMessageによるプロセス間通信(送信側)

C#のコード
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace sendmessagec
{
public partial class FomSendMessage : Form
{
[DllImport("User32.dll", EntryPoint = "FindWindow")]
public static extern Int32 FindWindow(String lpClassName, String lpWindowName);

[DllImport("User32.dll", EntryPoint = "SendMessage")]
public static extern Int32 SendMessage(Int32 hWnd, Int32 Msg, Int32 wParam, ref COPYDATASTRUCT lParam);

[DllImport("User32.dll", EntryPoint = "SendMessage")]
public static extern Int32 SendMessage(Int32 hWnd, Int32 Msg, Int32 wParam, Int32 lParam);

public const Int32 WM_COPYDATA = 0x4A;
public const Int32 WM_USER = 0x400;

//COPYDATASTRUCT構造体
public struct COPYDATASTRUCT
{
public Int32 dwData; //送信する32ビット値
public Int32 cbData;    //lpDataのバイト数
public string lpData;   //送信するデータへのポインタ(0も可能)
}

public FomSendMessage()
{
InitializeComponent();
}

//送信ボタン押下
private void butSend_Click(object sender, EventArgs e)
{
Int32 result = 0;

//相手のウィンドウハンドルを取得します
Int32 hWnd = FindWindow(null, txtName.Text);
if (hWnd == 0)
{
//ハンドルが取得できなかった
MessageBox.Show("相手Windowのハンドルが取得できません");
return;
}

//文字列メッセージを送信します
if (txtMessage.Text != string.Empty)
{
//送信データをByte配列に格納
byte[] bytearry = System.Text.Encoding.Default.GetBytes(txtMessage.Text);
Int32 len = bytearry.Length;
COPYDATASTRUCT cds;
cds.dwData = 0;        //使用しない
cds.lpData = txtMessage.Text; //テキストのポインターをセット
cds.cbData = len + 1;     //長さをセット
//文字列を送る
result = SendMessage(hWnd, WM_COPYDATA, 0, ref cds);
}

//数値メッセージを送信します
if (txtInt1.Text != string.Empty && txtInt2.Text != string.Empty)
{
Int32 int1 = 0;
Int32 int2 = 0;
try
{
//数値に正しく変換出来るか?
int1 = int.Parse(txtInt1.Text);
int2 = int.Parse(txtInt2.Text);
}
catch
{
MessageBox.Show("入力された数値が正しく有りません");
return;
}
//数値を送る
result = SendMessage(hWnd, WM_USER, int1, int2);
}
}
}
}
画像ファイル