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 回答