C# ShowWindow功能不支持';目标应用程序以管理员身份运行时无法工作

C# ShowWindow功能不支持';目标应用程序以管理员身份运行时无法工作,c#,windows-8,administrator,showwindow,C#,Windows 8,Administrator,Showwindow,我正在编写一个显示/隐藏某个目标应用程序窗口的程序。我早些时候在测试它,发现了一些奇怪的东西。如果我以管理员身份运行目标应用程序(右键单击->属性,“兼容性”选项卡,“以管理员身份运行此程序”),则无法运行 为了演示,我编写了一个名为“TargetApplication”的简单GUI应用程序,然后编写了以下代码来测试显示/隐藏此应用程序: class Program { static void Main(string[] args) { IntPtr windowPtr = Fi

我正在编写一个显示/隐藏某个目标应用程序窗口的程序。我早些时候在测试它,发现了一些奇怪的东西。如果我以管理员身份运行目标应用程序(右键单击->属性,“兼容性”选项卡,“以管理员身份运行此程序”),则无法运行

为了演示,我编写了一个名为“TargetApplication”的简单GUI应用程序,然后编写了以下代码来测试显示/隐藏此应用程序:

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上载到此处:

您所要做的就是下载它们并运行TestApplication.exe,然后运行TestShowWindow.exe。您会发现,将TestApplication.exe更改为以管理员身份运行会导致ShowWindow不再工作

当然,如果你不相信下载我的东西,你可以编译我的代码,并在Windows中任何可以更改兼容模式的目标应用程序上进行测试


另外,我不确定这是否有什么不同,但我正在运行Windows 8 Pro。64位。

这是经过设计的。它是UAC的一对鲜为人知的孪生兄弟,称为用户界面特权隔离。未提升的程序无法征用提升的程序。考虑到UI自动化的功能,这显然是阻止程序劫持提升进程功能的一种对策。一种安全违规行为称为


解决方法是为存储在c:\windows或c:\program文件中并带有证书的程序提供uiAccess=true的清单。目标程序调用ChangeWindowMessageFilter以允许发送某些消息。在您的情况下,这应该是WM_SHOWWINDOW。

如果您不介意窗口表现得像您将其最小化到任务栏;通常,您可以通过发布WM_SYSCOMMAND(wParam为SC_RESTORE或SC_MINIMIZE)来显示和隐藏提升进程中的窗口。

Wow非常好的信息。有一件事我不明白,我有另一个程序,我没有写,做同样的事情,它的工作。是否有其他方法可以用来显示/隐藏不需要此解决方法的窗口?