首页 > 编程语言 >C#控制鼠标

C#控制鼠标

时间:2023-03-31 12:35:34浏览次数:28  
标签:控制 Console 鼠标 C# int WriteLine MOUSEEVENTF const

C#控制鼠标

using System;using System.Threading;using System.Runtime.InteropServices;using System.Windows.Forms;

namespace MouseControl

{

    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 = (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);

            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);

 

            Console.WriteLine("在X:{0}, Y:{1} 释放鼠标左键", p.x, p.y);

            mouse_event(MOUSEEVENTF_LEFTUP, p.x, p.y, 0, 0);

            Console.WriteLine("程序结束,按任意键退出....");

            Console.ReadKey();

        }

    }

}

 

来自:https://www.cnblogs.com/houfeng/archive/2008/11/19/1337044.html

标签:控制,Console,鼠标,C#,int,WriteLine,MOUSEEVENTF,const
From: https://www.cnblogs.com/xyth/p/17275895.html

相关文章

  • STL 容器 002 (vector 详解)
    为什么各方面表现都比较中等,适用范围广尾插很快,查找也比较快是什么动态数组特点:动态数组,三个指针控制两倍增长扩充的方法:不能原地扩充,因为后面可能会有其他的东西,必须在其他地方开辟一块更大的内存提供[]所有的有连续空间的容器都有[]itera......
  • CloudCanal 落地 DB2 数据迁移同步功能
    简述Db2是一款具有悠久历史的关系型数据库,由IBM公司开发和维护,广泛应用于金融级业务场景。CloudCanal近期提供了Db2为源端的数据迁移同步功能,用户可以便利地将Db2中数据实时同步到其他数据库,实现数据更广泛、更实时的应用。功能介绍目标数据库和能力目标端数据源......
  • mysql Error:index column size too large. the maximum column size is 767 bytes
    问题现象mysql在执行脚本create创建表时,提示以下错误:indexcolumnsizetoolarge.themaximumcolumnsizeis767bytes异常原因INNODB引擎,UTF-8,主键字符串默认最大767,需要修改解决方案对数据库进行设置setglobalinnodb_large_prefix=ON参考博客......
  • Float 或者 Double 除以零不会抛出 java.lang.ArithmeticExceptionL:/by zero 异常
    1.Java的浮点运算是基于IEEE-754标准来的。IEEE-754standardJava'sFloating-PointOperations2.Java语言规范https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.31.0/0=+Infinity-1.0/0=-Infinity0/0=NaN......
  • 东用科技路由器与H3C Router构建IPSec VPN配置指导手册
    东用科技路由器与H3CRouter构建IPSecVPN配置指导手册一、H3CRouter配置:<H3CRouter>system-view//进入配置模式[H3CRouter]local-useradmin//添加本地用户[H3CRouter-luser-cisco]passwordsimpleadmin//为添加的用户设置密码[H3CRouter-luser-cisco]service-typeweb//开......
  • 汉源高科120路128路PCM电话光端机128路电话2路百兆物理隔离网络FXO/FXS口
    ......
  • 汉源高科8路工业级PCM电话光端机8路电话+1路百兆网络DIN导轨式
    ......
  • SQL SERVER - 如何检测游标cursor是否打开?
     IFCURSOR_STATUS('global','mycursor')>=0BEGINPRINT'Cursorexistsandisopen';ENDELSEBEGINPRINT'Cursordoesnotexistorisnotopen';END;    REF:https://stacktuts.com/how-to-check-if-cursor-......
  • [ARC128D] Neq Neq 题解
    不难考虑设\(f_i\)表示现在处理了前\(i\)个数,第\(i\)个数必选得到的方案数。由于\(a_n\)不可能被删掉(需要一个\(a_{n+1}\)),所以答案即为\(f_n\)。对\(f_i\),我们考虑前一个被保留的数\(j\),问题转化成被\(i,j\)夹住的一段连续的数可不可以全部删掉,分类讨论:\(j=i-1\)......
  • Minicom All In One
    MinicomAllInOneminicombugs/minicomerrorsMinicom2.8#0000000000001❌$minicom-b115200-o-D/dev/tty.usbmodem0000000000001#tty❌$minicom-b115200-o-D/dev/tty.usbmodem14601#cu✅$minicom-b115200-o-D/dev/cu.usbmodem14601M......