当目标应用程序以管理员身份运行时,ShowWindowfunction不起作用
我正在编写一个显示/隐藏某个目标应用程序窗口的程序。 我之前正在测试它并注意到一些奇怪的东西。 如果我以管理员身份运行目标应用程序(右键单击 – >属性,“兼容性”选项卡,“以管理员身份运行此程序”)它不起作用。
为了演示我编写了一个名为“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文件:
TestShowWindow下载
您所要做的就是下载它们并运行TestApplication.exe然后运行TestShowWindow.exe。 您会发现通过将TestApplication.exe更改为以管理员身份运行会导致ShowWindow不再起作用。
当然,如果你不相信下载我的东西,你总是可以编译我的代码并在Windows中的任何目标应用程序上测试它,你可以改变其兼容性模式。
PS我不确定它是否有所作为,但我正在运行Windows 8 Pro。 64位。
这是设计的。 它是UAC中鲜为人知的双胞胎,称为UIPI或用户界面权限隔离。 一个没有提升的计划不能征服一个升级的计划。 鉴于UI自动化的function,这是一个明显的对策,可以阻止程序劫持升级过程的function。 安全违规称为破坏攻击 。
解决方法是为存储在c: windows或c: program文件中的程序提供uiAccess = true的清单,并提供证书。 并且目标程序调用ChangeWindowMessageFilter以允许发送某些消息。 在你的情况下,应该是WM_SHOWWINDOW。
如果您不介意像您一样将窗口最小化到任务栏; 通常,您可以通过使用SC_RESTORE或SC_MINIMIZE的wParam发布WM_SYSCOMMAND来显示和隐藏升级进程中的窗口。
上述就是C#学习教程:当目标应用程序以管理员身份运行时,ShowWindowfunction不起作用分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。
如若转载,请注明出处:https://www.ctvol.com/cdevelopment/1004303.html