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.Button button1;
 private System.Windows.Forms.TextBox textBox1; private System.ComponentModel.Container components = 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 = new System.Windows.Forms.TextBox();
  this.SuspendLayout();
  // 
  // button1
  // 
  this.button1.Location = new System.Drawing.Point(32, 24);
  this.button1.Name = "button1";
  this.button1.TabIndex = 0;
  this.button1.Text = "button1";
  this.button1.Click += new System.EventHandler(this.button1_Click);
  // 
  // textBox1
  // 
  this.textBox1.Location = new System.Drawing.Point(32, 64);
  this.textBox1.Name = "textBox1";
  this.textBox1.TabIndex = 1;
  this.textBox1.Text = "textBox1";
  // 
  // Form1
  // 
  this.AutoScaleBaseSize = new System.Drawing.Size(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(object sender, System.EventArgs e) {
  MessageBox.Show("This is button1 click!");
 }
}

解决方案 »

  1.   

    using System;
    using System.Text;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Runtime.InteropServices; public class TestForm1 : System.Windows.Forms.Form {
     private System.Windows.Forms.Button button1;
     private System.Windows.Forms.Button button2; private System.ComponentModel.Container 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.Windows.Forms.Button();
      this.SuspendLayout();
      // 
      // button1
      // 
      this.button1.Location = new System.Drawing.Point(32, 24);
      this.button1.Name = "button1";
      this.button1.TabIndex = 0;
      this.button1.Text = "button1";
      this.button1.Click += new System.EventHandler(this.button1_Click);
      // 
      // button2
      // 
      this.button2.Location = new System.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.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
      this.ClientSize = new System.Drawing.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(object sender, System.EventArgs e) {
      IntPtr hwnd_win ;   
      IntPtr hwnd_button ;  hwnd_win = FindWindow("WindowsForms10.Window.8.app3","Form1");
      hwnd_button = FindWindowEx(hwnd_win ,new IntPtr(0) ,"WindowsForms10.BUTTON.app3","button1");    const int BM_CLICK = 0x00F5;
      Message msg = Message.Create(hwnd_button ,BM_CLICK ,new IntPtr(0),new IntPtr(0));
      PostMessage(msg.HWnd ,msg.Msg ,msg.WParam ,msg.LParam); 
     }
     private void button2_Click(object sender, System.EventArgs e) {
      const int WM_CHAR = 0x0102;
      IntPtr hwnd_win ;
      IntPtr hwnd_textbox ;  hwnd_win = FindWindow("WindowsForms10.Window.8.app3","Form1");   
      hwnd_textbox = FindWindowEx(hwnd_win ,new IntPtr(0) ,"WindowsForms10.EDIT.app3","textBox1");     
      
      string strtext = "测试aaa";
      UnicodeEncoding encode = new UnicodeEncoding();
      char[] chars = encode.GetChars(encode.GetBytes(strtext));
      Message msg ;
      foreach (char c in chars ) {
       msg = Message.Create(hwnd_textbox ,WM_CHAR ,new IntPtr(c),new IntPtr(0));
       PostMessage(msg.HWnd ,msg.Msg ,msg.WParam ,msg.LParam); 
      }
     } [DllImport("user32.dll")]
     public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
     
     [DllImport("user32.dll")]
     public static extern IntPtr FindWindowEx(IntPtr hwndParent,IntPtr hwndChildAfter,string lpszClass,string lpszWindow); [DllImport("user32.dll",CharSet=CharSet.Unicode)]  
     public static extern IntPtr PostMessage(IntPtr hwnd,int wMsg,IntPtr wParam,IntPtr lParam);
    }
      

  2.   

    首先运行第一个程序,显示Form1窗体,然后运行第二个程序,显示TestForm1窗体。在TestForm1窗体上点击button1按钮(向Form1窗体上的button1发送消息)此时显示对话框提示“This is button1 click!”。在TestForm1窗体上点击button2按钮(向Form1窗体上的textBox1发送消息)此时在Form1上的textBox1上显示“测试aaa”。
      

  3.   

    [DllImport("user32.dll",EntryPoint="PostMessage",CallingConvertion=CallingConvention.Winapi)]
    static extern bool PostMessage(IntPtr hwnd,int msg, uint wParam, uint lParam);uint MAKELONG(ushort x, ushort y)
    {
     return ((((uint)x)<< 16) | y); //low order WORD 是指标的x位置; high order WORD是y位置.
    }
    void SomeCall()
    {
     API.PostMessage(new IntPtr(b), 0x0204, (uint)0, MAKELONG(12,342)); 
    }
      

  4.   

     感谢ericzhangbo1982111的回贴
        不过我要的是单击鼠标,你这个没有设计到坐标问题
      

  5.   

      感谢genlinux 的回贴
          用了你的方法后,右键弹出的菜单还是在左上角。没有改变 。下面我把源码在发一次    
         IntPtr  hWnd=API.GetWindow(API.GetDesktopWindow(),(long)API.WindowFlag.GW_CHILD);
         int b= API.FindWindowEx(a, 0, "Edit", null);
         long hWndProgram = API.FindWindow("Progman",null); 
         long hWndDefView = API.FindWindowEx((int)hWndProgram, 0, "SHELLDLL_DefView", null);
              API.PostMessage(new IntPtr(hWndDefView), 0x0204, 0x0001, MAKELONG(400,200));
         API.PostMessage(new IntPtr(hWndDefView), 0x0205, 0x0001, MAKELONG(400, 200));uint MAKELONG(ushort x, ushort y) 

     return ((((uint)x) < < 16)  | y);
    } 以上代码能在桌面弹出右键菜单
    但是还是在左上角。不是在MAKELONG方法里的坐标弹出的右键菜单。请指点。有没有成功的? 在次感谢大家帮帮忙
      

  6.   

    uint MAKELPARAM(ushort wLow, ushort wHigh)
    {
       return  wHigh * 0x10000 + wLow ;
    };
      

  7.   

     感谢 akirya的回贴,用了你的方法,还是老样子 右键菜单在左上角 ,没办法到我指定的位置
      

  8.   

    API.PostMessage(new IntPtr(hWndDefView), 0x0204, 0x0002, 400+200*0x10000);
    API.PostMessage(new IntPtr(hWndDefView), 0x0205, 0x0000, 400+200*0x10000);