剛接觸windows 不同程序 窗口消息傳遞,不理解IntPtr SendMessage(int hWnd, int msg, IntPtr wParam, IntPtr lParam)這函數怎么用?消息內容怎么傳遞過去,還遇到需要message結構體?IntPtr怎么用呢?
但實際只是用來傳個數據,不需要這么復雜,就簡單寫了下面程序。
1.發送端
public partial class Form1 : Form{private const int WM_USER = 0x0400; //自定義消息號一般開始于0x0400,[DllImport("User32.dll", EntryPoint = "SendMessage")]private static extern IntPtr SendMessage(int hWnd, int msg, IntPtr wParam, IntPtr lParam); //發送消息函數。//找出窗口句柄handler,用起來方便。有看到過返回值時IntPtr[DllImport("User32.dll", EntryPoint = "FindWindow")]private static extern int FindWindow(string lpClassName, string lpWindowName); public Form1(){InitializeComponent();this.Text = "消費者";label1.Text = "向X300A";}private void button1_Click(object sender, EventArgs e){int WINDOW_HANDLER; //int msgNum;if(int.TryParse(textBox1.Text,out msgNum)==false) //獲取用戶信息內容,這里只接受數字。{return;}WINDOW_HANDLER = FindWindow(null, "X300A");//通過窗口標題,獲得句柄SendMessage(WINDOW_HANDLER, WM_USER, new IntPtr(msgNum), IntPtr.Zero);//前面兩個參數,基本固定格式。//后面兩個參數,把需要傳遞的參數轉為IntPtr,就好了。//第四個參數因為沒什么傳的,這里就設為空}}
2.接收端
public partial class Form1 : Form{private const int WM_USER = 0x0400; //自定義消息號一般開始于0x0400,發送端也是設置成這個public Form1(){InitializeComponent();this.Text = "X300A";label1.Text = "接收消費者信息";}protected override void WndProc(ref Message m) //重新函數,處理接收的信息{switch (m.Msg){case WM_USER:string message = m.WParam.ToString(); //轉換成string類型,這樣就能接收到發送端信息。textBox1.AppendText("接受到信息:"+message+"\n");Popup p1 = new Popup(); //自定義的一個窗口if(p1.ShowDialog()==DialogResult.OK) {p1.Dispose();textBox1.AppendText("啟動完畢\n");}break;default: break;}base.WndProc(ref m);}}
3.演示圖
參考鏈接:
http://blog.sina.com.cn/s/blog_45eaa01a01013zbs.html