[英]SendInput sending mouse input AND keyboard input
=)
我在Windows7筆記本電腦上使用C ++(不是VC ++)。
使用此方法從當前位置移動鼠標x / y時,我遇到了問題。 每次它為鼠標事件調用send輸入時,它都會移動鼠標,但也會關閉我的屏幕(相當於Fn + F2)。 我調試了程序,發現mi
和ki
和hi
都具有值(這是x = 25,y = 25和absolure = false的值):
mi:
dx 25
dy 25
mouseData 0
dwFlags 1
time 2686400
dwExtraInfo 0
ki:
wVk 25
wScan 0
dwFlags 25
time 0
dwExtraInfo 1
hi:
uMsg 25
wParamL 25
wParamH 0
我嘗試將ki和hi設置為0,但是如果我這樣做,則mi也設置為0,然后沒有鼠標移動,但屏幕仍然處於睡眠狀態! :$
這是我使用的一些方法。
int Controller::mouse_move(long x, long y, bool absolute) {
mouse.dx = x;
mouse.dy = y;
if (absolute) {
mouse.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;
}else{
mouse.dwFlags = MOUSEEVENTF_MOVE;
}
mouse.mouseData = 0;
mouse.dwExtraInfo = 0;
input.type = INPUT_MOUSE;
input.mi = mouse;
SendInput(1, &input, sizeof (input));
return 0;
}
要么
int Controller::mouse_move(long x, long y, bool absolute, int index_vector_no) {
input.type = INPUT_MOUSE;
input.mi.dx = x;
input.mi.dy = y;
if (absolute) {
input.mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;
}else{
input.mi.dwFlags = MOUSEEVENTF_MOVE;
}
input.mi.mouseData = 0;
input.mi.dwExtraInfo = 0;
input.ki.dwExtraInfo = 0;
input.ki.dwFlags = 0;
input.ki.time = 0;
input.ki.wScan = 0;
input.ki.wVk = 0;
input.hi.uMsg = 0;
input.hi.wParamH = 0;
input.hi.wParamL = 0;
SendInput(1, &input, sizeof (input));
return 0;
}
有人能解釋為什么這會發送鍵盤輸入和鼠標嗎? 這與我的筆記本電腦配置有關嗎?
提前致謝! =)
其他人更改的原因是因為他們都在一個聯合體中,所以他們共享相同的內存。
關於屏幕關閉,您沒有將mi.time
設置為0,因此未初始化。 開始將這些結構初始化為{0}通常是一個好主意,這樣您就不會忘記事情。 時間戳變為某個隨機數,這可能會導致顯示器超時。
您可以使用此:
input.mi.time = 0;
之前:
input.mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP;
這個對我有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.