INPUT_MOUSE:鼠标不随给定的dx/dy值移动
INPUT_MOUSE: mouse does not move with given dx/dy values
我正在使用INPUT移动鼠标以设置光标位置。这很好,只是我不能使用屏幕值来移动光标。如果我想将光标从0设置为1680,我必须使用1680*0.66作为dx值来获得正确的位置(在游戏内部或桌面上)。
(我使用鼠标移动,因为我在游戏中设置光标位置,绝对定位在那里不起作用。我有两个屏幕,一个宽1680,另一个宽1280)
知道我为什么要使用这个因素吗?或者它是从哪里来的谢谢。
#define MOUSE_MOVE_FACTOR 0.6619
//Set mouse pos:
void setMousePos(int iX, int iY){
iX = (int)((double)iX*MOUSE_MOVE_FACTOR);
iY = (int)((double)iY*MOUSE_MOVE_FACTOR);
INPUT *buffer = new INPUT[1];
buffer->type = INPUT_MOUSE;
buffer->mi.dx = iX;
buffer->mi.dy = iY;
buffer->mi.mouseData = 0;
buffer->mi.dwFlags = MOUSEEVENTF_MOVE;
buffer->mi.time = 0;
buffer->mi.dwExtraInfo = 0;
SendInput(1,buffer,sizeof(INPUT));
Sleep(100 + (rand() % 50));
}
可能与鼠标加速有关。禁用它会导致不同的鼠标位置。
内存泄漏可能会给应用程序带来奇怪的事情,这可能会产生影响。
每次上第二次分配buffer
调用此函数时,都会导致内存泄漏
buffer = new INPUT[1];
根据MOUSEINPUT上的文档,如果dwFlags中未设置MOUSEEVENTF_ABSOLUTE,则dx/dy为相对坐标。尝试:
buffer->mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;
看看这是否有效。请注意,您必须将X/Y转换为规范化的绝对坐标,如文档所述,从0-65535。
我还想问你为什么要先把位置设置为(-3000,-3000)。我还想你不需要MOUSE_MOVE_factor的神奇因素,这可能是由于混淆了鼠标的相对/绝对坐标。
编辑:重读你的问题,我错过了你可能是故意使用鼠标相对位置。我想你的绝对定位可能因为没有使用标准化的绝对坐标而失败了(如果没有阅读整个文档,我自己也不会猜到)。还要注意1680x0.66=1109,这可能接近1024,我可能猜游戏的运行速度是1024x?决议
我知道这是旧的,但只适用于其他人。MOUSEINPUT和mouse_event的文档解释了绝对定位标准化为0-65535。
如果指定了MOUSEEVENTF_ABSOLUTE值,则dx和dy包含0和65535之间的归一化绝对坐标。事件该过程将这些坐标映射到显示表面上。坐标(0,0)映射到显示表面的左上角;坐标(6553565535)映射到右下角。在多监视器系统,坐标映射到主监视器。
因此,转换将是x/(w-1)*65535和y/(h-1)*665535。
- 从三角形3D顶点确定DZ/DX值
- 呼叫IASetVerteXbuffers会使以后对设备上下文的所有呼叫造成访问违规(DX 11)
- 为何选择值{1,1,1,0,-1,-1,-1,0,1}和{0,1,1,1,1,0,-1,-1,-1}]和dy [dir]
- 顶点开关DX
- 在运行时从OpenGL上下文切换到D3D/DX上下文(或其他上下文)
- 在有限差分法中使用的最佳ε/dx值是多少
- 如何使用createProcess()启动DX应用程序
- 鼠标输入:MOUSEEVENTF_MOVE移动不根据dx,dy
- INPUT_MOUSE:鼠标不随给定的dx/dy值移动
- 初始化DX时发生c++访问冲突
- 如何使用opengl或dx从网格中生成深度(高度)图像
- InstanceBuffer在DX 11_0中不起作用
- 这是做什么的?如果(无符号(dx) & lt;无符号(大小))
- 使用DX缩放对象
- 夏普DX:未找到方法 'get_BufferPointer()'
- 一个针对GNU++98 / libstdc++编译的应用程序可以链接到针对c++ 11 / libstdc++构建的dy
- 如何将 HWND 的位图 X, Y 转换为鼠标事件 dX, dY?
- 开发插件:DX或VST