A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

也就是用程序来模拟鼠标键盘操作!!求详解!!!

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

2 个回复

倒序浏览
模拟鼠标键盘操作要用到:键盘钩子  钩子的本质是一段用以处理 系统消息的程序,通过系统调用,将其挂入系统,可以截获并处理相应的消息。
正好前段时间做过的项目有用到键盘钩子  可以发段代码给你参考:
#region  键盘钩子
               //键盘Hook结构函数
        [StructLayout(LayoutKind.Sequential)]
        public class KeyBoardHookStruct
        {
            public int vkCode;
            public int scanCode;
            public int flags;
            public int time;
            public int dwExtraInfo;
        }
        //委托
        public delegate int HookProc(int nCode, int wParam, IntPtr lParam);
        static int hHook = 0;
        public const int WH_KEYBOARD_LL = 13;
        //LowLevel键盘截获,如果是WH_KEYBOARD=2,并不能对系统键盘截取,Acrobat Reader会在你截取之前获得键盘。
        HookProc KeyBoardHookProcedure;
        #region [DllImport("user32.dll")]
        //设置钩子
        [DllImport("user32.dll")]
        public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);
        [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        //抽掉钩子
        public static extern bool UnhookWindowsHookEx(int idHook);
        [DllImport("user32.dll")]
        //调用下一个钩子
        public static extern int CallNextHookEx(int idHook, int nCode, int wParam, IntPtr lParam);
        [DllImport("kernel32.dll")]
        public static extern int GetCurrentThreadId();
       [DllImport("kernel32.dll")]
        public static extern IntPtr GetModuleHandle(string name);
        #endregion
        #region 安装键盘钩子
         public void Hook_Start()
        {
            if (hHook == 0)
            {
                KeyBoardHookProcedure = new HookProc(KeyBoardHookProc);
                hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyBoardHookProcedure,
                        GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);
                //如果设置钩子失败.
                if (hHook == 0)
                {
                    Hook_Clear();
                }
            }
        }
        #endregion
        #region 取消钩子事件
        /// <summary>
        /// 取消钩子事件
        /// </summary>
        public void Hook_Clear()
        {
            bool retKeyboard = true;
            if (hHook != 0)
            {
                retKeyboard = UnhookWindowsHookEx(hHook);
                hHook = 0;
            }
        }
        #endregion
//到这里键盘钩子就已经设置好了  接下来就要写怎样控制模拟操作   给你举个例子
public int KeyBoardHookProc(int nCode, int wParam, IntPtr lParam)
        {
            if (nCode >= 0)
            {
                KeyBoardHookStruct kbh = (KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyBoardHookStruct));
                    Keys k = (Keys)Enum.Parse(typeof(Keys), kbh.vkCode.ToString());
                  switch (k)
                {
                    case Keys.Tab:
                        if (kbh.flags == 0)
                        {// 这里写按下后做什么事}
                        else if (kbh.flags == 128)
                        {//放开后做什么事}
                         return 1;
                   ................... }
            return CallNextHookEx(hHook, nCode, wParam, lParam);
        }
思路是这样的,你可以多学习这方面知识  就可以实现你想要做的事

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
API函数:
mouse_event和keybd_event这两个API函数进行模拟鼠标键盘操作。查看下详细的。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马