Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 顶部的UAC窗口_C#_Windows_Winforms_Winapi - Fatal编程技术网

C# 顶部的UAC窗口

C# 顶部的UAC窗口,c#,windows,winforms,winapi,C#,Windows,Winforms,Winapi,我似乎在这里走到了死胡同。我有一个项目可以完成以下工作: 只运行并停留在通知区域 当用户按下鼠标中键时,它显示一个窗体 然后用户可以从表单中选择任何内容,并感到高兴 这很好,但是不起作用的是,当窗体显示时,它不会激活 现在,在我将app.manifest修改为requireAdmin之前,它工作正常。无论何时显示表单,它都处于活动状态 但是现在我以管理员的身份运行表单,考虑到我需要能够用它控制我们的其他应用程序之一(也以管理员的身份运行),表单运行得很好,但不会激活 我试过: -TopMos

我似乎在这里走到了死胡同。我有一个项目可以完成以下工作:

  • 只运行并停留在通知区域
  • 当用户按下鼠标中键时,它显示一个窗体
  • 然后用户可以从表单中选择任何内容,并感到高兴
这很好,但是不起作用的是,当窗体显示时,它不会激活

现在,在我将app.manifest修改为
requireAdmin
之前,它工作正常。无论何时显示表单,它都处于活动状态

但是现在我以管理员的身份运行表单,考虑到我需要能够用它控制我们的其他应用程序之一(也以管理员的身份运行),表单运行得很好,但不会激活

我试过: -
TopMost=true
表单加载方法内部 -在表单加载时使用表单句柄调用
setforegroundindow
-在表单加载时调用
ShowDialog
,并在构建表单时尝试。 -在表单加载时以及在构建表单时调用
激活

以下是我的布局:

  • 程序运行,由于清单的原因需要UAC权限,用户同意,然后启动
  • 只有一个通知图标出现,显示一个漂亮的小气泡,表示它正在运行
  • Program.cs监视键盘/鼠标挂钩
  • 当鼠标中键或任何键盘挂钩被触发时,它将创建一个新的表单对象
  • 设置窗体应显示的位置
  • 然后最后显示表单
同样,如果app.manifest中没有UAC和
requireAdmin
,这也可以正常工作。但是一旦它以管理员的身份运行,它就不会在前面了

我知道微软对更高版本的windows(Vista,7,8)的
SetForeGroundIndow
要求更加严格,但我真的需要能够使此窗体显示为最顶部的活动窗口(如上下文菜单)


我怎样才能正确地做到这一点?

你可以将你的程序分成两部分,一部分是非管理员需要的,它坐在托盘中,看着中间的按钮,另一部分是需要管理员许可的,当你按下鼠标按钮时,它会启动。然后,非提升的一半可以根据需要调用
setforegroundindow
allowsetforegroundindow


如果您想避免每次都出现UAC提示,则可以通过
CoCreateInstanceAdmin
方法缓存COM提升对象并重复使用它。

您犯了几个可用性错误。如果你想确保你的窗口得到前景的爱,那么你需要使用上下文菜单来激活它。不太清楚你指的是什么“罪恶”。我不是在记录密钥之类的东西。