如何解决自动按时间不通过用户交互将应用程序从最小化模式置于前台最大化显示在顶部
必需项:是否按时间(不通过用户交互或确认)自动从最小化模式将应用程序置于前台(最大化显示在顶部)。
实际行为:应用程序没有出现在顶部,只是在任务栏中闪烁(橙色)。
我们的要求:让我们了解一下目的,我们拥有一个播放器,该播放器具有一个名为“屏幕保护程序”的功能,例如Windows屏幕保护程序。当用户以任何方式与设备进行交互时,我们的应用程序就会启动并播放,我们将其最小化,用户继续在设备中工作,完成并离开,然后设备在一段时间内处于空闲状态(无用户交互),那么我们的应用程序必须进入前台并播放等等。
我尝试了多种方法将应用程序置于前台,但是它们都没有起作用,尽管它确实尝试使应用程序启动但并未进入前台,只是使任务栏中的应用程序图标闪烁。
如果我们按时间将应用程序启动到紧凑视图中,则应用程序会启动,但仍会在运行到前台的所有应用程序中排在最前面。
当我们从调试(由Visual Studio)启动应用程序时,无论我们正在开发的任何应用程序,应用程序都会及时出现在前台或完美地进行编码。
但是,当我们从启动启动应用程序(安装后-无调试)时,用户与设备进行交互(例如按鼠标或鼠标移动),则应用程序会按照逻辑进入最小化模式,并等待一段时间而没有打开任何应用程序(位于桌面上) )提供的应用程序进入前景很好,但是如果用户在我们的应用程序处于最小化模式下打开任何应用程序,则它不会进入前景,只是在任务栏中闪烁应用程序图标。
我们还尝试通过桌面扩展桥应用程序将应用程序启动到前台,但仍然发现相同的行为。
解决方法
[DllImport("user32.dll")]
public static extern bool ShowWindow(IntPtr hWnd,int nCmdShow);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool IsWindowVisible(IntPtr hWnd);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool IsIconic(IntPtr hWnd);
public delegate bool EnumedWindow(IntPtr handleWindow,ArrayList handles);
[DllImport("user32.dll",CharSet = CharSet.Auto,SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool EnumWindows(EnumedWindow lpEnumFunc,ArrayList lParam);
public static ArrayList GetAllWindows()
{
ArrayList windowHandles = new ArrayList();
EnumedWindow callBackPtr = GetWindowHandle;
EnumWindows(callBackPtr,windowHandles);
return windowHandles;
}
private static bool GetWindowHandle(IntPtr windowHandle,ArrayList windowHandles)
{
if (IsWindowVisible(windowHandle))
{
if (IsIconic(windowHandle))
{
ShowWindow(windowHandle,3); //SW_MAXIMIZE
}
}
return true;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。