C语言控制和鼠标键盘 (windows环境)

C语言控制鼠标点击以及键盘输入

使用场景

当需要实现一些重复的点击,或者自动输入的情况下,可以使用到类似的功能,例如网页的自动刷新,QQ的自动输入,(嘴炮连发也可以)等,自己发掘呗,传奇这种游戏挂机也是可以的。

主要的几个函数介绍

1.GetSystemMetrics()
这个函数主要用于获取当前电脑的分辨率,通过参数SM_CXSCREEN,SM_CYSCREEN,可以分别获取电脑分辨率的X和Y,例如电脑分辨率为1440*960,那么:
X_LEN=GetSystemMetrics(SM_CXSCREEN)
Y_LEN=GetSystemMetrics(SM_CYSCREEN)
X_LEN=1440,Y_LEN=960

2.mouse_event()
移动鼠标到指定位置,这里我们不需要去详细了解各个参数的内容,各位使用以下例子即可
mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MOVE, x * 65535/x_len, y * 65535/y_len, 0, 0);
其中,
x,y代表指定位置的坐标
x_len,y_len代表屏幕分辨率

常用动作:
//鼠标左键按下
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
//鼠标左键抬起
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

3.GetCursorPos()
通过函数GetCursorPos(POINT* ptB)可以获得当前鼠标所在的位置.
例如:
POINT ptB = { 0, 0 };
GetCursorPos(&ptB);//获取鼠标位置
ptB.x,ptB.y的值就是鼠标的当前位置值.

--------------------------* 通过以上几个函数可以实现例1 *---------------------

4.keybd_event()
通过keybd_event函数可以执行键盘动作,常用的情形有

keybd_event(put,0,0,0); // 第三个参数为0表示按下
keybd_event(put,0,2,0); // 第三个参数为2表示抬起
其中put表示按键码(章节尾有给出按键和按键码的映射表格)
*注意:表中,‘a’ ~ ‘z’的映射值与ASCALL中大写字母’A’ ~ 'Z’的值相同,这也意味着
keybd_event(‘A’,0,0,0);
keybd_event(‘A’,0,2,0);
可以直接模拟出键盘按下a键的操作,建立在这个基础上我实现了例2函数

实例

例1:在当前鼠标位置进行单击

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <windows.h>
int main(int argc,char *argv[])
{
	POINT ptB = { 0, 0 };
	int x_len,y_len;
	
	GetCursorPos(&ptB);//获取鼠标位置
	/*获取屏幕分辨率*/
	x_len=GetSystemMetrics(SM_CXSCREEN);
	y_len=GetSystemMetrics(SM_CYSCREEN);
	//将鼠标光标移动到 指定的位置     例子中屏幕分辨率1440x900  在鼠标坐标系统中,屏幕在水平和垂直方向上均匀分割成65535×65535个单元
	mouse_event(MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_MOVE, ptB.x * 65535/x_len, ptB.y * 65535/y_len, 0, 0);
	Sleep(50);//稍微延时50ms 
    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);//鼠标左键按下 
    mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);//鼠标左键抬起
    return 0;
}

例2:传入字符串(字母和数字),模拟键盘进行输入

void inputRun( const char *inStr)
{
    unsigned int i = 0;
	bool shiftFlag = false;
	char put;
	
	for(i=0; i <strlen(inStr);i++)
	{
		put = inStr[i];
		if(put >= 'a' && put <= 'z')
		{
			put = put-32;//小写时进行值的转换
		}
		else if(put >= 'A' && put <= 'Z')
		{
			//大写的时候按住shift
			keybd_event(16,0,0,0);
			shiftFlag = true;
		}
		keybd_event(put,0,0,0);
		keybd_event(put,0,2,0);

		if(shiftFlag == true)
		{
		    //松开shift
			keybd_event(16,0,2,0);
		}
		Sleep(60);
	}
}

键盘输入对应值

按键码映射表

  • 33
    点赞
  • 230
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
在C语言中,要捕获Windows鼠标点击和移动行为,你可以使用Windows API提供的函数来实现。以下是一个简单的示例代码: ```c #include <windows.h> // 鼠标事件处理函数 LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam) { // 判断是否是鼠标消息 if (nCode >= 0 && wParam == WM_MOUSEMOVE) { // 获取鼠标坐标 int xPos = LOWORD(lParam); int yPos = HIWORD(lParam); // 在此处可以处理鼠标移动事件 // ... } else if (nCode >= 0 && wParam == WM_LBUTTONDOWN) { // 获取鼠标坐标 int xPos = LOWORD(lParam); int yPos = HIWORD(lParam); // 在此处可以处理鼠标左键点击事件 // ... } // 调用下一个钩子 return CallNextHookEx(NULL, nCode, wParam, lParam); } int main() { // 安装鼠标钩子 HHOOK mouseHook = SetWindowsHookEx(WH_MOUSE_LL, MouseProc, NULL, 0); // 消息循环 MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } // 卸载钩子 UnhookWindowsHookEx(mouseHook); return 0; } ``` 这是一个基本的示例,它使用了Windows API提供的`SetWindowsHookEx`函数来安装一个鼠标钩子,并使用`WH_MOUSE_LL`参数指定钩子类型为低级鼠标钩子。然后,在`MouseProc`函数中,我们可以根据收到的消息类型进行处理。在示例中,我们处理了鼠标移动(`WM_MOUSEMOVE`)和鼠标左键点击(`WM_LBUTTONDOWN`)两种事件。 请注意,这只是一个简单的示例代码,实际使用时可能需要根据具体需求进行适当的修改和扩展。另外,需要注意钩子的安装和卸载的时机和方式,以确保正确地捕获鼠标事件并避免影响其他应用程序的正常运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值