2012-05-06 116 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; 

这对我的作品。