我似乎在这里陷入了死胡同。我有一个项目执行以下操作:
这工作正常,但不起作用的是,当表单显示时,它不会激活。
现在,在我将app.manifest修改为requireAdmin
之前,它工作正常。每当表格显示时,它就会活跃起来。
但是现在我正在以管理员身份运行该表单,因为我需要能够使用它来控制我们的其他应用程序(也是以管理员身份运行),表单出现就好了但是没有不要激活。
我试过了:
- Form_Load方法内部的TopMost = true
- 使用Form_Load上的表单句柄调用SetForegroundWindow
- 在Form_Load上调用ShowDialog
,并在构建表单时尝试使用它。
- 在Form_Load上调用Activate
以及在构建表单时调用
这是我的布局:
再次,在app.manifest中没有UAC和requireAdmin
,这很好。但是一旦它作为管理员运行,nope,就不会留在前面。
我知道MS已经对更高版本的Windows(Vista,7,8)的SetForegroundWindow
要求更加严格,但我真的需要能够将此表单显示为最顶层的活动窗口(如上下文菜单)。
我该如何正确地做到这一点?
答案 0 :(得分:1)
您可以将程序拆分为两个,非管理员需要一半位于托盘中并监视中间按钮,另一半需要管理员权限,按下鼠标按钮时启动。然后,非提升的一半可以根据需要拨打SetForegroundWindow
或AllowSetForegroundWindow
。
如果您希望每次都可以通过CoCreateInstanceAsAdmin
方法缓存COM提升对象而避免UAC提示,并重复使用它。