C++实现⿏标控制封装常见的模拟⿏标、键盘的操作函数API 或 MFC 视窗程序⾥有函数,
例如 API  函数设位置:
BOOL SetCursorPos( int x, int y);
参数是屏幕坐标x,y
头⽂件 Winuser.h
链接库 #pragma comment (lib, "User32.lib")
或取位置 GetCursorPos(&p);
显⽰⿏标 int ShowCursor( BOOL bShow);
mouse_event,  SendMessage都⾏
图形界⾯的程序都可以⽤⿏标啊,你可以查⼀下MFC或者QT。⽤它们可以很⽅便地编写带图形界⾯的程序。
可以⽤⼀系列的api实现:
::GetCursorPos,获取当前⿏标的位置
::SetCursorPos,移动⿏标到某⼀位置
mouse_event,⿏标动作,单击等,如mouse_event(MOUSEEVENTF_LEFTDOWN|MOUSEEVENTF_LEFTUP,0,0,0,0);是在当前位置单击⼀次
应⽤的实例如下:
#include
void main()
{
::SetCursorPos(10,10);
mouse_event(MOUSEEVENTF_LEFTDOWN|MOUSEEVENTF_LEFTUP,0,0,0,0);
}
实现把⿏标移动到x=10,y=10这个位置,然后单击⼀下。
控制台模拟⿏标、键盘操作
模拟⿏标、键盘操作,能让命令⾏顿然强⼤,想想,制作批处理版屏幕键盘等都不在话下(已制作过,效果很不错)。虽然这也跟CUI⽆关。本教程教会你如何让命令⾏模拟⿏标、键盘的操作。
⿏标的击键操作,需要⽤到mouse_event这个API函数。
⽰例代码:
模拟左键单击:
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
注意到了,其实⼀次击键是由两部分组成的:按下与释放。所以模拟⼀次单击要有DOWN及UP两次。
其他键位的属性如下,更改以上代码即可实现:
MOUSEEVENTF_RIGHTDOWN、MOUSEEVENTF_RIGHTUP;
MOUSEEVENTF_MIDDLEDOWN、MOUSEEVENTF_MIDDLEUP;
模拟⿏标移位需要⽤到SetCursorPos这个API函数。尽管mouse_event也能实现模拟移位的效果,但是个⼈认为⽤SetCursorPos可能要简单⼀点。
⽰例代码:
将⿏标移位到屏幕(120,100)处:
SetCursorPos(120,100);
模拟键盘击键,可以使⽤keybd_event这个API函数。这个API函数没有太多需要注意的地⽅,直接看⽰例代码:
模拟按下A键:
keybd_event(65,0,0,0);
keybd_event(65,0,KEYEVENTF_KEYUP,0);
可以发现,跟mouse_event⼀样,也有按下和释放两个部分。65是A的ASCII码(也可称为扫描码),
其他键位对应的码值可以查Winuser.h中“Virtual Keys, Standard Set”的部分。
//mouse.h
//模拟⿏标的常见操作
#pragma once
#include
class MOUSE
{
private:
//坐标变量
POINT point;
public:
/
/移动类函数
void    Move(int x,int y);
void    RelativeMove(int cx,int cy);
void    SavePos();
void    RestorePos();
//锁定启⽤类
void    Lock();
void    Unlock();
//动作类
void    LBClick();
void    LBDbClick();
void    LBDown();
void    LBUp();
void    RBClick();
void    RBDbClick();
void    RBDown();
void    RBUp();
void    MBClick();
void    MBDbClick();
void    MBDown();
void    MBUp();
void    MBRoll(int ch);
};
//移动⿏标到绝对位置(X坐标,Y坐标)
void MOUSE::Move(int x,int y)
{
this->point.x=x;
this->point.y=y;
::SetCursorPos(x,y);
}
//移动⿏标到相对位置(X位移,Y位移)
void MOUSE::RelativeMove(int cx,int cy)
{
:
:GetCursorPos(&this->point);
this->point.x+=cx;
this->point.y+=cy;
::SetCursorPos(this->point.x,this->point.y);
}
//保存当前位置()
void MOUSE::SavePos()
{
::GetCursorPos(&this->point);
}
//恢复⿏标位置()
void MOUSE::RestorePos()
{
::SetCursorPos(this->point.x,this->point.y);
}
//锁定⿏标()
void MOUSE::Lock()
{
POINT    pt;
RECT    rt;
::GetCursorPos(&pt);
rt.left=rt.right=pt.x;
rt.right++;
rt.bottom++;
::ClipCursor(&rt);
}
//解锁⿏标()
void MOUSE::Unlock()
{
::ClipCursor(NULL);
}
//左键单击()
void MOUSE::LBClick()
{
this->SavePos();
::mouse_event(MOUSEEVENTF_LEFTDOWN|MOUSEEVENTF_LEFTUP,this->point.x,this->point.y,0,0); }
//左键双击()
void MOUSE::LBDbClick()
{
this->SavePos();
::mouse_event(MOUSEEVENTF_LEFTDOWN|MOUSEEVENTF_LEFTUP,this->point.x,this->point.y,0,0);    ::mouse_event(MOUSEEVENTF_LEFTDOWN|MOUSEEVENTF_LEFTUP,this->point.x,this->point.y,0,0); }
/
/左键按下()
void MOUSE::LBDown()
{
this->SavePos();
::mouse_event(MOUSEEVENTF_LEFTDOWN,this->point.x,this->point.y,0,0);
}
//左键抬起()
void MOUSE::LBUp()
//右键单击()
void MOUSE::RBClick()
{
this->SavePos();
::mouse_event(MOUSEEVENTF_RIGHTDOWN|MOUSEEVENTF_RIGHTUP,this->point.x,this->point.y,0,0); }
//右键双击()
void MOUSE::RBDbClick()
{
this->SavePos();
::mouse_event(MOUSEEVENTF_RIGHTDOWN|MOUSEEVENTF_RIGHTUP,this->point.x,this->point.y,0,0);    ::mouse_event(MOUSEEVENTF_RIGHTDOWN|MOUSEEVENTF_RIGHTUP,this->point.x,this->point.y,0,0); }
//右键按下()
void MOUSE::RBDown()
{
this->SavePos();
::mouse_event(MOUSEEVENTF_RIGHTDOWN,this->point.x,this->point.y,0,0);
}
//右键抬起()
void MOUSE::RBUp()
{
this->SavePos();
::mouse_event(MOUSEEVENTF_RIGHTUP,this->point.x,this->point.y,0,0);
}
//中键单击()
void MOUSE::MBClick()
{
this->SavePos();
::mouse_event(MOUSEEVENTF_MIDDLEDOWN|MOUSEEVENTF_MIDDLEUP,this->point.x,this->point.y,0,0); }
//中键双击()
void MOUSE::MBDbClick()
{
this->SavePos();
::mouse_event(MOUSEEVENTF_MIDDLEDOWN|MOUSEEVENTF_MIDDLEUP,this->point.x,this->point.y,0,0);    ::mouse_event(MOUSEEVENTF_MIDDLEDOWN|MOUSEEVENTF_MIDDLEUP,this->point.x,this->point.y,0,0); }
/
/中键按下()
void MOUSE::MBDown()
{
this->SavePos();
::mouse_event(MOUSEEVENTF_MIDDLEDOWN,this->point.x,this->point.y,0,0);
}
//中键抬起()
void MOUSE::MBUp()
{
this->SavePos();
::mouse_event(MOUSEEVENTF_MIDDLEUP,this->point.x,this->point.y,0,0);
}
//中键滚动(滚动位移)
void MOUSE::MBRoll(int ch)
/
//keyboard.h
//模拟键盘的常见操作
/字符串比较函数实现
#pragma once
#include
class KEYBOARD
{
public:
void    PressStr(char *str);
void    PressKey(BYTE bVk);
void    KeyDown(BYTE bVk);
void    KeyUp(BYTE bVk);
};
//按键(虚拟键值)
void KEYBOARD::PressKey(BYTE bVk)
{
::keybd_event(bVk,0,0,0);
::keybd_event(bVk,0,KEYEVENTF_KEYUP,0);
}
//按下(虚拟键值)
void KEYBOARD::KeyDown(BYTE bVk)
{
::keybd_event(bVk,0,0,0);
}
//抬起(虚拟键值)
void KEYBOARD::KeyUp(BYTE bVk)
{
::keybd_event(bVk,0,KEYEVENTF_KEYUP,0);
}
/
/发送字符串(字符串)
void KEYBOARD::PressStr(char *str)
{
for (unsigned i=0;i
{
if (str[i]>0x60 && str[i]<0x7B)
this->PressKey(str[i]-0x20);
else
this->PressKey(str[i]);
}
}
BOOL SetCursorPos(
  int X, // horizontal position
  int Y // vertical position
  );
  设置⿏标位置。⿏标指针在屏幕像素坐标系统中的X,Y位置
  这个函数是⽤来设置Mouse位置的。可以⽤这个函数来移动mouse在屏幕上的移动。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。