您的位置:首页 > 其它

利用SendMessage 发送消息到当前机子的另一个程序

2010-11-24 15:12 316 查看
C# code

//
发送端

public

partial

class
Form1 : Form

{

private
IntPtr ip = IntPtr.Zero;

const

int
WM_COPYDATA =
0x004A
;

public
Form1()

{

InitializeComponent();

}

[DllImport(
"User32.dll"
, EntryPoint =
"SendMessage"
)]

private

static

extern

int
SendMessage(

int
hWnd,

//
handle

to
destination
window

int
Msg,

//
message

int
wParam,

//
first

message
parameter

ref

COPYDATASTRUCT
lParam

//
second
message

parameter

);

[DllImport(
"User32.dll"
, EntryPoint =
"FindWindow"
)]

private

static

extern

int
FindWindow(
string

lpClassName,
string

lpWindowName);

private

void
Form1_Load(
object
sender, EventArgs e)

{

}

private

void
button1_Click(
object
sender, System.EventArgs e)

{

int
WINDOW_HANDLER = FindWindow(
null
,
"YYDuanXinForm"
);

if
(WINDOW_HANDLER ==
0
)

{

MessageBox.Show(
"
程序未启动。"

);

}

else

{

byte
[]
sarr = System.Text.Encoding.Default.GetBytes(
this
.textBox1.Text);

int
len
= sarr.Length;

COPYDATASTRUCT cds;

cds.dwData = (IntPtr)
100
;

cds.lpData =
this
.textBox1.Text;

cds.cbData = len +
1
;

SendMessage(WINDOW_HANDLER,
0x004A
,
0
,
ref

cds);

}

}

}

public

struct
COPYDATASTRUCT

{

public
IntPtr dwData;

public

int
cbData;

[MarshalAs(UnmanagedType.LPStr)]

public

string
lpData;

}

C# code

//
接收端 主要部分代码

const

int
WM_COPYDATA =
0x004A
;

protected

override

void
DefWndProc(
ref

System.Windows.Forms.Message m)

{

switch
(m.Msg)

{

case

0x004A
:
//
处理消息

COPYDATASTRUCT mystr =
new
COPYDATASTRUCT();

Type mytype = mystr.GetType();

mystr =
(COPYDATASTRUCT)m.GetLParam(mytype);

this
.textBox1.Text
= mystr.lpData;

break
;

default
:

base
.DefWndProc(
ref

m);
//
调用基类函数处理非自定义消息。

break
;

}

}

[StructLayout(LayoutKind.Sequential)]

public

struct
COPYDATASTRUCT

{

public
IntPtr dwData;

public

int
cbData;

[MarshalAs(UnmanagedType.LPStr)]

public

string
lpData;

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: