Функция ShowWindow не работает, когда целевое приложение запускается от имени администратора

Я пишу программу, которая показывает / скрывает окно какого-либо целевого приложения. Я проверял это раньше и заметил что-то странное. Если я запускаю целевое приложение от имени администратора (щелкните правой кнопкой мыши -> Свойства, вкладка «Совместимость», «Запустите эту программу от имени администратора»), оно не будет работать.

Для демонстрации я написал простое приложение с графическим интерфейсом под названием «TargetApplication», а затем написал следующий код, чтобы протестировать показ / скрытие этого приложения:

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);
}

Если я запускаю оконное приложение без прав администратора, оно не работает.

Кто-нибудь может проверить это для меня? Я загрузил .exe для обоих приложений здесь:

TestShowWindow Скачать

Все, что вам нужно сделать, это загрузить их и запустить TestApplication.exe, а затем запустить TestShowWindow.exe. Вы обнаружите, что, изменив TestApplication.exe для запуска от имени администратора, ShowWindow больше не работает.

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

Постскриптум Я не уверен, если это имеет значение, но я использую Windows 8 Pro. 64-битный.

Ответы на вопрос(2)

Ваш ответ на вопрос