2013-06-26 57 views
7

我正在使用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; 
} 

}

+0

生成鼠标输入和“屏幕变黑”之间没有明显的联系。你的代码存在一个缺陷,你不能完全初始化INPUT结构,为MOUSEINPUT.time和.dwExtraInfo生成假数据。使用'INPUT input = {};“确保你调用这段代码后有一个合理的延迟。 –

+0

它工作!!!!!!!!!! .....哇你救了我的生命...我不能感谢你足够!!!!!! ......... – user2389323

回答

6

尝试

ZeroMemory(&input,sizeof(input)); 

也intialize所有的变量,包括input.time 它为我工作:)

1

我碰到了同样的问题,即使我正在调用ZeroMemory并正确执行其他所有操作。我使用input.mi.time来通知Windows点击之间的间距,例如所以双击将正常工作。不过,我从远程计算机获取'时间'值。因为它们与本地计算机的时间不同,所以它导致Windows调用屏幕保护程序!为了解决这个问题,我添加了一些逻辑来检测计算机之间的偏差并使这些值彼此相符。

总结:确保input.mi.time为零或接近GetTickCount()的值。使用ZeroMemory初始化变量是一个很好的建议。

+0

非常感谢您与屏幕保护程序的联系! –

相关问题