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

旅途

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

在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 旅途 閱讀(2240) 評論(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免费高清 | 国产精品美女一区二区在线观看| 亚洲一级在线观看| 午夜精品久久久久久久99水蜜桃| 国产主播精品在线| 欧美激情亚洲综合一区| 欧美日韩精品福利| 欧美一区二区三区四区夜夜大片| 性欧美video另类hd性玩具| 一区二区视频免费在线观看 | 亚洲欧美综合v| 亚洲欧美一区二区精品久久久| 国产欧美日韩另类视频免费观看| 牛牛国产精品| 欧美日韩免费在线观看| 欧美一区二区视频观看视频| 久久网站免费| 午夜激情综合网| 久久中文字幕导航| 香蕉国产精品偷在线观看不卡| 久久精品国产精品亚洲精品| 99视频精品全部免费在线| 午夜精品福利一区二区蜜股av| 亚洲国产日韩一级| 亚洲免费小视频| 亚洲精品久久久久久下一站| 亚洲自拍偷拍一区| 亚洲免费成人| 久久精品视频亚洲| 亚洲欧美日韩一区二区在线| 美女久久一区| 久久精品国产成人| 国产精品r级在线| 欧美激情久久久久久| 国产一区二区精品久久91| 99综合在线| 亚洲精品小视频| 久久人人爽人人爽| 欧美在线欧美在线| 欧美视频网址| 亚洲六月丁香色婷婷综合久久| 狠狠做深爱婷婷久久综合一区 | 亚洲综合三区| 一区二区欧美激情| 欧美激情精品久久久久久变态| 久久免费视频在线观看| 国产精品自拍三区| 亚洲视频狠狠| 亚洲曰本av电影| 欧美日韩在线播| 亚洲三级色网| 亚洲国产婷婷香蕉久久久久久| 亚洲欧美日韩成人| 西瓜成人精品人成网站| 欧美深夜影院| 夜夜爽av福利精品导航 | 狠狠色狠狠色综合人人| 亚洲欧美电影院| 亚洲欧美日韩一区在线| 国产精品卡一卡二| 亚洲视频一区二区| 亚洲一级网站| 国产伦精品一区二区三区视频孕妇| 一区二区三区视频在线看| 亚洲视频播放| 国产精品视频一二| 亚洲欧美区自拍先锋| 久久激情综合| 国产有码一区二区| 久久久久九九九| 欧美成人dvd在线视频| 亚洲欧洲在线免费| 欧美日本亚洲韩国国产| 一区二区三区成人| 欧美在线看片| 亚洲电影毛片| 欧美日本韩国一区二区三区| aⅴ色国产欧美| 欧美一站二站| 亚洲国产精品久久久久秋霞蜜臀| 免费不卡欧美自拍视频| 亚洲精品孕妇| 久久福利视频导航| 在线不卡中文字幕| 欧美日韩一区二区免费在线观看| 亚洲天堂免费观看| 久久综合色8888| 日韩天堂在线视频| 国产情人节一区| 久久人人爽爽爽人久久久| 91久久久久久国产精品| 性欧美办公室18xxxxhd| 亚洲东热激情| 欧美午夜精品| 久久久夜色精品亚洲| av成人激情| 毛片av中文字幕一区二区| 亚洲无限av看| 在线成人亚洲| 国产精品一区免费视频| 久久婷婷亚洲| 亚洲中无吗在线| 亚洲人成亚洲人成在线观看图片| 午夜精品久久久久影视| 亚洲精选视频在线| 国产精品亚洲片夜色在线| 你懂的亚洲视频| 亚洲欧美韩国| 日韩亚洲欧美综合| 能在线观看的日韩av| 欧美影院成人| 一区二区三区毛片| 亚洲激情在线观看视频免费| 国产日韩在线播放| 国产精品va在线| 欧美激情按摩在线| 久久久青草婷婷精品综合日韩 | 一区二区三区高清在线| 亚洲第一精品夜夜躁人人爽 | 欧美永久精品| 亚洲一区欧美二区| 日韩视频在线一区二区三区| 在线免费观看日本欧美| 国内精品久久久久国产盗摄免费观看完整版| 欧美精品一区二区三区一线天视频| 久久久久免费观看| 欧美伊人久久久久久久久影院| 亚洲视频福利| 一区二区三区不卡视频在线观看| 亚洲经典在线| 亚洲国产精品一区二区三区| 欧美jizz19性欧美| 噜噜噜躁狠狠躁狠狠精品视频| 久久精精品视频| 久久精品亚洲精品| 久久爱www久久做| 性色av一区二区怡红| 香蕉久久国产| 欧美一区二区三区男人的天堂 | 久久久爽爽爽美女图片| 欧美一级久久久久久久大片| 亚洲欧美日韩在线一区| 亚洲欧美日韩在线不卡| 欧美一级欧美一级在线播放| 午夜激情久久久| 久久国产精品亚洲va麻豆| 久久精品国产精品| 噜噜噜躁狠狠躁狠狠精品视频 | 久久手机免费观看| 欧美在线观看一二区| 久久av一区二区三区亚洲| 久久精品国产2020观看福利| 久久久久一区二区| 欧美**人妖| 欧美日本在线一区| 国产精品日本一区二区| 国产欧美激情| 狠狠色狠狠色综合人人| 亚洲三级免费观看| 亚洲午夜电影在线观看| 久久久精品动漫| 欧美成人日韩| 日韩亚洲成人av在线| 欧美亚洲网站| 欧美福利在线| 国产麻豆91精品| 亚洲国产女人aaa毛片在线| 一区二区三区回区在观看免费视频| 亚洲欧美激情一区二区| 久久影视精品| 亚洲靠逼com| 久久久噜噜噜久久狠狠50岁| 欧美经典一区二区三区| 国产精品视频你懂的| 亚洲激情自拍| 欧美在线播放视频| 亚洲三级影院| 欧美在线观看www| 欧美日韩免费在线| 伊人久久亚洲影院| 性欧美办公室18xxxxhd| 欧美大片网址| 亚洲欧美在线免费| 欧美人与禽性xxxxx杂性| 国内精品久久久久久久影视蜜臀| 中文在线一区| 欧美激情精品久久久久久蜜臀| 亚洲一区二区精品| 欧美精品久久久久久| 激情久久久久久| 亚洲欧美日韩精品在线| 日韩视频免费看| 美女国产一区|