鼠标键盘模拟操作类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace SuMouseKey
{
   public class Mkey
    {
        #region 参数

       /// <summary>
        /// //模拟键盘按键按下
       /// </summary>
        public static int KEYEVENTF_DOWN = 0;
       /// <summary>
        /// //模拟键盘按键抬起
       /// </summary>
        public static int KEYEVENTF_KEYUP = 0x2;
       /// <summary>
        /// //移动鼠标 
       /// </summary>
        public static int MOUSEEVENTF_MOVE = 0x0001;  
       /// <summary>
        /// //模拟鼠标左键按下参数
       /// </summary>
        public static int MOUSEEVENTF_LEFTDOWN = 0x0002; 
       /// <summary>
        /// //模拟鼠标左键抬起参数
       /// </summary>
        public static int MOUSEEVENTF_LEFTUP = 0x0004; 
       /// <summary>
        /// //模拟鼠标右键按下 
       /// </summary>
        public static int MOUSEEVENTF_RIGHTDOWN = 0x0008; 
       /// <summary>
        /// //模拟鼠标右键抬起 
       /// </summary>
        public static int MOUSEEVENTF_RIGHTUP = 0x0010; 
       /// <summary>
        /// //模拟鼠标中键按下 
       /// </summary>
        public static int MOUSEEVENTF_MIDDLEDOWN = 0x0020; 
       /// <summary>
        /// // 模拟鼠标中键抬起 
       /// </summary>
        public static int MOUSEEVENTF_MIDDLEUP = 0x0040;
       /// <summary>
        ///  //标示是否采用绝对坐标
       /// </summary>
        public static int MOUSEEVENTF_ABSOLUTE = 0x8000;

 
        public static int WM_CHAR = 0X102;
        #endregion

        #region 公共模拟方法
        /// <summary>
        /// 模拟键盘
        /// </summary>
        /// <param name="bVk">按键的虚拟键值</param>
        /// <param name="bScan">扫描码,一般不用设置,用0代替就行</param>
        /// <param name="dwFlags">参数为选项标志,如果为keydown则置0即可,如果为keyup则设成"KEYEVENTF_KEYUP" 或是 "0x2"</param>
        /// <param name="dwExtraInfo">一般也是置0即可</param>
        [DllImport("user32.dll", EntryPoint = "keybd_event")]         
        public  static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);

       /// <summary>
        /// 模拟鼠标
       /// </summary>
        /// <param name="dwFlags">第一个参数为代表所要模拟的鼠标消息</param>
       /// <param name="dx">x</param>
       /// <param name="dy">y</param>
       /// <param name="cButtons">0</param>
       /// <param name="dwExtraInfo">0</param>
        [DllImport("user32.dll", EntryPoint = "mouse_event")]        
        public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);


        /// <summary>
        /// 设置鼠标位置
        /// </summary>
        /// <param name="X">X</param>
        /// <param name="Y">y</param>
        /// <returns></returns>
        [DllImport("user32.dll")]
        public static extern bool SetCursorPos(int X, int Y);

       
        /// <summary>
        ///  查找句柄         
        /// </summary>
        /// <param name="hwndParent"> 父窗体句柄</param>
        /// <param name="hwndChildAfter">获取同一类型中的第几个子窗体 如IntPtr.Zero为第一个</param>
        /// <param name="lpszClass">需要找的子窗体类型可以为null  如"EDIT"</param>
        /// <param name="lpszWindow">一般为null</param>
        /// <returns></returns>
        [DllImport("User32.DLL")]
        public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);


        /// <summary>
        /// 发送按键消息SendMessage
        /// </summary>
        /// <param name="hWnd">hWnd-窗口句柄。窗口可以是任何类型的屏幕对象</param>
        /// <param name="Msg">-用于区别其他消息的常量值</param>
        /// <param name="wParam">通常是一个与消息有关的常量值,也可能是窗口或控件的句柄</param>
        /// <param name="lParam">通常是一个指向内存中数据的指针</param>
        /// <returns></returns>
        [DllImport("user32.dll")]
        public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
       /// <summary>
        /// 发送按键消息PostMessage
       /// </summary>
       /// <param name="hWnd">目标窗口句柄</param>
        /// <param name="Msg">被张贴的消息(指定被发送的消息)</param>
        /// <param name="wParam">第一个消息参数(指定附加消息的特定信息)</param>
        /// <param name="lParam">第二个消息参数(指定附加消息的特定信息)</param>
       /// <returns></returns>
        [DllImport("user32.dll", EntryPoint = "PostMessage", SetLastError = true)]
        public extern static bool PostMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
       
        
       /// <summary>
        /// //获取窗口句柄
       /// </summary>
        /// <param name="lpClassName">窗体类型 可以为null</param>
        /// <param name="lpWindowName">窗体标题 例如:IntPtr findPtr = FindWindow(null, "QQ游戏")</param>
       /// <returns></returns>
        [DllImport("User32.dll", EntryPoint = "FindWindow")]
        public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

       /// <summary>
       /// 激活窗口
       /// </summary>
       /// <param name="hWnd">要激活的窗口句柄</param>
        [DllImport("User32.dll")]
        public static extern void SetActiveWindow(IntPtr hWnd);
       /// <summary>
       /// 创建指定窗口的线程设置到前台,并且激活该窗口
       /// </summary>
       [DllImport("User32.dll")]
        public static extern void SetForegroundWindow(IntPtr hWnd);

        /// <summary>
        /// 发送一个字符串
        /// </summary>
        /// <param name="myIntPtr">窗口句柄</param>
        /// <param name="Input">字符串</param>
        public static void InputStr(IntPtr myIntPtr, string Input)
        {
            byte[] ch = (ASCIIEncoding.ASCII.GetBytes(Input));
            for (int i = 0; i < ch.Length; i++)
            {
                SendMessage(myIntPtr, WM_CHAR, ch[i], 0);
            }
        }        

        #endregion

    }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值