2015-12-28 6 views
1

Я использую C#, пытаясь восстановить калькулятор Windows 10, когда он сведен к минимуму или работает в фоновом режиме. Я пытаюсь использовать следующий код, но он не работает.Восстановить калькулятор Windows 10 при свертывании или запуске в фоновом режиме

 if (calcrunning == true & calcresponding == false) 
     { 
      MessageBox.Show("Running but suspended or minimized "); 
      //RunCalculator(); 
      IntPtr calcwindow = FindWindowByCaption(IntPtr.Zero, "Calculator"); 
      //ResumeProcess(calcwindow.Handle); 
      //ShowWindow(calcwindow, SW_MINIMIZE); 
      //ResumeThread(calcwindow); 
      //calc.Start(); 
      ShowWindow(calcwindow, SW_SHOW); 
      ShowWindow(calcwindow, SW_RESTORE); 
      SetForegroundWindow(calcwindow); 
     }   
    [DllImport("user32.dll")] 
    private static extern bool SetForegroundWindow(IntPtr hWnd); 

    [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)] 
    static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName); 

    [DllImport("user32.dll")] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    static extern bool ShowWindow(IntPtr hWnd, uint nCmdShow); 

    [DllImport("kernel32.dll")] 
    static extern int ResumeThread(IntPtr hThread); 

Любые идеи? SetForegroundWindow работает только в том случае, если калькулятор не минимизирован. Это не так, потому что это современное приложение?

ответ

1

Жизненный цикл приложения для UWP очень прост в отношении приостановленного состояния. В семействе настольных компьютеров приложения UWP приостанавливаются, когда они сводятся к минимуму, или когда Windows переходит в состояние низкого энергопотребления.

A uservoice has been raised on wpdev.uservoice.com, где Microsoft слушает предложения. Вам настоятельно рекомендуется голосовать на нем.

0

SetForegroundWindow документация довольно четко заявляет о ограничениях на использование. Как правило, вы не можете перенести произвольные окна на передний план.

0

Добавить это:

[DllImport("user32.dll")] 
private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow); 

       SetForegroundWindow(calcwindow); 
       ShowWindowAsync(calcwindow, SW_SHOWNORMAL); 

Он положил его на первый план, даже если она сведена к минимуму