Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal _ hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, _ ByVal cy As Long, ByVal wFlags As Long) As Long
Const HWND_TOPMOST = -1
Const SWP_NOMOVE = &H2
Const SWP_NOSIZE = &H1
Private Sub Form_Load()
Call SetWindowPos(Form1.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
End Sub
使用以下代码创建一个间隔为1的计时器:
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Sub Timer1_Timer()
Dim mhwnd As Long
mhwnd = GetForegroundWindow SetParent Form1.hwnd, mhwnd
End Sub
代码翻译如下(通过自动化工具):
const long HWND_TOPMOST = -1;
const long SWP_NOMOVE = 2;
const long SWP_NOSIZE = 1;
[DllImport("user32.dll")]
private static extern long SetWindowPos(long hwnd, long hWndInsertAfter, long X, long Y, long cx, long cy, long wFlags);
private void Form_Load() {
SetWindowPos(Form1.hwnd, HWND_TOPMOST, 0, 0, 0, 0, (SWP_NOMOVE | SWP_NOSIZE));
}
[DllImport("user32.dll")]
private static extern long SetParent(long hWndChild, long hWndNewParent);
[DllImport("user32.dll")]
private static extern long GetForegroundWindow();
private void Timer1_Timer() {
long mhwnd;
mhwnd = GetForegroundWindow;
SetParent;
Form1.hwnd;
mhwnd;
}
7条答案
按热度按时间sigwle7e1#
应该与 * 所有 * 应用程序,包括全屏独家游戏(在我所有的游戏测试,到目前为止,它的作品)。
j7dteeu82#
您可以尝试将通知表单的
TopMost
属性设置为true
...,或者通过调用.ShowDialog
而不是.Show
使其成为模态。ar7v8xwq3#
我在同一个主题上挣扎,尤其是当在Outlook中点击一个指向自定义协议的“链接”时。(应用程序抓住了它,但总是在后台...)
尽管很多解决方案在调试时都能工作,但对于“实时部署”,只有以下调用链似乎可以实现所需的功能:
(调用,导致从线程处理链接)
每次都有效。
yyhrrdl84#
这里的VB代码,调用Windows API函数,应该是相对容易翻译(注意,这是未经测试的,在论坛上找到,也,你可能有问题的光标出现)。
使用以下代码创建一个间隔为1的计时器:
代码翻译如下(通过自动化工具):
dohp0rv55#
默认情况下,它将显示在屏幕顶部,但它不是模型。
你可以使用
Window.Show()
方法代替关闭窗口,在不需要时将其可见性更改为False。你可能需要使用子窗口的Parent属性将其设置为主窗口aemubtdh6#
您可以尝试设置TopLevel = true,这会使控件向前移动。TopMost = true会阻止任何其他控件获得焦点,这并不总是您想要的。
plupiseo7#
使用.NET 7时,仅使用