0

私は自分が働いている会社のアプリを作成していますが、PuTTYのようなウィンドウのコンテキストメニューをカスタマイズする方法を考えていました(別名、「新しいセッション...」などがあります)。Google全体を調べましたが、探している答えが見つかりません。

4

1 に答える 1

2

新しいモジュールを作成し、上に追加Imports System.Runtime.InteropServicesし ます

次にこれを宣言します

<Flags()> _
Public Enum MenuFlags As Integer
    MF_BYPOSITION = 1024
    MF_REMOVE = 4096
    MF_SEPARATOR = 2048
    MF_STRING = 0
End Enum

<DllImport("user32.dll", CallingConvention:=CallingConvention.Cdecl)> _
Public Function GetSystemMenu(ByVal hWnd As IntPtr, Optional ByVal bRevert As Boolean = False) As IntPtr
End Function

<DllImport("user32.dll", CharSet:=CharSet.Auto)> _
Public Function AppendMenu(ByVal hMenu As IntPtr, ByVal uFlags As MenuFlags, ByVal uIDNewItem As Int32, ByVal lpNewItem As String) As Boolean
End Function

次に、フォームロードハンドラーにこのコードを追加します

Dim sysmenu As IntPtr = GetSystemMenu(Me.Handle)
AppendMenu(sysmenu, MenuFlags.MF_STRING, &H1FFF, "Hello")

次に、ユーザーが新しいメニュー項目をクリックしたことをキャプチャできるようにするには、すべてのメッセージをキャプチャするこの関数を実装する必要があります。フォームコードに追加するだけです。

   Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
      If m.Msg = WM_SYSCOMMAND Then
          If m.WParam.ToInt32 = &H1FFF Then
               ' your menu item is clicked, call a function here
          End If
      End If
      MyBase.WndProc(m)
   End Sub
于 2012-08-08T23:53:00.630 に答える