发送输入发送鼠标输入和键盘输入

SendInput sending mouse input AND keyboard input

本文关键字:输入 键盘 鼠标      更新时间:2023-10-16

=)

我在Windows7笔记本电脑上使用C++(不是VC ++)。

我对这种将鼠标 x/y 从当前位置移动的方法有问题。每次它调用鼠标事件的发送输入时,它都会移动鼠标,但也会关闭我的屏幕(相当于 Fn+F2)。我调试了程序,注意到不仅mi而且kihi都有值(这是针对 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;

它对我有用。