专栏首页字根中文校对软件在windows下模拟鼠标键盘输入的几种方法 (附带源代码)

在windows下模拟鼠标键盘输入的几种方法 (附带源代码)

在windows下模拟鼠标键盘输入的几种方法

    最近小叮咚使用的服务器(第3方的asp服务器,不是iis)在启动后总是不能自动运行,可能里面有Bug,需要点击启动按钮后才能连接到internet上.     为了保证小叮咚的稳定运行,我把我的机器(放在家)配置成每小时启动一次,启动后自动运行服务器软件     这个软件没有类似: /run 等的命令行启动方式,于是我想,能不能用程序自动实现 模拟鼠标点击按钮的功能呢?     因为我的需求和运行环境允许我这么做:     1 这个软件启动后的"运行"按钮显示位置固定     2 只需要点击一下运行按钮就可以,     有上面2个条件,所以用程序模拟执行点击运行按钮的方法是可行的.        于是我用google展开调查 :-)     作为程序员,解决这样的问题有两个方法: 1 用现成的程序 2 自己做    具体怎么来就看.....实际需要喽     在google上输入,鼠标模拟,就可以发现一下几种选择     1 使用 "按键精灵" 等现成软件 (这个不在本文介绍之列)     2 网上有 .net实现鼠标模拟的方法 http://www.cnblogs.com/edobnet/archive/2004/06/09/14334.aspx     3 使用mfc的实现方法,最多的,最有名的就是 徐景周 在VCKBase上的那篇 (见 徐景周 的专栏)     4  使用 MS Active Accessibility 接口技术编程     轻量级,重量级,现成的都有了,呵呵         后几种中方法都是使用:SetCursorPos  和 mouse_event WinAPI 来实现的.     实现原型如下:   SetCursorPos (XXX, XXX);   mouse_event (MOUSEEVENTF_LEFTDOWN, 0,0,0,0);   mouse_event (MOUSEEVENTF_LEFTUP, 0,0,0,0);     有兴趣的读者可以参考看看上面文章的介绍

    本文介绍另外一个办法:     使用: SendInput WinAPI ,这个 方法的介绍如下:  [New for Windows NT 4.0 Service Pack 3.]  The SendInput function synthesizes keystrokes, mouse motions, and button clicks.  看来它集成了 键盘按键,鼠标活动,手写板输入等信息,完全可以实现前面提出的需求.  配合SendInput使用的还有另外一个结构:  结构:INPUT  [New for Windows NT 4.0 Service Pack 3.]  The INPUT structure is used by SendInput to synthesize keystrokes, mouse motions, and button clicks.  typedef struct tagINPUT {      DWORD   type;      union      {          MOUSEINPUT      mi;          KEYBDINPUT      ki;          HARDWAREINPUT   hi;      };  } INPUT, *PINPUT, FAR* LPINPUT;

  更详细的信息参考: http://www.piclist.com/techref/os/win/api/win32/struc/src/str09_12.htm http://www.china-askpro.com/msg18/qa18.shtml http://www.daniweb.com/techtalkforums/showthread.php?t=6727 以下代码使用 Dev++编译通过.(共2个文件)

//stdafx.h #pragma once #define WIN32_LEAN_AND_MEAN #define _WIN32_WINNT 0x0500 // 注意VC生成代码值是:0x0400 ,放在vc中运行时要注意 #include <windows.h>

//main.cpp #include "stdafx.h"

int main(int argc, char* argv[]){     INPUT *buffer = new INPUT[3];      buffer->type = INPUT_MOUSE;     buffer->mi.dx = 100;     buffer->mi.dy = 100;     buffer->mi.mouseData = 0;     buffer->mi.dwFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE);     buffer->mi.time = 0;     buffer->mi.dwExtraInfo = 0;

    (buffer+1)->type = INPUT_MOUSE;     (buffer+1)->mi.dx = 100;     (buffer+1)->mi.dy = 100;     (buffer+1)->mi.mouseData = 0;     (buffer+1)->mi.dwFlags = MOUSEEVENTF_LEFTDOWN;     (buffer+1)->mi.time = 0;     (buffer+1)->mi.dwExtraInfo = 0;

    (buffer+2)->type = INPUT_MOUSE;     (buffer+2)->mi.dx = 100;     (buffer+2)->mi.dy = 100;     (buffer+2)->mi.mouseData = 0;     (buffer+2)->mi.dwFlags = MOUSEEVENTF_LEFTUP;     (buffer+2)->mi.time = 0;     (buffer+2)->mi.dwExtraInfo = 0;

    SendInput(3,buffer,sizeof(INPUT));     delete (buffer);      return 0; }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • dotnet core 中可爱的代码

    刚才看 dotnet core 的源代码例子,发现了一个非常简单的sample 代码:

    田春峰-JCJC错别字检测
  • tss中文:LimpidLog released LimpidLog 发布了

     以前翻译总用trados,太专业,而我的风格很free,又是出于乐趣,因此就放弃了trados。现在好了我有了自己的web trados了。        ...

    田春峰-JCJC错别字检测
  • Java 错别字检查接口 API

    Java 错别字检查接口 API 为了方便广大程序员朋友快速把错别字检查功能集成到自己的系统中,我们开发了一个支持HTTP协议的 Java 错别字检查接口 AP...

    田春峰-JCJC错别字检测
  • 如何在windows下和linux下获取文件(如exe文件)的详细信息和属性

    最近在项目开发中,由cs开发的exe的程序,需要自动升级,该exe程序放在linux下,自动升级时检测不到该exe程序的版本号信息,但是我们客户端的exe程序需...

    业余草
  • 2.4 图形硬件

    这一节中主要阐述图形硬件的相关知识,主要包括 GPU 中数据的存放硬件, 以及各类缓冲区的具体含义和用途,如:z buffer(深度缓冲区)、stencil b...

    代码咖啡
  • AI攻陷多人德扑再登Science,训练成本150美元,每小时赢1000刀

    六人无限制玩法是德州扑克最受欢迎的游戏方式,Facebook 与 CMU 的成果是第一个在拥有两个(或以上)人类玩家的比赛中击败人类专业选手的 AI。

    机器之心
  • 关于巧克力数据集的数据分析数据读取数据预处理问题分析探索分析

    数据集来自kaggle import numpy as np import pandas as pd 数据读取 dataset = pd.read_csv("....

    月见樽
  • 我有一个大胆的想法!

    一款名叫“Pluribus”的AI扑克牌机器人在六人无限制德州扑克这项复杂游戏中,碾压了人类职业选手!——这是AI机器人首次在规模超过两人的复杂对局中击败顶级人...

    量化投资与机器学习微信公众号
  • 谷歌云TPU上可以用Julia啦!0.23秒跑100张图片,Jeff Dean点赞推荐

    不久前,Julia Computing官方放出了一篇论文,展示将Julia代码和机器学习模型编译到谷歌云TPU的方法,可以实现在0.23秒内完成100张图片VG...

    量子位
  • C++基础-继承

    本文为 C++ 学习笔记,参考《Sams Teach Yourself C++ in One Hour a Day》第 8 版、《C++ Primer》第 5 ...

    用户4940323

扫码关注云+社区

领取腾讯云代金券