【问题标题】:Programmatically double click on systemtray icons Windows xp/7以编程方式双击系统托盘图标 Windows xp/7
【发布时间】:2011-10-14 03:33:13
【问题描述】:

如何以编程方式双击 Windows xp/7 中的系统托盘图标并打开应用程序窗口?

【问题讨论】:

  • 您试图以错误的方式解决此问题。向应用程序发送一条消息,要求它打开。不要尝试双击图标。您无法在 Windows XP 7 中可靠地完成这项工作。

标签: c# c++ winapi windows-7 windows-xp


【解决方案1】:

你想打开你自己的App的程序吗?然后你可以向这个进程发送消息来强制它打开。

本文可以帮助您在进程之间发送消息。 send message to other process

【讨论】:

    【解决方案2】:

    你不能。使用 Spy++ 看起来“用户提升通知区域”无法单击按钮,并且您无法控制可见的图标。

    【讨论】:

      【解决方案3】:

      您可以使用http://msdn.microsoft.com/en-us/library/ms646310.aspx 向操作系统发送输入并双击特定位置:

      void MouseMove (double x, double y ) 
      {
          double fx = x*65535.0f;
          double fy = y*65535.0f;
          INPUT  Input={0};
          Input.type      = INPUT_MOUSE;
          Input.mi.dwFlags  = MOUSEEVENTF_MOVE|MOUSEEVENTF_ABSOLUTE;
          Input.mi.dx = (long)fx;
          Input.mi.dy = (long)fy;
          ::SendInput(1,&Input,sizeof(INPUT));
      }
      void lClick(){
          INPUT Input={0};
          // left down
          Input.type = INPUT_MOUSE;
          Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
          ::SendInput(1,&Input,sizeof(INPUT));
          ::ZeroMemory(&Input,sizeof(INPUT));
          // left up
          Input.type = INPUT_MOUSE;
          Input.mi.dwFlags  = MOUSEEVENTF_LEFTUP;
          ::SendInput(1,&Input,sizeof(INPUT));
      }
      

      然后在图标所在的地方调用mousemove,并单击两次。 但这意味着程序任务栏图标不会移动...取决于程序是什么,以及您是否了解计算机。

      【讨论】:

        猜你喜欢
        • 2012-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多