我在这里似乎陷入了死胡同。我有一个执行以下操作的项目:
- 只是运行并停留在通知区域
- 当用户按下鼠标中键时,它会显示一个表单
- 然后,用户可以从表单中选择任何内容,并感到高兴。
这工作得很好,但是不起作用的是当显示表单时,它不会激活。
现在,在我将 app.manifest 修改为之前requireAdmin
,它工作正常。每当显示表格时,它就会被激活。
但是现在我以管理员身份运行表单,因为我需要能够使用它来控制我们的其他应用程序之一(也以管理员身份运行),表单出现得很好,但没有激活.
我尝试过: -TopMost = true
在 Form_Load 方法内部 - 在 Form_LoadSetForegroundWindow
上使用表单句柄调用 - 在 Form_Load 上调用ShowDialog
并在构建表单时尝试过。- 调用Activate
Form_Load 以及何时构建表单
这是我的布局:
- 程序运行,由于清单需要 UAC 权限,用户同意,它开始
- 只出现一个通知图标,显示一个漂亮的小气泡,表示它正在运行
- Program.cs 监控键盘/鼠标钩子
- 当鼠标中键或任何键盘钩子被触发时,它会创建一个新的表单对象
- 设置表单应该出现的位置
- 然后最后显示表格。
同样,没有 UAC 和requireAdmin
app.manifest 内部,这工作正常。但是一旦它以管理员身份运行,不,不会留在前面。
我知道 MS 对SetForegroundWindow
更高版本的 Windows(Vista、7、8)提出了更严格的要求,但我确实需要能够使此表单显示为最顶部的活动窗口(如上下文菜单)。
我怎样才能正确地做到这一点?