注册 | 登录
收藏 | 帮助
热门文章
编辑推荐
相关文章  
Win 2000防毒从安装系统时开始
高手支招 巧妙利用系统进程手工杀
Linux系统下的病毒发展及其分类
浏览图片需小心 系统漏洞会染恶性
操作系统中几个容易被误认为病毒
让病毒自动还原被恶意修改键值
病毒通常更改的系统配置文件及注
巧妙修改文件不再受QQ病毒困扰
Windows操作系统常遇木马预防技巧
通过系统权限法来清理dll木马
您现在的位置: 顶尖设计 >> IT学院 >> 编程开发 >> VB >> 文章正文
修改系统菜单,鼠标右健弹出菜单,执行系统菜单事件
作者:jennyvenus  来源:csdn  点击:  更新:2006-12-19
简介:
 

(仅供参考)

向系统菜单中添加新项,并且执行对应事件,在窗体任意位置弹出系统菜单,并且执行事件
'窗体
Option Explicit

Private Sub Form_Load()
    On Error Resume Next
   
    lhSysMenu = GetSystemMenu(hwnd, 0&)
    lRet = AppendMenu(lhSysMenu, MF_SEPARATOR, 0&, vbNullString)
    lRet = AppendMenu(lhSysMenu, MF_STRING, IDM_ABOUT, "About...")
    Show
   
    ProcOld = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim r As RECT
    Dim p As POINTAPI
    If Button = vbRightButton Then
        GetCursorPos p
        TrackPopupMenu lhSysMenu, 0, p.X, p.Y, 0, Me.hwnd, r
    End If
End Sub

Private Sub Form_Unload(Cancel As Integer)
    SetWindowLong hwnd, GWL_WNDPROC, ProcOld
End Sub

'-------------------------------------------------------------
'模块
Option Explicit
Public Declare Function TrackPopupMenu Lib "user32" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal X As Long, ByVal Y As Long, ByVal nReserved As Long, ByVal hwnd As Long, lprc As RECT) As Long
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public 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
Public Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As String) As Long
Public Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Public Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type
Public Type POINTAPI
        X As Long
        Y As Long
End Type
Public ProcOld As Long
Public Const TPM_LEFTALIGN = &H0&
Public Const WM_SYSCOMMAND = &H112
Public Const MF_SEPARATOR = &H800&
Public Const MF_STRING = &H0&
Public Const GWL_WNDPROC = (-4)
Public Const IDM_ABOUT As Long = 1010
Public Const WM_COMMAND = &H111
Public lhSysMenu As Long, lRet As Long

Public Function WindowProc(ByVal hwnd As Long, ByVal iMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Select Case iMsg
    Case WM_SYSCOMMAND
        If wParam = IDM_ABOUT Then
            MsgBox "VB Web Append to System Menu Example", vbInformation, "About"
            Exit Function
        End If
    Case WM_COMMAND
        If wParam = IDM_ABOUT Then
            MsgBox "VB Web Append to System Menu Example", vbInformation, "About"
            Exit Function
        Else
            CallWindowProc ProcOld, hwnd, WM_SYSCOMMAND, wParam, lParam
            WindowProc = 0
            Exit Function
        End If
    End Select
    WindowProc = CallWindowProc(ProcOld, hwnd, iMsg, wParam, lParam)
End Function






  • 上一篇文章:
  • 下一篇文章:
  • 分享此文:该页面添加到 Mister Wong 添加到雅虎Yahoo!收藏 Add to:Del.icio.us Post to Furl Digg this 添加到Google书签 reddit spurl blogmarks 365Key 评论  收藏  分享  打印
     我来说两句
    姓名:       验证码:   
    主页: 
    评分: 1分 2分 3分 4分 5分
    本频道近期热评文章:
      关于我们 | 联系我们 | 站点地图 | 广告投放 | 友情链接 | 在线留言 | 版权申明
    版权所有 © 2004-2007 顶尖设计(bobd.cn)
    未经授权禁止转载,摘编,复制本站内容或建立镜像. 沪ICP备07504942号 
    网络110
    报警服务