簡體   English   中英

將應用程序從最小化模式按時間(不是通過用戶交互)自動進入前台(在頂部最大化)

[英]Bringing the app into the foreground (maximized on top) from the minimize mode by time (Not by user interaction) automatically

必需:將應用程序從最小化模式按時間(不是通過用戶交互或確認)自動進入前台(在頂部最大化),無論是否有任何應用程序在前台運行。

實際行為:應用程序不會在頂部進入前台,只是在任務欄中閃爍(橙色)。

我們的要求:讓我們了解目的,我們有一個播放器,它具有一項名為屏幕保護程序的功能,例如 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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM