C# 模拟点击

在网上看到有人问C#中模拟鼠标点击按钮的帖子,在VB中用API实现的代码网上不少,可用C#写的基本就没有了,在这里简单写个事例。

1、首先建一个Demo项目。只有一个表单,标题是"Demo"。里面放一个按钮Button1,Text设置为"Click Me"。编译成exe。做事例用,这个代码就不用贴出来了吧 呵呵。

2、新建项目,添加表单,拖个按钮。代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;

namespace ClickButton_SendMessage
{
    public delegate bool CallBack(IntPtr hwnd, int lParam);

public partial class frmMain : Form
    {

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern IntPtr FindWindow(string strClass, string strWindow);

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern IntPtr EnumChildWindows(IntPtr hWndParent, CallBack lpEnumFunc, int lParam);

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern int GetWindowRect(IntPtr hwnd,RECT lpRect);

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern int SetCursorPos(int x,int y);

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern int SetForegroundWindow(IntPtr hwnd);

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern void mouse_event(int dwFlags,int dx,int dy,int cButtons, int dwExtraInfo);
        public const int MOUSEEVENTF_LEFTDOWN = 0x2;
        public const int MOUSEEVENTF_LEFTUP = 0x4;

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern int GetWindowText(IntPtr hwnd, string lpString, int cch);

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern int GetWindowTextLength(IntPtr hwnd);

public struct RECT
        {
            public int Left;
            public int Top;
            public int Right;
            public int Bottom;
        }

public struct POINT
        {
            public int x;
            public int y;
        }

public static int nCount;

public frmMain()
        {
            InitializeComponent();
            
        }

public static bool EnumWindowsProc(IntPtr h, int lParam)
        {

string strText=new string((char)0,255);
            RECT hRect=new RECT();

nCount = nCount + 1;
            
            int Ret=0;
            
            Ret = GetWindowTextLength(h);
            string sSave = new string((char)9, Ret);
            GetWindowText(h, sSave, Ret + 1);
            if(sSave.IndexOf("Click Me",0) > -1)
            {
                //GetWindowRect(h, hRect);
                //SetCursorPos((hRect.Left + hRect.Right) / 2, (hRect.Top + hRect.Bottom) / 2);
                SetCursorPos(200, 160);//这是用Spy++直接获取的,VS都带这个工具
                SetForegroundWindow(h);
                mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
                return false;
            }
            return true;
        }

private void button1_Click(object sender, EventArgs e)
        {
            IntPtr h;
            string strName = "Demo";
            h = FindWindow(null, strName);
            Debug.Print(h.ToString());
            if (h.ToInt32() != 0)
            {
                CallBack myCallBack = new CallBack(frmMain.EnumWindowsProc);
                EnumChildWindows(h, myCallBack, 0);
            }
        }
    }
}
3、如果想不停的点击 加个Timer不停点击。 或者加个变量IsLogin = FindWindow(null,"登陆成功后的标题 或 登录失败提示标题")
另外,只有登录按钮所在的窗体在激活时才能点中。 可以用ShowWindow()先激活窗体,然后再进行点击操作。

时间: 2024-10-23 07:38:01

C# 模拟点击的相关文章

爬虫——模拟点击动态页面

动态页面的模拟点击: 以斗鱼直播为例:http://www.douyu.com/directory/all 爬取每页的房间名.直播类型.主播名称.在线人数等数据,然后模拟点击下一页,继续爬取 #!/usr/bin/python3 # -*- conding:utf-8 -*- __author__ = 'mayi' """ 动态页面的模拟点击: 模拟点击斗鱼直播:http://www.douyu.com/directory/all 爬取每页房间名.直播类型.主播名称.在线人数

模拟点击a链接

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> </head> <body> <a href="tel:10086" id="aaa" ></a> <div onclick="test()" > 拨打电话 </div> <script>

js javascript 模拟点击 超级链接点击 转

转自:http://mo2g.com/view/42/ 我尝试过多次用jQuery模拟用户点击a标签的功能,但都没有成功,并且困扰了很久.前段时间的一次发呆,冒出了新的想法,于是就动手进行了测试. 先看下边的代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <html> <head> <meta charset="UTF-8"> <title>磨途歌-A标签测试1</tit

Android模拟点击的两种方式

导论 在Android中模拟一个点击事件有两种方式是通过模拟MotionEvent来实现:一种是通过ADB来实现 第一种:模拟MotionEvent 通用方法如下: private void setSimulateClick(View view, float x, float y) { long downTime = SystemClock.uptimeMillis(); final MotionEvent downEvent = MotionEvent.obtain(downTime, dow

C#获取网页中某个元素的位置,并模拟点击

我们在开发中,往往要得到网页中某个元素的位置,并且点击它.要模拟一次鼠标点击并不难,只要调用一个API就行了,关键就是怎么样得到这个元素的位置,还有判断是否要滚动滚动条,要滚动多少行能让元素显示出来.当然我们可以动态改变它的CSS,让它在特定的位置显示出来,但这个方法只对比较简单的网页有效. 那我们怎么才能得到网页的位置呢,首先我们来看一张图片 从这里我们可以看到五个offset的属性,这里我们主要利用offsetparent, offsetleft 和offsettop,我们用offsetpa

淘宝试用 模拟点击程序

一个模拟点击事件的程序.试用python语言.循环点击淘宝试用的宝贝.由于平时中过几次淘宝试用,认为有这种机会白不用,所以自己写了个小程序,免去人为琐碎的点击申请宝贝. 代码开源在github https://github.com/Rockyzsu/TaobaoTrial

爬虫之动态HTML处理(Selenium与PhantomJS )动态页面模拟点击

动态页面模拟点击 #!/usr/bin/env python # -*- coding:utf-8 -*- # python的测试模块 import unittest from selenium import webdriver from bs4 import BeautifulSoup class douyuSelenium(unittest.TestCase): # 初始化方法 def setUp(self): self.driver = webdriver.PhantomJS() #具体的

【android】模拟点击某个指定坐标作用在View上

/** * 模拟点击某个指定坐标作用在View上 * @param view * @param x * @param y */ public void clickView(View view,float x,float y) { long downTime = SystemClock.uptimeMillis(); final MotionEvent downEvent = MotionEvent.obtain( downTime, downTime, MotionEvent.ACTION_DO

记一次【模拟点击】,WinForm小软件开发过程

前言 年初四月份的时候,有朋友找到我,说想开发一个模拟点击的软件.最终软件做完后,发现效果不理想.唯一开发的我是认为最好是放弃了,做运营的他,坚持说这个没问题,说是改变合作方式.最终也是不了了之了. 不过,在这中间经历了一次重写,三次核心方法的变更,无数次的查资料,找解决办法至凌晨.中间穿插了无数次的讨论修改,修改讨论.虽然功能很简单,但是也花费了三个月的心血.心想,还是想好好总结一下.最后的软件界面如下: 实现思路&使用控件 首先,在内置浏览器里面打开网页,通过Javascript 获取需要的

Android---Monkey指令进行压力测试实例(模拟点击)

我们在做安卓APP测试的时候,经常会用到Monkey指令来模拟对APP的点击操作,从而达 到多次点击的效果,比如连续点击1W次,看看APP的运行情况.下面呢我就给大家介绍下 用Monkey指令模拟点击APP的的方法. 下载好adb文件,我这里是已经有了,然后解压到自己的某个路径(随意,不强 制放在C盘目录下),我这里放在了D盘 设置好adb的环境变量: 通过cmd验证是否安装成功,输入adb shell,成功的话会显示如下: 我这手机在充电模式,这样显示了.开机后不会有下面的error信息. 在