Visual Basic .Net,保持 windows 在其他 windows 之上

Visual Basic .Net, keep windows on top of other on-top windows

我创建了一个我想一直显示在任务栏中的程序。当我按下它们的按钮时,它会启动一些键盘快捷键。该程序运行良好,但 windows 任务栏需要设置为始终在顶部,否则程序也会最大化它。

如果我将我的程序和 windows 任务栏都设置为始终位于顶部,则我的程序位于任务栏顶部,直到我单击任务栏中的任意位置,例如激活另一个程序。

我的代码如下:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles MyBase.Load

    Me.Bounds = Screen.PrimaryScreen.Bounds
    Me.TopMost = True

    '...
End Sub

我考虑过偶尔使用计时器来激活我的程序,但这种方法的缺点是,如果我正在输入另一个应用程序并且焦点转移到我的程序,这非常烦人。

所以我的问题如下:有没有一种方法可以让我与任务栏交互,这样我的程序总是在它上面,不管其他什么,或者是否可以定期恢复在上面的状态,所以我的程序再次成为任务栏的顶部,而焦点却没有转到我的程序?

我更喜欢我的程序总是在任务栏上,点击任务栏不会暂时让我的程序不可见。例如,如果我可以将我的应用程序的 z 顺序设置为比任务栏更高的级别,那将是最好的。如果否则我可以以某种方式将我的程序作为任务栏的一部分生成,那也可以。

PS:我启用了任务栏中的搜索栏,我的程序应该完全覆盖它。我不使用搜索栏,它给了我一个专用的 space,不用担心覆盖任何打开的程序。

PS2:这只是为我准备的,不用担心任何人有不同的喜好。我的目标是优化我的工作流程,所以我每天的忙碌越少越好。

这是应用程序运行时的样子,但单击任务栏会使 window 不可见。:

所以...如何确保我的程序保持在任务栏顶部,即使我单击任务栏中的某处?

显然解决方案非常简单。

我害怕副作用,但我应用的解决方案非常有效。

我添加了一个计时器,启用了它,它的每个滴答声都在执行:

me.Topmost = true

如果我现在单击任务栏,程序显然会被推到后面,但计时器每 100 毫秒计时一次,程序就会自动放回顶部,而应用程序实际上并没有获得焦点。