Funkcja ShowWindow nie działa, gdy aplikacja docelowa jest uruchomiona jako administrator

Piszę program, który pokazuje / ukrywa okno jakiejś aplikacji docelowej. Sprawdzałem to wcześniej i zauważyłem coś dziwnego. Jeśli uruchomię aplikację docelową jako Administrator (kliknij prawym przyciskiem myszy-> Właściwości, zakładka „Kompatybilność”, „Uruchom ten program jako administrator”), to nie działa.

Aby zademonstrować, napisałem prostą aplikację GUI o nazwie „TargetApplication”, a następnie napisałem następujący kod, aby przetestować pokazywanie / ukrywanie tej aplikacji:

class Program
{
  static void Main(string[] args)
  {
    IntPtr windowPtr = FindWindow(null, "TargetApplication");
    ShowWindow(windowPtr, 0); // 0 = Hide            
    Console.WriteLine("The window is now hidden. Press Enter to restore");
    Console.ReadLine();
    ShowWindow(windowPtr, 9); // 9 = Restore
    Console.WriteLine("The window is now restored. Press Enter to exit.");            
    Console.ReadLine();
  }

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

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

Jeśli uruchomię aplikację okienkową bez uprawnień administratora, to nie działa.

Czy ktoś mógłby mi to przetestować? Tutaj przesłałem pliki .exe dla obu aplikacji:

Pobierz TestShowWindow

Wszystko, co musisz zrobić, to pobrać je i uruchomić TestApplication.exe, a następnie uruchomić TestShowWindow.exe. Przekonasz się, że zmiana TestApplication.exe na uruchamianie jako Administrator powoduje, że ShowWindow przestaje działać.

Oczywiście, jeśli nie ufasz pobieraniu moich rzeczy, zawsze możesz skompilować mój kod i przetestować go na dowolnej aplikacji docelowej w systemie Windows, którą możesz zmienić w trybie zgodności.

P.S. Nie jestem pewien, czy to robi różnicę, ale używam Windows 8 Pro. 64-bit.

questionAnswers(2)

yourAnswerToTheQuestion