【VB】任意窗口置顶
【VB】任意窗口置顶.txt27信念的力量在于即使身处逆境,亦能帮助你鼓起前进的船帆;信
念的魅力在于即使遇到险运,亦能召唤你鼓起生活的勇气;信念的伟大在于即使遭遇不幸,
亦能促使你保持崇高的心灵。运行程序后,
按下 Ctrl + Alt + Shift + T 使当前窗口置顶
按下 Ctrl + Alt + Shift + C 使当前窗口[color=Blue]取消[/color]置顶
按下 Ctrl + Alt + Shift + E 退出程序
图片中的计算器被置顶。
'窗体代码
Option Explicit
Private Const MOD_CONTROL = &H2
Private Const MOD_ALT = &H1
Private Const MOD_SHIFT = &H4
Private Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Private Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long) As Long
Private Sub Form_Load()
Me.Visible = False
SetWndProc Me.hwnd, True
RegisterHotKey Me.hwnd, 2222, MOD_CONTROL Or MOD_ALT Or MOD_SHIFT, vbKeyT
RegisterHotKey Me.hwnd, 2223, MOD_CONTROL Or MOD_ALT Or MOD_SHIFT, vbKeyC
RegisterHotKey Me.hwnd, 2224, MOD_CONTROL Or MOD_ALT Or MOD_SHIFT, vbKeyE End Sub
Private Sub Form_Unload(Cancel As Integer)
UnregisterHotKey Me.hwnd, 2224
UnregisterHotKey Me.hwnd, 2223
UnregisterHotKey Me.hwnd, 2222
SetWndProc Me.hwnd, False
End Sub
'模块代码
Option Explicit
Private Const WM_HOTKEY = &H312
Private Const GWL_WNDPROC = (-4)
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private prevWndProc As Long
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
Private Const SWP_NOMOVE = &H2
Private Const SWP_NOSIZE = &H1
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
Public Function SetWndProc(ByVal hwnd As Long, ByVal NewWndProc As Boolean) As Long
If NewWndProc Then
prevWndProc = GetWindowLong(hwnd, GWL_WNDPROC)
SetWndProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WndProc)
Else
SetWndProc = SetWindowLong(hwnd, GWL_WNDPROC, prevWndProc)
End If
End Function
Private Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_HOTKEY Then
Select Case wParam
Case 2222
SetWindowPos GetForegroundWindow, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
Case 2223
SetWindowPos GetForegroundWindow, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
Case 2224
Unload Form1
End Select
Exit Function
End If
WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam) End Function
'另类窗口置顶方法
'用API
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
Public Const HWND_TOPMOST = -1
Public Const SWP_NOMOVE = &H2
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOZORDER = &H8
'将下面的子程序放到模块中
Public Sub SetFormTopmost(TheForm As Form)
SetWindowPos TheForm.hwnd, HWND_TOPMOST, 0, 0, 0, 0, _ SWP_NOZORDER + SWP_NOMOVE + SWP_NOSIZE
End Sub
'最后,通过调用该子程序设置你想要放置的窗体。例如,你想将窗体frmMyForm放在最前面,
代码如下:
SetFormTopmost frmMyForm
'具体介绍
完整代码如下:
'声明部分
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)
Private Sub Command1_Click()
' 窗口置前
Dim myval
myval = SetWindowPos(form1.hwnd, -1, 0, 0, 0, 0, 3) End Sub
Private Sub Command2_Click()
'窗口正常
Dim myval
myval = SetWindowPos(form1.hwnd, -2, 0, 0, 0, 0, 3) End Sub
Private Sub Command3_Click()
'窗口置后
Dim myval
myval = SetWindowPos(form1.hwnd, 1, 0, 0, 0, 0, 3) End Sub
Private Sub Command4_Click()
End
End Sub
本文档为【【VB】任意窗口置顶】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。