我正在使用SendInput()发送鼠标的相对位置。先生病了你在做什么。当我使用SendInput发送鼠标光标位置时,屏幕会变黑。
我用我的手指移动鼠标。因此,我首先在640x480的图像中跟踪手指,并获取图像中像素的绝对位置。
然后我发送该位置到以下方法来使用发送输入生成相对鼠标位置命令。
当手指进入左边界(xlim1)或右边界(xlim2)时,根据限制水平向左或向右水平滚动。 问题是当我运行代码,并且当光标开始移动时,屏幕变为黑色。 (cx> = prevX & & cx> xlim2){....}部分,那么它就起作用..(所以当手指指向图像的右侧极限时,保持水平向右滚动。注释部分启用左侧水平滚动)。
如果这是第一次,bool第一个变量将成立,我们捕获手指。否则它是错误的。
void movMouse(int cx, int cy, bool first){
static int prevX = 0;
static int prevY = 0;
static int leftPrevX;
static int rightPrevX;
int mx,my;
if(first == true){
prevX = cx;
prevY = cy;
}
else{
mx = (cx - prevX);
my = (cy - prevY);
if(cx <= prevX && cx < xlim1){
mx = -20;
INPUT input;
input.type = INPUT_MOUSE;
input.mi.mouseData = 0;
input.mi.dx = -(mx);
input.mi.dy = (my);
input.mi.dwFlags = MOUSEEVENTF_MOVE;
SendInput(1, &input, sizeof(input));
}
else if(cx >= prevX && cx > xlim2){
mx = 20;
INPUT input;
input.type = INPUT_MOUSE;
input.mi.mouseData = 0;
input.mi.dx = -(mx);
input.mi.dy = (my);
input.mi.dwFlags = MOUSEEVENTF_MOVE;
SendInput(1, &input, sizeof(input));
}
else {
INPUT input;
input.type = INPUT_MOUSE;
input.mi.mouseData = 0;
input.mi.dx = -(mx);
input.mi.dy = (my);
input.mi.dwFlags = MOUSEEVENTF_MOVE;
SendInput(1, &input, sizeof(input));
}
prevX = cx;
prevY = cy;
}
}
生成鼠标输入和“屏幕变黑”之间没有明显的联系。你的代码存在一个缺陷,你不能完全初始化INPUT结构,为MOUSEINPUT.time和.dwExtraInfo生成假数据。使用'INPUT input = {};“确保你调用这段代码后有一个合理的延迟。 –
它工作!!!!!!!!!! .....哇你救了我的生命...我不能感谢你足够!!!!!! ......... – user2389323