青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

旅途

如果想飛得高,就該把地平線忘掉

在C#中用WM_COPYDATA消息來實現進程間通信

進程之間通訊的幾種方法:
在Windows程序中,各個進程之間常常需要交換數據,進行數據通訊。常用的方法有
使用內存映射文件
通過共享內存DLL共享內存
使用SendMessage向另一進程發送WM_COPYDATA消息
比起前兩種的復雜實現來,WM_COPYDATA消息無疑是一種經濟實惠的一中方法.(ZT)

WM_COPYDATA消息的主要目的是允許在進程間傳遞只讀數據。Windows在通過WM_COPYDATA消息傳遞期間,不提供繼承同步方式。SDK文檔推薦用戶使用SendMessage函數,接受方在數據拷貝完成前不返回,這樣發送方就不可能刪除和修改數據:
這個函數的原型及其要用到的結構如下:
SendMessage(hwnd,WM_COPYDATA,wParam,lParam);
其中,WM_COPYDATA對應的十六進制數為0x004A
wParam設置為包含數據的窗口的句柄。lParam指向一個COPYDATASTRUCT的結構:
typedef struct tagCOPYDATASTRUCT{
DWORD dwData;//用戶定義數據
DWORD cbData;//數據大小
PVOID lpData;//指向數據的指針
}COPYDATASTRUCT;
該結構用來定義用戶數據。
具體過程如下:

首先,在發送方,用FindWindow找到接受方的句柄,然后向接受方發送WM_COPYDATA消息.
接受方在DefWndProc事件中,來處理這條消息.由于中文編碼是兩個字節,所以傳遞中文時候字節長度要搞清楚.
體代碼如下:
//---------------------------------------------------
//發送方:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Runtime.InteropServices;
namespace WinFormSendMsg
{
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.Button button1;
private System.ComponentModel.Container components = null;
const int WM_COPYDATA = 0x004A;
public Form1()
{
InitializeComponent();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

private void InitializeComponent()
{
this.textBox1 = new System.Windows.Forms.TextBox();
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(184, 24);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(128, 21);
this.textBox1.TabIndex = 0;
this.textBox1.Text = "textBox1";
//
// button1
//
this.button1.Location = new System.Drawing.Point(344, 16);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(112, 32);
this.button1.TabIndex = 1;
this.button1.Text = "button1";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(536, 142);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.button1,
this.textBox1});
this.Name = "Form1";
this.Text = "發送方窗體";
this.ResumeLayout(false);
}
static void Main()
{
Application.Run(new Form1());
}
[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 button1_Click(object sender, System.EventArgs e)
{
int WINDOW_HANDLER = FindWindow(null,@"接收方窗體");
if(WINDOW_HANDLER == 0)
{
}
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, WM_COPYDATA, 0, ref cds);

}
}
}
public struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
[MarshalAs(UnmanagedType.LPStr)] public string lpData;
}

}

//---------------------------------------------------
//接受方
//---------------------------------------------------
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Runtime.InteropServices;
namespace WindowsFormGetMsg
{
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.TextBox textBox1;
private System.ComponentModel.Container components = null;
const int WM_COPYDATA = 0x004A;
public Form1()
{
InitializeComponent();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
private void InitializeComponent()
{
this.textBox1 = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(176, 32);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(160, 21);
this.textBox1.TabIndex = 0;
this.textBox1.Text = "textBox1";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(432, 266);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.textBox1});
this.Name = "Form1";
this.Text = "接收方窗體";
this.ResumeLayout(false);
}
static void Main()
{
Application.Run(new Form1());
}
protected override void DefWndProc(ref System.Windows.Forms.Message m)
{
switch(m.Msg)
{
case WM_COPYDATA:
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;
}
}
}
public struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
[MarshalAs(UnmanagedType.LPStr)] public string lpData;
}
}



posted on 2007-07-25 00:30 旅途 閱讀(2234) 評論(0)  編輯 收藏 引用 所屬分類: 深入windows

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久噜噜噜久久中文字幕色伊伊 | 亚洲国产清纯| 毛片基地黄久久久久久天堂| 久久青草久久| 夜夜嗨av一区二区三区中文字幕 | 在线观看亚洲精品视频| 欧美岛国在线观看| 欧美性色综合| 麻豆国产精品一区二区三区| 欧美风情在线| 欧美制服丝袜第一页| 久久米奇亚洲| 亚洲性视频h| 久久久久一区二区| 亚洲一区二区三区激情| 久久精品人人| 亚洲一区二区三区精品动漫| 欧美伊人久久大香线蕉综合69| 亚洲第一综合天堂另类专| 一区二区日韩精品| 怡红院精品视频在线观看极品| 亚洲精品国产视频| 国产亚洲美州欧州综合国| 亚洲大片精品永久免费| 国产精品一级| 亚洲日韩第九十九页| 国产原创一区二区| 一本一本久久a久久精品牛牛影视| 国内综合精品午夜久久资源| 99精品国产在热久久| 一区二区三区在线观看视频 | 亚洲第一网站| 黄色国产精品一区二区三区| 在线视频欧美日韩| 亚洲三级影片| 久久亚洲影院| 久久综合色88| 国产欧美三级| 亚洲视频网在线直播| 日韩系列在线| 欧美成人精品三级在线观看| 久久久欧美精品| 国产日韩欧美黄色| 亚洲一区二区视频| 亚洲影视九九影院在线观看| 欧美成人午夜激情视频| 欧美69视频| 亚洲第一主播视频| 久久色在线播放| 噜噜噜91成人网| 狠狠噜噜久久| 久久精品久久综合| 免播放器亚洲| 亚洲国产精品久久精品怡红院| 久久激情五月激情| 久久久www成人免费无遮挡大片| 国产精品综合网站| 亚洲欧美一区二区原创| 欧美在线地址| 国内精品美女av在线播放| 欧美一区=区| 久久综合免费视频影院| 亚洲大片一区二区三区| 欧美.www| 99国产成+人+综合+亚洲欧美| 正在播放日韩| 国产精品视频一二| 欧美在线高清视频| 欧美成人一区二区三区| 亚洲人午夜精品| 欧美日韩中文字幕| 亚洲欧美网站| 欧美成人第一页| 999在线观看精品免费不卡网站| 欧美日韩爆操| 亚洲欧美日韩国产成人精品影院| 久久精品综合一区| 亚洲国产精品久久久久| 欧美极品一区| 亚洲欧美日韩国产成人精品影院| 久久资源av| 日韩一区二区免费高清| 国产精品羞羞答答| 免费久久精品视频| 在线视频精品一区| 久久尤物电影视频在线观看| 亚洲黄色小视频| 国产精品第13页| 久久久久久久网站| 一本大道久久精品懂色aⅴ| 久久精品国产69国产精品亚洲| 亚洲国产裸拍裸体视频在线观看乱了| 欧美日韩精品免费观看视频| 午夜精品久久99蜜桃的功能介绍| 美女精品网站| 亚洲在线免费| 亚洲黄色一区| 国产亚洲女人久久久久毛片| 欧美h视频在线| 欧美一区二区三区的| 亚洲精品美女免费| 久久综合一区二区三区| 亚洲一区免费在线观看| 亚洲高清免费视频| 国产女同一区二区| 欧美日韩亚洲综合| 久久综合中文字幕| 新67194成人永久网站| 99re热这里只有精品视频| 久久综合中文字幕| 久久av二区| 午夜精品久久久久久| 亚洲最新视频在线| 亚洲国产精品一区二区第一页| 国产精品少妇自拍| 欧美日韩一区二区三区视频| 免费观看日韩| 久久中文在线| 久久久精品日韩欧美| 欧美一区二区三区另类| 亚洲天堂免费在线观看视频| 亚洲精选在线观看| 亚洲黄色天堂| 亚洲狠狠丁香婷婷综合久久久| 可以看av的网站久久看| 久久精品国产亚洲aⅴ| 羞羞视频在线观看欧美| 亚洲欧美日本精品| 亚洲免费视频观看| 亚洲自拍三区| 亚洲欧美视频在线观看| 亚洲一级免费视频| 一区二区三区 在线观看视频| 亚洲乱码视频| 亚洲作爱视频| 亚洲午夜91| 午夜激情久久久| 香蕉精品999视频一区二区| 亚洲在线一区二区三区| 亚洲永久免费视频| 欧美在线综合| 麻豆久久婷婷| 亚洲高清毛片| 日韩午夜视频在线观看| 一本久久综合| 亚洲欧美一区二区视频| 久久精品国产免费| 女生裸体视频一区二区三区| 欧美高清视频| 国产精品久久久久9999吃药| 国产精品视频精品| 狠狠操狠狠色综合网| 亚洲国产欧美一区| 一区二区高清视频| 欧美一区二区女人| 免费久久99精品国产自在现线| 亚洲成色www8888| 日韩视频在线观看一区二区| 亚洲一区精品电影| 久久先锋影音| 欧美午夜精彩| 伊大人香蕉综合8在线视| 亚洲区一区二| 亚欧美中日韩视频| 欧美激情第10页| 亚洲一二区在线| 久久精品一区二区三区中文字幕| 免费日韩成人| 国产精品永久在线| 亚洲国产精品第一区二区| 亚洲综合精品四区| 美女主播视频一区| 亚洲天堂男人| 欧美a级片一区| 国产农村妇女毛片精品久久麻豆| 亚洲国产精品高清久久久| 亚洲一区二区三区在线视频| 美女精品自拍一二三四| 亚洲视频播放| 免费观看亚洲视频大全| 国产日韩在线看| 亚洲视频欧美视频| 欧美成人中文字幕| 亚洲欧美在线aaa| 欧美日韩亚洲三区| 亚洲国产一区二区a毛片| 午夜精品久久久久影视| 亚洲欧洲视频| 久久综合色天天久久综合图片| 国产精品久久久久毛片大屁完整版| 亚洲国产精品久久久久婷婷老年 | 一区二区三区国产在线| 久久亚洲精品网站| 午夜视频一区在线观看| 国产精品草草| 国产精品99久久不卡二区| 亚洲高清av在线| 葵司免费一区二区三区四区五区| 国产一区二区福利| 欧美一级欧美一级在线播放|