VB.NET hwnd销毁/禁用/隐藏菜单

时间:2015-08-12 16:13:33

标签: vb.net winapi

我发现了很多关于使用hwind添加MenuItems的信息,但我想删除/禁用/隐藏外部程序上的菜单栏。

我知道如何使用hwind删除边框和窗口标题,但我不知道如何删除菜单栏。

我该怎么做?

提前谢谢!

编辑: 我无法在SPY ++上发布任何图片,因为我是新手。 这是程序句柄中的TreeView:

WINDOW XXXXXX Afx:400000:b:10005:6:213078f

  • WINDOW XXXX AfxFrameOrView42u

  • WINDOW XXXX msctls_statusbar32

  • WINDOW XXXX AfxControlBar42u

    - WINDOWS XXXXX ToolbarWindow32

  • WINDOW XXXX AfxControlBar42u

  • WINDOW XXXX AfxControlBar42u

  • WINDOW XXXX AfxControlBar42u

如果我打开highlited手柄的属性,它会显示以下样式选项:

WS_CHILDWINDOW
WS_VISIBLE
WS_CLIPSIBLINGS
WS_CLIPCHILDREN
CBRS_BORDER_BOTTOM
CBRS_ALIGN_TOP

我现在可以更改样式属性并删除WS_VISIBLE吗?

非常感谢你!

1 个答案:

答案 0 :(得分:0)

好的,我有解决方案!

导入:

Imports System.Runtime.InteropServices

声明:

<DllImport("user32.dll")> _
Private Shared Function GetMenu(hWnd As IntPtr) As IntPtr
End Function

<DllImport("user32.dll")> _
Private Shared Function SetMenu(hWnd As IntPtr, hMenuOld As Int32) As IntPtr
End Function

子:

Private Sub RemoveMenuBar()
    For Each p As Process In Process.GetProcesses()
          If p.ProcessName = "PROCESS" Then
          Dim hwnd As IntPtr = p.MainWindowHandle
          Dim sysMenu = GetMenu(hwnd)
          SetMenu(hwnd, Nothing)
       End If
    Next
End Sub

谢谢你的帮助!