1

以下のコードを理解するのに苦労しています。そして、私はそれについての良い説明に罰金を科すことはできません。質問があるコード セグメントの横にコメントを残しました。

  void LeftClick ( )
        {  
          INPUT input = {0};

           // left down 
          input.type      = INPUT_MOUSE;
          input.mi.dwFlags  = MOUSEEVENTF_LEFTDOWN;
          ::SendInput(1,&input,sizeof(INPUT));

          // left up
          ::ZeroMemory(&input,sizeof(INPUT)); // why zeroMemory? removing this code changes nothing that i can tell
          input.type      = INPUT_MOUSE; // why reset this variable? is it not already set?

          input.mi.dwFlags  = MOUSEEVENTF_LEFTUP;
          ::SendInput(1,&input,sizeof(INPUT));
        }

http://forums.codeguru.com/showthread.php?377394-Windows-SDK-User-Interface-How-can-I-emulate-mouse-events-in-an-applicationでこのコードを取得しました

4

1 に答える 1

4

ZeroMemory 関数は、指定された構造体のすべてのデータをクリアします。これが、コードで変数inputをリセットする必要がある理由です。input.type

ドキュメント: http://msdn.microsoft.com/en-us/library/windows/desktop/aa366920(v=vs.85).aspx

実際に私が書いた古いコードを調べてみましたが、ZeroMemory マクロはまったく使用していませんでした。設定された両方の値が再びリセットされるため、これは本当に不要です。

于 2013-07-02T21:21:02.963 に答える