我创建了一个word.application对象,打开了一个新的word文档:set wapp=new word.application
wapp.documents.open "c:\test.doc"
set wdoc=wapp.activedocument我用FindWindow API获得了这个word窗口的句柄hWnd。现在我想disable这个word窗口的“最大化”、“最小化”和“关闭”按钮,以及文档子窗口的“关闭”按纽,我该怎么做?谢谢!

解决方案 »

  1.   

    试一下我的程序Public Sub DisableCloseBtn(ByVal hWnd As Long)
        Dim hMenu As Long, MII As MENUITEMINFO
        
        
        hMenu = GetSystemMenu(hWnd, 0)
        MII.cbSize = Len(MII)
        MII.dwTypeData = String(80, 0)
        MII.cch = Len(MII.dwTypeData)
        MII.fMask = MIIM_STATE
        MII.wID = SC_CLOSE
        GetMenuItemInfo hMenu, SC_CLOSE, False, MII
        MII.wID = 10&
        MII.fMask = MIIM_ID
        SetMenuItemInfo hMenu, SC_CLOSE, False, MII
        MII.fState = MII.fState Or MFS_GRAYED
        MII.fMask = MIIM_STATE
        SetMenuItemInfo hMenu, MII.wID, False, MII
        
        
        'SendMessage Me.hwnd, WM_NCACTIVATE, True, ByVal 0&’不行,去掉注释试一下End Sub试一下,未必可行。API、常数、类型的声明自己补充,最大化、最小化自己类推。
      

  2.   

    Private Declare Function GetSystemMenu Lib "User32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
    Private Declare Function RemoveMenu Lib "User32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
    Private Declare Function DrawMenuBar Lib "User32" (ByVal hwnd As Long) As Long
    Private Declare Function GetMenuItemCount Lib "User32" (ByVal hMenu As Long) As Long
    Private Const MF_BYPOSITION = &H400&
    Private Const MF_DISABLED = &H2& 
    Dim hMenu As Long, nCount As Long
    hMenu = GetSystemMenu(hWnd, 0)
    nCount = GetMenuItemCount(hMenu)
    Call RemoveMenu(hMenu, nCount - 1, MF_DISABLED Or MF_BYPOSITION)
    DrawMenuBar Frm.hwnd
      

  3.   

    DrawMenuBar Frm.hwnd
    改为:
    DrawMenuBar hwnd
      

  4.   

    使关闭、最大、最小化不可用
    声明:
    Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
    Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
    Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
    Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As LongPublic Const MF_BYPOSITION = &H400&
    Public Const MF_REMOVE = &H1000&
    使用:
    Private Sub Form_Load()
    Dim hSysMenu As Long
    Dim nCnt As Long
    Me.Show
    hSysMenu = GetSystemMenu(Me.hwnd, False)
    If hSysMenu Then
    ' 取得系统菜单中的数量
    nCnt = GetMenuItemCount(hSysMenu)If nCnt Then
    '编号 (0, 1, 2, 3...)
    RemoveMenu hSysMenu, nCnt - 1, MF_BYPOSITION Or MF_REMOVE
    '去掉 关闭 按钮
    RemoveMenu hSysMenu, nCnt - 2, MF_BYPOSITION Or MF_REMOVE
    '去掉一个下划线
    '注意下面的语句,请根据不同 Form 类别具体情况进行调试。
    '没个语句将关闭不同的功能!!
    'RemoveMenu hSysMenu, nCnt - 3, MF_BYPOSITION Or MF_REMOVE
    'RemoveMenu hSysMenu, nCnt - 4, MF_BYPOSITION Or MF_REMOVE
    'RemoveMenu hSysMenu, nCnt - 5, MF_BYPOSITION Or MF_REMOVE
    DrawMenuBar Me.hwnd
    ' 重画
    End If
    End If
    End Sub提供的方法二:
    Const MF_REMOVE = &H1000&
    Const SC_CLOSE = &HF060
    Const SC_MAXIMIZE = &HF030
    并在 Sub Form_Load()中加入:
    RemoveMenu GetSystemMenu(hwnd, 0), SC_CLOSE, MF_REMOVE
    这样就可以使关闭按钮无效。同样加入
    RemoveMenu GetSystemMenu(hwnd, 0), SC_MAXIMIZE, MF_REMOVE 
      

  5.   

    我来蹭分
        Dim wapp As Word.Application
        Dim cbc As Object
        
        Set wapp = New Word.Application
        
        wapp.Documents.open "c:\test.doc"    
            Set cbc = wapp.CommandBars("Standard").FindControl(, 2520)   '新建
        If Not (cbc Is Nothing) Then cbc.Delete
        
        Set cbc = wapp.CommandBars("Standard").FindControl(, 23)     '打开
        If Not (cbc Is Nothing) Then cbc.Delete
        
        Set cbc = wapp.CommandBars("Standard").FindControl(, 3)      '保存
        If Not (cbc Is Nothing) Then cbc.Delete
        
        Set cbc = wapp.CommandBars("File").FindControl(, 18)         '新建
        If Not (cbc Is Nothing) Then cbc.Delete
        
        Set cbc = wapp.CommandBars("File").FindControl(, 23)         '打开
        If Not (cbc Is Nothing) Then cbc.Delete
        
        Set cbc = wapp.CommandBars("File").FindControl(, 3)          '保存
        If Not (cbc Is Nothing) Then cbc.Delete
        
        Set cbc = wapp.CommandBars("File").FindControl(, 748)        '另存为
        If Not (cbc Is Nothing) Then cbc.Delete
        
        wapp.Visible = True