分享
 
 
 

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

王朝system·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

在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 // Exclude rarely-used stuff from Windows headers

#define _WIN32_WINNT 0x0500 // so the code would compile

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

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有