C# SendMessage 或 PostMessage 怎麽發送一個鍵啊,如F1键 谁能以 windows的 計算器为例 给一个提示啊.只要成功就行别人告诉我这们做.PostMessage(WindowHandle, 256, 112, 0);但是这个不能发送F1 到计算器上啊,不知道怎么才能发送..请各位给出点代码.

解决方案 »

  1.   

     System.Windows.Forms.SendKeys.Send(" {DOWN} ");
     按键定义详见MSDN
      

  2.   

    senkey 如果能给指定的窗口发送信息的话也行.
    不过sendkey 只能对当前活动窗口发送信息.没作用
      

  3.   

    PostMessage(WindowHandle, 256, 112, 0); 
    就是这样子啦关键你还需要通过枚举当前进程列表,在里面找到目标进程的名字,再得到他的当前窗口句柄 WindowHandle 就可以了。
      

  4.   

    WindowHandle 通过 winApi 的 FindWindow 找到 但是还是不行的啊
      

  5.   

    经测试,发F1对Windows自带的“计算器”无反应,或者部分程序也会如此!
    我底子不足,无法知晓为何?难道是由于系统对F1处理了???
    发数字1或其他成功。
      

  6.   

    计算器程序是有"帮助"的,也就是按F1能够打开计算器程序的帮助 ..楼主用SendMessage试一下..
      

  7.   


    Process[] ps = Process.GetProcessesByName("calc");
    if(ps.Length == 0)
    {
    MessageBox.Show("未找到计算器")
    }
    Process p = ps[0];
    IntPtr calcHandle = p.MainWindowHandle;
    PostMessage(calcHandle, 256, 112, 0); 
      

  8.   


    完成代码如下
    using System.Runtime.InteropServices;
    using System.Diagnostics;
    namespace 发送消息
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        /// <summary>
            /// 
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void 发送信息_Click(object sender, EventArgs e)
            {
                Process[] ps = Process.GetProcessesByName("calc");
                if (ps.Length == 0)
                {
                    MessageBox.Show("未找到计算器");
                }
                Process p = ps[0];
                IntPtr calcHandle = p.MainWindowHandle;
                PostMessage((int)calcHandle, 256, 0x31, 0); //发送1
            }
            /// <summary>
            ///没送消息
            /// </summary>
            /// <param name="hwnd">  hwnd -----------  Long,接收消息的那个窗口的句柄。如设为HWND_BROADCAST,表示投递给系统中的所有顶级窗口。如设为零,表示投递一条线程消息(参考PostThreadMessage)</param>
            /// <param name="wMsg"> wMsg -----------  Long,消息标识符</param>
            /// <param name="wParam">  wParam ---------  Long,具体由消息决定</param>
            /// <param name="lParam">  lParam ---------  Any,具体由消息决定</param>
            /// <returns></returns>
            [DllImport("user32.dll", EntryPoint = "PostMessage")]
            public static extern int PostMessage(
                int hwnd,
                int wMsg,
                int wParam,
                int lParam
            );
        }
    }