做一个程序,目的是获取键盘的操作然后再自动发送ctrl+s命令即保存
假如当前是word应用程序,我运行C#的应用程序则word就会执行了ctrl+s命令
谢谢大家

解决方案 »

  1.   

    貌似在KEYPRESS的参数E的KEYCODE还是KEYVALUE属性可以区分出来吧
      

  2.   

    谢谢,我正在找,到是之前有个人教了我下面的代码是捕获鼠标的,你们看下
    using System;
    using System.Threading;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;
    namespace MouseControl1
    {
        class MouseControl
        {
            /// <summary>
            /// 鼠标控制参数
            /// </summary>
            const int MOUSEEVENTF_LEFTDOWN = 0x2;
            const int MOUSEEVENTF_LEFTUP = 0x4;
            const int MOUSEEVENTF_MIDDLEDOWN = 0x20;
            const int MOUSEEVENTF_MIDDLEUP = 0x40;
            const int MOUSEEVENTF_MOVE = 0x1;
            const int MOUSEEVENTF_ABSOLUTE = 0x8000;
            const int MOUSEEVENTF_RIGHTDOWN = 0x8;
            const int MOUSEEVENTF_RIGHTUP = 0x10;        /// <summary>
            /// 鼠标的位置
            /// </summary>
            public struct PONITAPI
            {
                public int x, y;
            }        [DllImport("user32.dll")]
            public static extern int GetCursorPos(ref PONITAPI p);        [DllImport("user32.dll")]
            public static extern int SetCursorPos(int x, int y);        [DllImport("user32.dll")]
            public static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);        [STAThread]
            static void Main()
            {
                PONITAPI p = new PONITAPI();
                //GetCursorPos(ref p);
                //Console.WriteLine("鼠标现在的位置X:{0}, Y:{1}", p.x, p.y);
                //Console.WriteLine("Sleep 1 sec...");
                //Thread.Sleep(1000);
                p.x = 40;
                p.y = 30;
                //p.x = (new Random()).Next(Screen.PrimaryScreen.Bounds.Width);
                //p.y = (new Random()).Next(Screen.PrimaryScreen.Bounds.Height);
                Console.WriteLine("把鼠标移动到X:{0}, Y:{1}", p.x, p.y);
                //System.Windows.Forms.Cursor.Position = new System.Drawing.Point(5, 5);
                //Console.ReadKey();
                SetCursorPos(p.x, p.y);
                GetCursorPos(ref p);
                Console.WriteLine("鼠标现在的位置X:{0}, Y:{1}", p.x, p.y);
                Console.WriteLine("Sleep 1 sec...");
                Thread.Sleep(1000);            Console.WriteLine("在X:{0}, Y:{1} 按下鼠标左键", p.x, p.y);
                mouse_event(MOUSEEVENTF_LEFTDOWN, p.x, p.y, 0, 0);
                Console.WriteLine("Sleep 1 sec...");
                Thread.Sleep(1000);            mouse_event(MOUSEEVENTF_LEFTDOWN, p.x, p.y, 0, 0);
                Console.WriteLine("在X:{0}, Y:{1} 释放鼠标左键", p.x, p.y);
                mouse_event(MOUSEEVENTF_LEFTUP, p.x, p.y, 0, 0);
                Thread.Sleep(1000);            p.x = 50;
                p.y = 55;
                SetCursorPos(p.x, p.y);
                GetCursorPos(ref p);
                Console.WriteLine("在X:{0}, Y:{1} 按下鼠标左键", p.x, p.y);
                mouse_event(MOUSEEVENTF_LEFTDOWN, p.x, p.y, 0, 0);
                Console.WriteLine("Sleep 1 sec...");
                Thread.Sleep(1000);            Console.WriteLine("在X:{0}, Y:{1} 释放鼠标左键", p.x, p.y);
                mouse_event(MOUSEEVENTF_LEFTUP, p.x, p.y, 0, 0);
                //Console.WriteLine("程序结束,按任意键退出....");
                //Console.ReadKey();
            }    }
    }
      

  3.   

    实现Ctrl+S保存:
    在keydown事件中,ctrl捕捉后再预定捕捉S键事件:
    例子(ArcGIS中的,winform程序差不多)
             /// <summary>
            /// 保存当前编辑Ctrl+S
            /// </summary>
            /// <param name="e"></param>
            public void SaveEdit(IMapControlEvents2_OnKeyDownEvent e)
            {
                if (e.keyCode == (int)Keys.ControlKey)
                {
                    m_App.MainMapControl.OnKeyDown +=
                        new IMapControlEvents2_Ax_OnKeyDownEventHandler(ForCtrlAndS_OnKeyDown);
                }
            }        private void ForCtrlAndS_OnKeyDown(object sender, IMapControlEvents2_OnKeyDownEvent e)
            {
                if (e.keyCode == (int)Keys.S)
                    m_App.SaveEdit();
            }