2013-06-26 58 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

非常感謝您與屏幕保護程序的聯繫! –

相關問題