C# 制表符时最顶端不工作
几分钟前,我遇到了一个奇怪的问题。我创建了一个最顶层的表单(WinForms),做了一些选项卡,一切都很好 然后我试着打开一个电脑游戏(fullscren窗口),这意味着游戏是全屏的,但在窗口模式下,这意味着你仍然可以用表单覆盖它。例如,在我打开浏览器之前一切正常(可以是任何其他程序(编辑器))。作为一个简短的补充,我有两个监视器C# 制表符时最顶端不工作,c#,winforms,C#,Winforms,几分钟前,我遇到了一个奇怪的问题。我创建了一个最顶层的表单(WinForms),做了一些选项卡,一切都很好 然后我试着打开一个电脑游戏(fullscren窗口),这意味着游戏是全屏的,但在窗口模式下,这意味着你仍然可以用表单覆盖它。例如,在我打开浏览器之前一切正常(可以是任何其他程序(编辑器))。作为一个简短的补充,我有两个监视器 我用标签从电脑游戏(我的表格在最上面)进入浏览器 我单击了浏览器中的某个位置(url) 我用标签回到游戏中,点击游戏中的某个地方(我的表单仍然是最上面的) 我再次执行
public partial class Form1 : Form
{
const UInt32 SWP_NOSIZE = 0x0001;
const UInt32 SWP_NOMOVE = 0x0002;
const UInt32 SWP_NOACTIVATE = 0x0010;
[DllImport("user32.dll")]
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);
public void setTOP()
{
SetWindowPos(this.Handle, new IntPtr(-1), 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE);
}
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.setTOP();
}
}
但是这不起作用。最顶级的API只是设置了windows的顺序。我建议再次调用“最上面的”标志
TopMost=False
TopMost=True
重置订单。因为另一个窗口可以对操作系统使用相同的命令
后台工作API(仅供参考)
关于当您的应用程序获得关注时,您最好再次调用topmost。这是一个可怕的解决方案,但到目前为止总比什么都没有好
我实现了一个计时器,它每x秒调用一次topmost。正如我所说,这不是一个好的解决方案,但却是我唯一想到的。我会继续研究这个问题,但目前我就是这么做的。我怎么知道什么时候再打电话给topmost???因为表单没有聚焦或者我不知道它什么时候会进入背景/消失。。。我还试着使用SetWindowPos,但它不会改变任何东西。嗨,莱恩。在我的例子中,它是有效的。请告诉我是否有任何游戏使用DirectX或图形加速视频或类似的东西?也许视频加速是个问题?同样的问题也在这里(德语),并通过下面的代码解决了:我测试的游戏是星际争霸2。也许我没有正确地实现它,但由于它是除此场景之外的最高级别,我不认为我犯了错误。如果它不可见,它应该如何聚焦2。对于用户来说,每次点击标签时都要关注它,这有点烦人。
Declare Function SetWindowPos Lib "user32.dll" ( _
ByVal hwnd As integer, _
ByVal hWndInsertAfter As integer, _
ByVal x As integer, _
ByVal y As integer, _
ByVal cx As integer, _
ByVal cy As integer, _
ByVal wFlags As integer) As integer