C++ DirectInput 模拟鼠标移动 DLL 代码示例
#define DIRECTINPUT_VERSION 0x0800 #include <dinput.h>
#pragma comment(lib, "dinput8.lib") #pragma comment(lib, "dxguid.lib")
LPDIRECTINPUT8 g_pDI = NULL; LPDIRECTINPUTDEVICE8 g_pMouse = NULL;
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: // 初始化DirectInput DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&g_pDI, NULL);
// 创建鼠标设备
g_pDI->CreateDevice(GUID_SysMouse, &g_pMouse, NULL);
// 设置鼠标数据格式
g_pMouse->SetDataFormat(&c_dfDIMouse);
// 设置鼠标协作级别
g_pMouse->SetCooperativeLevel(NULL, DISCL_BACKGROUND | DISCL_NONEXCLUSIVE);
// 设置鼠标缓冲区大小
DIPROPDWORD dipdw;
dipdw.diph.dwSize = sizeof(DIPROPDWORD);
dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER);
dipdw.diph.dwObj = 0;
dipdw.diph.dwHow = DIPH_DEVICE;
dipdw.dwData = 16;
g_pMouse->SetProperty(DIPROP_BUFFERSIZE, &dipdw.diph);
// 启动鼠标设备
g_pMouse->Acquire();
break;
case DLL_PROCESS_DETACH:
// 释放鼠标设备
if (g_pMouse)
{
g_pMouse->Unacquire();
g_pMouse->Release();
g_pMouse = NULL;
}
// 释放DirectInput
if (g_pDI)
{
g_pDI->Release();
g_pDI = NULL;
}
break;
}
return TRUE;
}
// 模拟鼠标移动 void MoveMouse(int deltaX, int deltaY) { DIMOUSESTATE2 dims; memset(&dims, 0, sizeof(dims)); dims.lX = deltaX; dims.lY = deltaY;
g_pMouse->SetDataFormat(&c_dfDIMouse);
g_pMouse->Acquire();
g_pMouse->GetDeviceState(sizeof(DIMOUSESTATE2), &dims);
g_pMouse->Unacquire();
}
原文地址: https://www.cveoy.top/t/topic/naKQ 著作权归作者所有。请勿转载和采集!