2012-12-05 194 views
10

我想弄清楚SendInput函數的正確使用,這樣我就可以直接在屏幕上操作光標,所以對於基本的測試來看看事情是如何工作的,我做了這個簡短的片段應該將光標向右移動10個像素。理論上。SendInput讓系統進入睡眠狀態

#include <windows.h> 
#include <winable.h> 

int main() 
{ 
    INPUT joyInput; 
    joyInput.type = INPUT_MOUSE; 
    joyInput.mi.dx = 10; 
    joyInput.mi.dwFlags = MOUSEEVENTF_MOVE; 
    SendInput(1, &joyInput, sizeof(INPUT)); 
    return 0; 
} 

然而,在實踐中,SendInput函數或者是把我的電腦睡覺,或者至少切斷我的顯示器,這肯定是不想要的效果!評論這條線可以防止問題的發生,但顯然我需要它來執行任務。我究竟做錯了什麼?

+0

這是一個古老的線程,但我遇到了同樣的問題,並希望分享原因。如果您不在鼠標事件中應用時間數據,即使出於某種原因,它也可能會觸發屏幕關閉。也許它正在計算使用這些事件的輸入超時?這似乎只對測試有用,但對於生產代碼來說沒有意義。無論如何,你可以使用GetTickCount()來分配一個時間: joyInput.mi.time = GetTickCount(); – MonoQuemado

回答

7

MOUSEINPUT結構有三個成員,您沒有初始化 - dy,mouseDatatime。由於文檔沒有提及默認值,我假設程序可以自由地初始填充它想要的任何垃圾成員。您應該明確地設置值以避免這種情況。

#include <windows.h> 
#include <winable.h> 

int main() 
{ 
    INPUT joyInput; 
    joyInput.type = INPUT_MOUSE; 
    joyInput.mi.dx = 10; 
    joyInput.mi.dwFlags = MOUSEEVENTF_MOVE; 

    joyInput.mi.dy = 0; 
    joyInput.mi.mouseData = 0; 
    joyInput.mi.time = 0; 

    SendInput(1, &joyInput, sizeof(INPUT)); 
    return 0; 
} 
相關問題