【发布时间】:2011-10-14 03:33:13
【问题描述】:
如何以编程方式双击 Windows xp/7 中的系统托盘图标并打开应用程序窗口?
【问题讨论】:
-
您试图以错误的方式解决此问题。向应用程序发送一条消息,要求它打开。不要尝试双击图标。您无法在 Windows XP 和 7 中可靠地完成这项工作。
标签: c# c++ winapi windows-7 windows-xp
如何以编程方式双击 Windows xp/7 中的系统托盘图标并打开应用程序窗口?
【问题讨论】:
标签: c# c++ winapi windows-7 windows-xp
你想打开你自己的App的程序吗?然后你可以向这个进程发送消息来强制它打开。
本文可以帮助您在进程之间发送消息。 send message to other process
【讨论】:
你不能。使用 Spy++ 看起来“用户提升通知区域”无法单击按钮,并且您无法控制可见的图标。
【讨论】:
您可以使用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,并单击两次。 但这意味着程序任务栏图标不会移动...取决于程序是什么,以及您是否了解计算机。
【讨论】: