已知应用程序窗口的hWnd,如何disable word窗口的“最大化”、“最小化”和“关闭”按钮?

teddythebear 2003-05-11 10:18:20
我创建了一个word.application对象,打开了一个新的word文档:

set wapp=new word.application
wapp.documents.open "c:\test.doc"
set wdoc=wapp.activedocument

我用FindWindow API获得了这个word窗口的句柄hWnd。

现在我想disable这个word窗口的“最大化”、“最小化”和“关闭”按钮,以及文档子窗口的“关闭”按纽,我该怎么做?

谢谢!
...全文
326 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
胖河马 2003-05-13
  • 打赏
  • 举报
回复
我来蹭分
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
rainstormmaster 2003-05-11
  • 打赏
  • 举报
回复
使关闭、最大、最小化不可用
声明:
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 Long

Public 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
rainstormmaster 2003-05-11
  • 打赏
  • 举报
回复
DrawMenuBar Frm.hwnd
改为:
DrawMenuBar hwnd
rainstormmaster 2003-05-11
  • 打赏
  • 举报
回复
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
lazycat818 2003-05-11
  • 打赏
  • 举报
回复
试一下我的程序

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、常数、类型的声明自己补充,最大化、最小化自己类推。

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧