可以实现模拟鼠标滚轮滑动,键盘,键盘加鼠标的组合,唯一问题是360会阻碍对sendinput函数的调用。所以在桌面时会失效。当然解决这个问题我们必须通过winIO这个
桥梁实现。若大家感兴趣可以去看一看。后面我附上源码,请看友批评指正。
#include "stdafx.h"
#include "VirtualInput.h"#include "windows.h"
void VirtualInput::MouseLeftClick()
{
INPUT Input = { 0 };
// 左键按下
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
::SendInput(1, &Input, sizeof(INPUT));
// 左键抬起
::ZeroMemory(&Input, sizeof(INPUT));
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
::SendInput(1, &Input, sizeof(INPUT));
}
void VirtualInput::MouseRightClick()
{
INPUT Input = { 0 };
// 右键按下
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_RIGHTDOWN;
::SendInput(1, &Input, sizeof(INPUT));
// 右键抬起
::ZeroMemory(&Input, sizeof(INPUT));
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_RIGHTUP;
::SendInput(1, &Input, sizeof(INPUT));
}
void VirtualInput::MouseMove(int x, int y)
{
double fScreenWidth = ::GetSystemMetrics(SM_CXSCREEN) - 1;
double fScreenHeight = ::GetSystemMetrics(SM_CYSCREEN) - 1;
double fx = x*(65535.0f / fScreenWidth);
double fy = y*(65535.0f / fScreenHeight);
INPUT Input = { 0 };
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;
Input.mi.dx = (long)(fx);
Input.mi.dy = (long)(fy);
::SendInput(1, &Input, sizeof(INPUT));
}
//鼠标中伦点击事件
void VirtualInput::MouseWheelClick()
{
INPUT Input = { 0 };
// 设置滚轮量
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_WHEEL;
Input.mi.mouseData = 500;
::SendInput(1, &Input, sizeof(INPUT));
}
//离开用户方向滚动
void VirtualInput::MouseWheelDirectUp(int wheelUValue)
{
INPUT Input = { 0 };
// 设置滚轮量
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_WHEEL;
Input.mi.mouseData = wheelUValue*120;
::SendInput(1, &Input, sizeof(INPUT));
}
//进入用户方向滚动
void VirtualInput::MouseWheelDirectDown(int wheelDValue)
{
INPUT Input = { 0 };
// 设置滚轮量
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_WHEEL;
Input.mi.mouseData = -wheelDValue*120;
::SendInput(1, &Input, sizeof(INPUT));
}
//
void VirtualInput::MouseDLeftClick()
{
INPUT Input = { 0 };
// 左键按下
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
::SendInput(1, &Input, sizeof(INPUT));
// 左键抬起
::ZeroMemory(&Input, sizeof(INPUT));
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
::SendInput(1, &Input, sizeof(INPUT));
::ZeroMemory(&Input, sizeof(INPUT));
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
::SendInput(1, &Input, sizeof(INPUT));
// 左键抬起
::ZeroMemory(&Input, sizeof(INPUT));
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
::SendInput(1, &Input, sizeof(INPUT));
}
void VirtualInput::MouseLDragStart()
{
INPUT Input = { 0 };
// 左键按下
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
::SendInput(1, &Input, sizeof(INPUT));
}
void VirtualInput::MouseLDragMove(int x, int y)
{
MouseMove(x, y);
}
void VirtualInput::MouseLDragEnd()
{
INPUT Input = { 0 };
// 左键抬起
::ZeroMemory(&Input, sizeof(INPUT));
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
::SendInput(1, &Input, sizeof(INPUT));
}
void VirtualInput::MouseRDragStart()
{
INPUT Input = { 0 };
// 左键按下
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
::SendInput(1, &Input, sizeof(INPUT));
}
void VirtualInput::MouseRDragMove(int x, int y)
{
MouseMove(x, y);
}
void VirtualInput::MouseRDragEnd()
{
INPUT Input = { 0 };
// 左键抬起
::ZeroMemory(&Input, sizeof(INPUT));
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
::SendInput(1, &Input, sizeof(INPUT));
}
void VirtualInput::KeyBordDown(int vk)
{
//INPUT Input = { 0 };
右键按下
//Input.type = INPUT_KEYBOARD;
//Input.mi.dwFlags = KEYEVENTF_KEYUP;
//::SendInput(1, &Input, sizeof(INPUT));
keybd_event(vk, 0, 0, 0);
}
void VirtualInput::KeyBordUp(int vk)
{
//INPUT Input = { 0 };
右键按下
//Input.type = INPUT_KEYBOARD;
//Input.mi.dwFlags = KEYEVENTF_KEYUP;
//::SendInput(1, &Input, sizeof(INPUT));
keybd_event(vk, 0, KEYEVENTF_KEYUP, 0);
}
void VirtualInput::KeyBord(int vk)
{
keybd_event(vk, 0, 0, 0);
}
VirtualInput::VirtualInput()
{
}
VirtualInput::~VirtualInput()
{
}