分类

  • 软件天地

  • 使用 C# 在应用程序之间发送消息‖
      第一个项目包含一个Wi
    ndows Form(Form1),在Form1上
    有一个Button和一个TextBox。

      第二个项目包含一个Wi
    个应用程序中Button的Clic
    ndows Form(Form1),在Form1上
    k事件和修改第一个应用程序中T
    有两个Button,分别用来测试第一
    extBox的值。

      第一个应用程序中Form的代码如下:                                          

      using System;                                                    
      using System.Drawing;                                    
      using System.Collections;                            
      using System.ComponentModel;                      
      using System.Windows.Forms;                        


      public class Form1 :
    System.Windows.Forms.Form {
       private System.Windows.Forms.Bu
    tton button1;
       private System.Windows.Forms.Te
    xtBox textBox1;

       private System.Comp
    onentModel.Container compone
    nts = null;

       [STAThread]                                                      
       static void Main() {                                    
       Application.Run(new Form1());                  
       }                                                                          

       public Form1()                                                
       {                                                                          
       InitializeComponent();                                
       }                                                                          
       protected override void Dispose
    ( bool disposing )
       {                                                                          
       if( disposing )                                              
       {                                                                          
        if(components != null)                              
        {                                                                        
        components.Dispose();                                
        }                                                                        
       }                                                                          
       base.Dispose( disposing );                        
       }                                                                          

       #region Windows 窗体设计器生成的代码                        
       private void InitializeComponent()        
       {                                                                          
       this.button1 = new
    System.Windows.Forms.Button
    ();
       this.textBox1 = ne
    w System.Windows.Forms.TextB
    ox();
       this.SuspendLayout();                                  
       //                                                                       
       // button1                                                        
       //                                                                       
       this.button1.Locat
    ion = new System.Drawing.Poi
    nt(32, 24);
       this.button1.Name = "button1";                
       this.button1.TabIndex = 0;                        
       this.button1.Text = "button1";                
       this.button1.Click += new Syst
    em.EventHandler(this.button1_Click);
       //                                                                       
       // textBox1                                                      
       //                                                                       
       this.textBox1.Location = new S
    ystem.Drawing.Point(32, 64);
       this.textBox1.Name = "textBox1";            
       this.textBox1.TabIndex = 1;                      
       this.textBox1.Text = "textBox1";            
       //                                                                       
       // Form1                                                            
       //                                                                       
       this.AutoScaleBase
    Size = new System.Drawing.Si
    ze(6, 14);
       this.ClientSize =
    new System.Drawing.Size(292,
    266);
       this.Controls.Add(this.textBox1);          
       this.Controls.Add(this.button1);            
       this.Name = "Form1";                                    
       this.Text = "Form1";                                   
       this.ResumeLayout(false);                          

       }                                                                          
       #endregion                                                        

       private void button1_Click(obje
    ct sender, System.EventArgs e) {

       MessageBox.Show("T
    his is button1 click!");
       }                                                                          
      }                                                                            

      第二个应用程序中Form的代码如下:                                          

      using System;                                                    
      using System.Text;                                          
      using System.Drawing;                                    
      using System.Collections;                            
      using System.ComponentModel;                      
      using System.Windows.Forms;                        
      using System.Runtime.InteropServices;   

      public class TestFor
    m1 : System.Windows.Forms.Fo
    rm {
       private System.Windows.Forms.Bu
    tton button1;

       private System.Wind
    ows.Forms.Button button2;

       private System.ComponentModel.C
    ontainer components = null;

       [STAThread]                                                      
       static void Main() {                                    
       Application.Run(new TestForm1());          
       }                                                                          

       public TestForm1()                                        
       {                                                                          
       InitializeComponent();                                
       }                                                                          
       protected override
    void Dispose( bool disposing
    )
       {                                                                          
       if( disposing )                                              
       {                                                                          
        if(components != null)                              
        {                                                                        
        components.Dispose();                                
        }                                                                        
       }                                                                          
       base.Dispose( disposing );                        
       }                                                                          

       #region Windows 窗体设计器生成的代码                        
       private void InitializeComponent()        
       {                                                                          
       this.button1 = new
    System.Windows.Forms.Button
    ();
       this.button2 = new System.Wind
    ows.Forms.Button();
       this.SuspendLayout();                                  
       //                                                                       
       // button1                                                        
       //                                                                       
       this.button1.Locat
    ion = new System.Drawing.Poi
    nt(32, 24);
       this.button1.Name = "button1";                
       this.button1.TabIndex = 0;                        
       this.button1.Text = "button1";                
       this.button1.Click += new Syst
    em.EventHandler(this.button1_Click);
       //                                                                       
       // button2                                                        
       //                                                                       
       this.button2.Location = new Sy
    stem.Drawing.Point(32, 64);
       this.button2.Name = "button2";                
       this.button2.TabIndex = 0;                        
       this.button2.Text = "button2";                
       this.button2.Click
    += new System.EventHandler(
    this.button2_Click);
       //                                                                       
       // TestForm1                                                    
       //                                                                       
       this.AutoScaleBase
    Size = new System.Drawing.Si
    ze(6, 14);
       this.ClientSize = new System.D
    rawing.Size(292, 266);
       this.Controls.Add(this.button1);            
       this.Controls.Add(this.button2);           
       this.Name = "TestForm1";                            
       this.Text = "TestForm1";                           
       this.ResumeLayout(false);                          

       }                                                                          
       #endregion                                                        

       private void button1_Click(obje
    ct sender, System.EventArgs e) {
       IntPtr hwnd_win ;                                        
       IntPtr hwnd_button ;                                    

       hwnd_win = FindWin
    dow("WindowsForms10.Window.8
    .app3","Form1");
       hwnd_button = Find
    rms10.BUTTON.app3","butt
    WindowEx(hwnd_win ,new IntPt
    on1"); 
    r(0) ,"WindowsFo


       const int BM_CLICK = 0x00F5;                    
       Message msg = Mess
    IntPtr(0));
    age.Create(hwnd_button ,BM_C

    LICK ,new IntPtr(0),new

       PostMessage(msg.HW
    nd ,msg.Msg ,msg.WParam ,msg
    .LParam);
       }                                                                          
       private void button
    2_Click(object sender, Syste
    m.EventArgs e) {
       const int WM_CHAR = 0x0102;                      
       IntPtr hwnd_win ;                                          
       IntPtr hwnd_textbox ;                                  

       hwnd_win = FindWindow("Windows
    Forms10.Window.8.app3","Form1"); 
       hwnd_textbox = Fin
    orms10.EDIT.app3","textB
    dWindowEx(hwnd_win ,new IntP
    ox1");  
    tr(0) ,"WindowsF

                                                                                   
       string strtext = "测试aaa";                          
       UnicodeEncoding en
    code = new UnicodeEncoding()
    ;
       char[] chars = encode.GetChars
    (encode.GetBytes(strtext));
       Message msg ;                                                  
       foreach (char c in chars ) {                    
        msg = Message.Cre
    ate(hwnd_textbox ,WM_CHAR ,n
    ew IntPtr(c),new IntPtr(0));
        PostMessage(msg.HWnd ,msg.Msg
    ,msg.WParam ,msg.LParam);
       }                                                                          
       }                                                                          

       [DllImport("user32.dll")]                          
       public static exter
    lpWindowName);
    n IntPtr FindWindow(string l

    pClassName, string

                                                                                   
       [DllImport("user32.dll")]                          
       public static exter
    hwndChildAfter,string lp
    n IntPtr FindWindowEx(IntPtr
    szClass,string lpszWindow);
    hwndParent,IntPtr


       [DllImport("user32.dll",CharSet
    =CharSet.Unicode)] 
       public static exter
    wParam,IntPtr lParam);
    n IntPtr PostMessage(IntPtr

    hwnd,int wMsg,IntPtr

      }                                                                            

      以上代码可以在VS.NET中编译运行,
    也可以使用csc.exe编译,如使用一下命令行:

      F:>csc.exe Form1.cs


      F:>csc.exe TestForm1.cs


      编译后生成两个.exe文件。                                                  

      首先运行第一个程序,显示Form1窗
    体,然后运行第二个程序,显示TestForm1窗体。

      在TestForm1窗体上点
    话框提示“This is button
    击button1按钮(向Form1窗体上
    1 click!”。
    的button1发送消息)此时显示对


      在TestForm1窗体上点击button2按钮
    上的textBox1上显示“测试aaa”。
    (向Form1窗体上的textBox1发送消息)此时在Form1


    上一页 下一页




    map