全局模拟window键盘消息和鼠标消息

可以实现模拟鼠标滚轮滑动,键盘,键盘加鼠标的组合,唯一问题是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()
{
}
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 中可以使用 AWT 和 Swing 提供的事件监听机制来实现全局监听键盘鼠标的功能。 监听键盘事件: ```java import java.awt.event.KeyEvent; import java.awt.event.KeyListener; public class KeyboardListener implements KeyListener { @Override public void keyPressed(KeyEvent e) { // 处理键盘按下事件 // e.getKeyCode() 可以获取按下的键的代码 } @Override public void keyReleased(KeyEvent e) { // 处理键盘释放事件 } @Override public void keyTyped(KeyEvent e) { // 处理键盘输入事件 } } ``` 全局监听键盘事件: ```java import java.awt.Toolkit; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; public class GlobalKeyboardListener implements KeyListener { public GlobalKeyboardListener() { Toolkit.getDefaultToolkit().addAWTEventListener(event -> { if (event instanceof KeyEvent) { KeyEvent keyEvent = (KeyEvent) event; // 处理键盘事件 } }, AWTEvent.KEY_EVENT_MASK); } @Override public void keyPressed(KeyEvent e) { // 处理键盘按下事件 // e.getKeyCode() 可以获取按下的键的代码 } @Override public void keyReleased(KeyEvent e) { // 处理键盘释放事件 } @Override public void keyTyped(KeyEvent e) { // 处理键盘输入事件 } } ``` 监听鼠标事件: ```java import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class MouseListener implements MouseListener { @Override public void mouseClicked(MouseEvent e) { // 处理鼠标点击事件 // e.getButton() 可以获取点击的鼠标按钮 } @Override public void mousePressed(MouseEvent e) { // 处理鼠标按下事件 } @Override public void mouseReleased(MouseEvent e) { // 处理鼠标释放事件 } @Override public void mouseEntered(MouseEvent e) { // 处理鼠标进入事件 } @Override public void mouseExited(MouseEvent e) { // 处理鼠标离开事件 } } ``` 全局监听鼠标事件: ```java import java.awt.Toolkit; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class GlobalMouseListener implements MouseListener { public GlobalMouseListener() { Toolkit.getDefaultToolkit().addAWTEventListener(event -> { if (event instanceof MouseEvent) { MouseEvent mouseEvent = (MouseEvent) event; // 处理鼠标事件 } }, AWTEvent.MOUSE_EVENT_MASK); } @Override public void mouseClicked(MouseEvent e) { // 处理鼠标点击事件 // e.getButton() 可以获取点击的鼠标按钮 } @Override public void mousePressed(MouseEvent e) { // 处理鼠标按下事件 } @Override public void mouseReleased(MouseEvent e) { // 处理鼠标释放事件 } @Override public void mouseEntered(MouseEvent e) { // 处理鼠标进入事件 } @Override public void mouseExited(MouseEvent e) { // 处理鼠标离开事件 } } ``` 注意:全局监听键盘鼠标事件需要在启动程序时添加,否则可能监听不到事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值