C# 顶部的UAC窗口
我似乎在这里走到了死胡同。我有一个项目可以完成以下工作:C# 顶部的UAC窗口,c#,windows,winforms,winapi,C#,Windows,Winforms,Winapi,我似乎在这里走到了死胡同。我有一个项目可以完成以下工作: 只运行并停留在通知区域 当用户按下鼠标中键时,它显示一个窗体 然后用户可以从表单中选择任何内容,并感到高兴 这很好,但是不起作用的是,当窗体显示时,它不会激活 现在,在我将app.manifest修改为requireAdmin之前,它工作正常。无论何时显示表单,它都处于活动状态 但是现在我以管理员的身份运行表单,考虑到我需要能够用它控制我们的其他应用程序之一(也以管理员的身份运行),表单运行得很好,但不会激活 我试过: -TopMos
- 只运行并停留在通知区域
- 当用户按下鼠标中键时,它显示一个窗体
- 然后用户可以从表单中选择任何内容,并感到高兴
requireAdmin
之前,它工作正常。无论何时显示表单,它都处于活动状态
但是现在我以管理员的身份运行表单,考虑到我需要能够用它控制我们的其他应用程序之一(也以管理员的身份运行),表单运行得很好,但不会激活
我试过:
-TopMost=true
表单加载方法内部
-在表单加载时使用表单句柄调用setforegroundindow
-在表单加载时调用ShowDialog
,并在构建表单时尝试。
-在表单加载时以及在构建表单时调用激活
以下是我的布局:
- 程序运行,由于清单的原因需要UAC权限,用户同意,然后启动
- 只有一个通知图标出现,显示一个漂亮的小气泡,表示它正在运行
- Program.cs监视键盘/鼠标挂钩
- 当鼠标中键或任何键盘挂钩被触发时,它将创建一个新的表单对象
- 设置窗体应显示的位置
- 然后最后显示表单
requireAdmin
,这也可以正常工作。但是一旦它以管理员的身份运行,它就不会在前面了
我知道微软对更高版本的windows(Vista,7,8)的SetForeGroundIndow
要求更加严格,但我真的需要能够使此窗体显示为最顶部的活动窗口(如上下文菜单)
我怎样才能正确地做到这一点?你可以将你的程序分成两部分,一部分是非管理员需要的,它坐在托盘中,看着中间的按钮,另一部分是需要管理员许可的,当你按下鼠标按钮时,它会启动。然后,非提升的一半可以根据需要调用
setforegroundindow
或allowsetforegroundindow
如果您想避免每次都出现UAC提示,则可以通过
CoCreateInstanceAdmin
方法缓存COM提升对象并重复使用它。您犯了几个可用性错误。如果你想确保你的窗口得到前景的爱,那么你需要使用上下文菜单来激活它。不太清楚你指的是什么“罪恶”。我不是在记录密钥之类的东西。