質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

VSTO

Visual Studio Tools for Office

Q&A

0回答

312閲覧

Outlookのシステムメニューへ項目を追加してクリックしてもイベントを受け取れない

docberry

総合スコア3

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

VSTO

Visual Studio Tools for Office

0グッド

0クリップ

投稿2022/08/14 10:15

編集2022/08/14 10:18

VSTOでOutlookのアドインを作成しています。
Outlookのシステムメニューへ項目("About...")を追加しましたがそれをクリックしてもイベントを受け取れません。

具体的には、以下のGetWindowLongのリターン値が0になります。
lngWnP = GetWindowLong(hwnd, GWL_WNDPROC)
もし、SetWindowsHookExを使用すれば可能であれば具体的にどのようにすれば良いのか教えてください。

VB.net

1Public Class OutlookMenu 2 ' メッセージ処理関数用デリゲート 3 Private Delegate Function D_MyWndProc( 4 ByVal hwnd As Integer, ByVal msg As Integer, 5 ByVal wParam As Integer, ByVal lParam As Integer) As Integer 6 7 ' ウィンドウをサブクラス化するAPI 8 Private Const WM_SYSCOMMAND = &H112 9 Private Const GWL_WNDPROC = -4 10 Private Const MF_SEPARATOR = &H800& 11 Private Const MF_STRING = &H0& 12 Private Const IDM_CUSTOM As Integer = 1010 13 14 Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _ 15 (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer 16 Private Declare Function GetSystemMenu Lib "user32" _ 17 (ByVal hWnd As Integer, ByVal bRevert As Integer) As Integer 18 Private Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" _ 19 (ByVal hMenu As Integer, ByVal wFlags As Integer, ByVal wIDNewItem As Integer, ByVal lpNewItem As String) As Integer 20 Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" _ 21 (ByVal hwnd As Integer, ByVal nIndex As Integer) As Integer 22 Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" _ 23 (ByVal hwnd As Integer, ByVal nIndex As Integer, ByVal dwNewInteger As Integer) As Integer 24 Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" _ 25 (ByVal hwnd As Integer, ByVal nIndex As Integer, ByVal dwNewInteger As D_MyWndProc) As Integer 26 Private Declare Function CallWindowProc Lib "user32.dll" Alias "CallWindowProcA" _ 27 (ByVal lpPrevWndFunc As Integer, ByVal hwnd As Integer, ByVal msg As Integer, 28 ByVal wParam As Integer, ByVal lParam As Integer) As Integer 29 30 ' デフォルトのメッセージ処理関数 31 Private Shared lngWnP As Integer 32 33 ' 独自メッセージの処理を開始 34 Public Shared Sub Start_MyWndProc(ByVal hwnd As Integer) 35 lngWnP = GetWindowLong(hwnd, GWL_WNDPROC) 36 Call SetWindowLong(hwnd, GWL_WNDPROC, AddressOf MyWndProc) 37 End Sub 38 39 ' 独自メッセージの処理を終了 40 Public Shared Sub End_MyWndProc(ByVal hwnd As Integer) 41 Call SetWindowLong(hwnd, GWL_WNDPROC, lngWnP) 42 End Sub 43 44 ' ウィンドウに来たメッセージを振り分ける関数 45 Private Shared Function MyWndProc( 46 ByVal hwnd As Integer, ByVal msg As Integer, 47 ByVal wParam As Integer, ByVal lParam As Integer) As Integer 48 If msg = WM_SYSCOMMAND Then 49 If wParam = IDM_CUSTOM Then 50 ' 独自メニューの処理 51 MsgBox("VB Web About...", vbInformation, "About") 52 Return 0 53 End If 54 End If 55 ' デフォルトのメッセージ処理 56 Return CallWindowProc(lngWnP, hwnd, msg, wParam, lParam) 57 End Function 58 ' ============================================================================================ 59 Public Shared Sub customMenu() 60 Dim hwnd As Integer 61 Dim lhSysMenu As Integer, lRet As Integer 62 63 hwnd = FindWindow("rctrl_renwnd32", vbNullString) 'Outlook本体 64 lhSysMenu = GetSystemMenu(hwnd, 0&) 65 'Add seperator 66 lRet = AppendMenu(lhSysMenu, MF_SEPARATOR, 0&, vbNullString) 67 'Add new menu item 68 lRet = AppendMenu(lhSysMenu, MF_STRING, IDM_CUSTOM, "About...") 69 70 Call Start_MyWndProc(hwnd) 71 End Sub 72End Class 73--

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問