Vb.net 当我打开一个新的应用程序时,我如何获得一个表格来粘贴到我的屏幕上

Vb.net 当我打开一个新的应用程序时,我如何获得一个表格来粘贴到我的屏幕上,vb.net,Vb.net,每当我打开我的表单,然后打开一个新的应用程序,如Microsoft Edge,该应用程序就不再存在了。我正在使用VB.NET。没有必要重新发明轮子 <DllImport("user32.dll", SetLastError:=True)> _ Private Shared Function SetWindowPos(ByVal hWnd As IntPtr, ByVal hWndInsertAfter As IntPtr, _

每当我打开我的表单,然后打开一个新的应用程序,如Microsoft Edge,该应用程序就不再存在了。我正在使用VB.NET。

没有必要重新发明轮子

<DllImport("user32.dll", SetLastError:=True)> _
Private Shared Function SetWindowPos(ByVal hWnd As IntPtr, ByVal hWndInsertAfter As IntPtr, _
                                     ByVal X As Integer, ByVal Y As Integer, ByVal cx As Integer, _
                                     ByVal cy As Integer, ByVal uFlags As UInt32) As Boolean
End Function

ReadOnly HWND_TOPMOST As New IntPtr(-1)
Shared ReadOnly SWP_NOSIZE As UInt32 = Convert.ToUInt32(&H1)
Shared ReadOnly SWP_NOMOVE As UInt32 = Convert.ToUInt32(&H2)

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    'Either one of these does the trick
    SetWindowPos(Me.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
    'Me.TopMost = True
End Sub
_
私有共享函数SetWindowPos(ByVal hWnd作为IntPtr,ByVal HwnInsertafter作为IntPtr_
ByVal X为整数,ByVal Y为整数,ByVal cx为整数_
ByVal cy为整数,ByVal uFlags为UInt32)为布尔值
端函数
只读HWND_最顶层作为新IntPtr(-1)
共享只读SWP_NOSIZE As UInt32=Convert.ToUInt32(&H1)
共享只读SWP_NOMOVE As UInt32=Convert.ToUInt32(&H2)
私有子Timer1_Tick(ByVal发送方作为System.Object,ByVal e作为System.EventArgs)处理Timer1.Tick
这两种方法中的任何一种都能奏效
设置窗口位置(Me.Handle、HWND_TOPMOST、0、0、0、SWP_NOMOVE或SWP_NOSIZE)
“Me.TopMost=真的
端接头
资料来源:


也许您可以将表单的
最顶层的
属性设置为
True
。然后,它将始终位于其他窗体/窗口的顶部(除非这些其他窗体也将TopMost设置为True)。-->我刚刚尝试设置了
最上面的
属性。这对我很有用。我不明白为什么在VB.NET应用程序中有必要在SetWindowPos上到处乱说WinAPI。。。你链接到的文章也没有解释这一点。难怪答案只有五分之一的星星…好吧。。。解释
SetWindowPos
的(dis)优点在这里可能确实有点离题,因此,如果我在第一次评论中有点苛刻,我表示歉意。不管怎样,我刚刚在VB.NET WinForms测试应用程序中尝试了使用复选框切换窗体的
最顶层的
属性。这也很好用。老实说,我不知道十年前在使用Visual Studio 2008时,CodeProject上的链接问题海报出现了哪些技术问题,但当使用Visual Studio 2019和.NET Framework的当前版本时,表单的
最顶层的
属性似乎工作得很好。@BartHofland听着,我明白你的意思,我更喜欢将所有内容都保存在框架内,并且在使用API之前总是尝试使用它,但是作为程序员,没有充分的理由“限制您的能力”,Win API仍然是您可以使用的优秀资源。@BartHofland说,因此,最终不是都是解决方案提供商;这是一个程序员为您提供解决问题的选项的地方(一如既往,解决同一个问题的方法很多),当您在某个问题上迷失方向时,程序员为您提供帮助您找到正确方向的想法,这个答案当然符合这一标准。根据你的语气,我不得不假设你是反对者(尽管可能是错的),没有理由对OP问题的“可能”解决方案投反对票。其他人总是会附和他们自己的答案,而得票最多的人会“获胜”。实际上,这是一个很好的例子,说明了作为程序员,你应该知道什么时候“限制你的能力”。如果不需要依赖项,请不要引入依赖项。此外,从.NET的角度来看,我强烈反对Windows API是“在.NET应用程序中使用的优秀资源”。它是本机的、非托管的、特定于Windows的代码。这只是一个后门,对于极少数.NET框架无法提供所需功能的情况,这是一个可疑的回退选项。它实际上会让我考虑我的设计选择到建筑层次。