关于winapimouse_event拖动的信息

http://www.itjxue.com  2023-01-14 02:31  来源:未知  点击次数: 

C#怎么控制鼠标移动?

你可以用Windows API的mouse_event函数来实现模拟鼠标的移动 代码如下 using System.Runtime.InteropServices; [DllImport("user32")]

private static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);

private const int MOUSEEVENTF_MOVE = 0x0001;

private const int MOUSEEVENTF_ABSOLUTE = 0x8000;

private void button1_Click(object sender, EventArgs e)

{

//用一个Timer反复执行下面的代码就可以实现你要的效果

int width = Screen.PrimaryScreen.Bounds.Width;

int height = Screen.PrimaryScreen.Bounds.Height;

int offsetX = (MousePosition.X + 100) * 65535 / width;

int offsetY = (MousePosition.Y + 100) * 65535 / height;

mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, offsetX, offsetY, 0, 0);//相对当前位置移动100,100个像素

//mouse_event(MOUSEEVENTF_MOVE,1,1,0,0);//如果只是让鼠标动一下这么写就行

}

C++,怎么让程序模拟用户输入指令,并自行回车以执行该指令(不是写个输出函数只做样子)?

可以用WinApi实现,需要包含windows.h。

需要两个模块,一个是检测回车键的模块,一个是模拟输入指令的模块。

检测回车键,有两个函数可以用: GetKeyState和GetAsyncKeyState,两个函数的参数都是虚拟键码,虚拟键码可以在网站上查询:虚拟键码 | Microsoft Learn

两个函数的返回值相同:返回一个short型的数,short型是16位有符号的数据类型,如果要查询的键被按下,返回值最高位被置1,则这个数表示负数,所以可以用0或0来判断。

两个函数的区别在于,GetKeyState返回的不是键盘真实状态,而是程序获得的键盘消息。简单地说,如果程序没有获得焦点,则无法获得按键信息,返回的是没有按键的状态。而GetAsyncKeyState返回的是按键的真实状态。

将GetAsyncKeyState放入循环,每次循环检测有没有按下回车键,如果按下则模拟输入指令;每次循环后Sleep一段时间,节约系统资源。

模拟输入指令同样有两种方法:向指定窗口发送按键信息sendMessage和模拟按键

由于我测试的软件无法用第一个方法,我只介绍第二个方法。

模拟按键就像真实按键一样,只有目标窗口获得焦点时,按键信息才会被目标窗口接收到。因此,一方面,程序不能获得焦点,只能用GetAsyncKeyState函数;另一方面,我们需要让目标窗口获得焦点。

让目标窗口获得焦点。最简单的方法是手动操作,点击一下。当然也可以用FindWindow函数,或者由程序启动目标程序并获得句柄,然后调用winapi使其获得焦点。由于需求是按回车键开始模拟按键,手动操作即可,这里不多赘述。

模拟按键一般使用函数Keybd_event。函数有4个参数,一般情况下,第2、4个参数置0即可,第1个参数是按键的虚拟键码,第3个参数是按键状态,0是按下,KEYEVENTF_KEYUP是抬起。注意按下和抬起之间建议Sleep几毫秒,否则目标窗口可能无法获取到按键信息。

模拟鼠标点击一般使用mouse_event,一般与SetCursorPos(x,y)函数一起使用。与Keybd_event类似,mouse_event有5个参数。第1个为dwFlags,如下图。第2、3个参数分别表示鼠标的相对位置,一般置0。第4个参数是dwData,滚轮移动数量,正值向前,负值向后。第5个参数一般置0。

使用方法与Keybd_event函数相似。用SetCursorPos(x,y)函数将鼠标光标移到指定位置(距离屏幕左边x,距离屏幕上边y),用mouse_event模拟鼠标点击。也可以先用mouse_event鼠标按下后,再用SetCursorPos(x,y)模拟鼠标拖动。最好中间也Sleep几毫秒。

请点击输入图片描述

GetKeyState_百度百科

GetAsyncKeyState_百度百科

mouse_event 易语言 相对移动的问题

示例:

.版本2

.DLL命令 模拟鼠标_, , "user32.dll", "mouse_event", , mouse_event,模拟一次鼠标事件

.参数 标志组合, 整数型, , dwFlags,一系列标志的组合

.参数 水平方向, 整数型, , dx,参见相关帮助

.参数 垂直方向, 整数型, , dy,参见相关帮助

.参数 数据信息, 整数型, , cButtons,未使用

.参数 扩展数据信息, 整数型, , dwExtraInfo,通常未用的一个值

.版本 2

.子程序 鼠标移动, , , 模拟鼠标移动

.参数 水平坐标, 整数型, , 水平坐标

.参数 垂直坐标, 整数型, , 垂直坐标

_移动鼠标 (水平坐标, 垂直坐标)

这样。

如果想移动的话可以这样:

.版本 2

.子程序 鼠标移动, , , 模拟鼠标移动,单位像素点

.参数 右移像素, 整数型, ,

.参数 下移像素, 整数型, ,

_移动鼠标 (取鼠标水平位置 () + 右移像素, 取鼠标垂直位置 () + 下移像素)

(责任编辑:IT教学网)

更多