2012-05-06 93 views
0

=)SendInput發送鼠標輸入和鍵盤輸入

我在Windows7筆記本電腦上使用C++(而不是VC++)。

我有個問題與該方法用於移動鼠標的x/y從它的當前位置。它調用的每個發送的輸入將鼠標移動到鼠標事件也時關閉我的屏幕(FN + F2的等價物)。我調試的程序,發現不僅沒有mikihi有值(這是爲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和喜爲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; 
} 

OR

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; 
} 

任何人都可以的事情這是爲什麼送鍵盤輸入以及鼠標?這只是我的筆記本電腦配置?

在此先感謝! =)

+1

き,心肌梗死和喜是工會 – chris

+0

我猜他們可能的了,但是這並不能解釋爲什麼它是把我的屏幕關閉! :/ Type標誌被設置爲INPUT_MOUSE,所以應該只適用於鼠標事件! – geekman92

+3

您是否將mi.time設置爲0?如果不這樣做,我會得到奇怪的結果。 – chris

回答

3

之所以別人改變是因爲他們都在一個工會,所以它們共享相同的存儲。

關於屏幕關閉,您沒有設置mi.time爲0,所以它的初始化。開始將這些結構初始化爲{0}通常是一個好主意,所以你不要忘記事情。時間戳變成一些隨機數,這可能會導致顯示超時。

+0

再次感謝,這真讓我困惑! =) – geekman92

1

您可以使用此:

input.mi.time = 0; 

前:

input.mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP; 

這對我的作品。