这段代码本身没有明显的错误,但需要注意以下几点:

  1. 需要在项目中添加对dinput8.lib和dxguid.lib的引用。
  2. 在使用DirectInput时,需要在程序开始前调用CoInitialize(NULL)函数初始化COM库。
  3. 在调用DirectInput8Create函数时,第一个参数应该传入NULL而不是GetModuleHandle(NULL)。
  4. 在获取鼠标状态后,应该使用g_pMouse->SetDeviceState函数来设置鼠标状态,而不是再次调用g_pMouse->GetDeviceState函数。

修改后的代码如下:

#include "pch.h"

#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: // 初始化COM库 CoInitialize(NULL);

	// 初始化DirectInput
	DirectInput8Create(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;
	}

	// 释放COM库
	CoUninitialize();
	break;
}

return TRUE;

}

// 模拟鼠标移动 void MoveMouse(int deltaX, int deltaY) { DIMOUSESTATE2 dims; memset(&dims, 0, sizeof(dims));

// 先 Acquire 鼠标设备
g_pMouse->Acquire();

// 获取设备状态
if (SUCCEEDED(g_pMouse->GetDeviceState(sizeof(DIMOUSESTATE2), &dims)))
{
	// 修改鼠标状态
	dims.lX += deltaX;
	dims.lY += deltaY;

	// 设置鼠标状态
	g_pMouse->SetDeviceState(sizeof(DIMOUSESTATE2), &dims);
}

// 释放鼠标设备
g_pMouse->Unacquire();

}

这段代码无法正常运行帮我修改一下#include pchh#define DIRECTINPUT_VERSION 0x0800#include dinputh#pragma commentlib dinput8lib#pragma commentlib dxguidlibLPDIRECTINPUT8 g_pDI = NULL;LPDIRECTINPUTDEVICE8 g_pMouse = NULL

原文地址: https://www.cveoy.top/t/topic/bG7u 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录