[置顶] 全局模拟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()
{
}
桥梁实现。若大家感兴趣可以去看一看。后面我附上源码,请看友批评指正。
#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()
{
}
相关文章推荐
- java Robot 类模拟键盘按键和鼠标点击(全局模拟)
- C++实现全局鼠标、键盘消息hook,支持事件
- java Robot 类模拟键盘按键和鼠标点击(全局模拟)
- Java 实现全局(全操作系统)的键盘鼠标模拟
- 捕获全局鼠标键盘消息(用于拖拽)
- java Robot 类模拟键盘按键和鼠标点击(全局模拟)
- 全局钩子(hook鼠标键盘消息)
- 无法向某些窗口发送模拟键盘鼠标消息的问题
- java Robot 类模拟键盘按键和鼠标点击(全局模拟)
- C++模拟键盘鼠标消息
- Java 实现全局(全操作系统)的键盘鼠标模拟
- java Robot 类模拟键盘按键和鼠标点击(全局模拟)
- 使用SWT模拟鼠标键盘事件
- 模拟鼠标单击消息
- 如何模拟鼠标和键盘
- c#类,封装了键盘,和鼠标模拟,和内存读取
- VB.NET全局键盘鼠标钩子 [Vb.Net Hook](修正版)
- 用程序模拟键盘和鼠标键盘
- Android查询:模拟键盘鼠标事件(adb shell 实现)
- keybd_event跟SendMessage,PostMessage模拟键盘消息的区别 z