0

=)

Windows7 ラップトップで C++ (VC++ ではない) を使用しています。

マウスを現在の位置から x/y に移動するこの方法には問題があります。マウスイベントの送信入力を呼び出すたびに、マウスが移動しますが、画面もオフになります (Fn + F2 に相当)。プログラムをデバッグしたところ、値があるだけでなく、値miもあることに気付きました(これは x=25、y=25、absolure=false の場合です)。kihi

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

これがマウスだけでなくキーボード入力も送信している理由を誰でも理解できますか?! それは私のラップトップの構成と関係がありますか?

前もって感謝します!=)

4

2 に答える 2

3

他の人が変わる理由は、それらがすべて組合に属しているためであり、同じ記憶を共有しています.

画面消灯については、mi.time0に設定していないので未初期化です。多くの場合、これらの構造体を {0} に初期化することをお勧めします。そうすれば、忘れることがありません。タイムスタンプは乱数になり、ディスプレイでタイムアウトが発生する可能性があります。

于 2012-05-06T15:37:39.793 に答える