您的位置:首页 > 其它

[置顶] 全局模拟window键盘消息和鼠标消息

2017-03-15 11:05 477 查看
可以实现模拟鼠标滚轮滑动,键盘,键盘加鼠标的组合,唯一问题是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()

{

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: