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