已知应用程序窗口的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窗口的“最大化”、“最小化”和“关闭”按钮,以及文档子窗口的“关闭”按纽,我该怎么做?

谢谢!
...全文
385 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、常数、类型的声明自己补充,最大化、最小化自己类推。
【更新至2025年】2001-2025年上市公司数字化转型年报词频统计(吴非、赵宸宇、甄红线)(300+年报词频统计) 1、时间:2001-2025年 2、来源:上市公司年报 3、参考文献:企业数字化转型与资本市场表现——来自股票流动性的经验证据(吴非) 数字化转型如何影响企业全要素生产率(赵宸宇) 知识产权行政保护与企业数字化转型(甄红线) 4、方法说明:(1)参考吴非老师的做法,对人工智能技术、大数据技术、云计算技术、区块链技术、数字技术运用五个维度76个数字化相关词频进行统计 (2)参考赵宸宇老师的做法,对数字技术应用、互联网商业模式、智能制造、现代信息系统四个维度99个数字化相关词频进行统计 (3)参考甄红线老师的做法,对技术分类、组织赋能、数字化应用等类别下139个数字化相关词频进行统计 5、指标:年份、股票代码、公司简称、行业名称、行业代码、全文-文本总长度、仅中英文-文本总长度、人工智能技术-吴、大数据技术-吴、云计算技术-吴、区块链技术-吴、数字技术运用-吴、数字技术应用-赵、互联网商业模式-赵、智能制造-赵、现代信息系统-赵、技术分类-人工智能技术-甄、技术分类-区块链技术-甄、技术分类-云计算技术-甄、技术分类-大数据技术-甄、组织赋能-人工智能技术-甄、组织赋能-云计算技术-甄、组织赋能-大数据技术-甄、组织赋能-广义数字技术-甄、数字化应用-技术创新-甄、数字化应用-流程创新-甄、数字化应用-业务创新-甄、人工智能、商业智能、图像理解、投资决策辅助系统、智能数据分析、智能机器人、机器学习、深度学习、语义搜索、生物识别技术、人脸识别、语音识别、身份验证、自动驾驶、自然语言处理、大数据、数据挖掘、文本挖掘、数据可视化、异构数据、征信、增强现实、混合现实、虚拟现实、云计算、流计算、图计算、内存计算、多方安全计算、类脑计算、绿色计算、认知计算等300+词频

1,488

社区成员

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

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