C#でウィンドウメッセージ受信時にイベントを発生させたい
お世話になります。
表題のとおりなんですが、C#でウィンドウメッセージを受信したときに、イベントを発生させたいと考えています。
とりあえず、ウィンドウメッセージを受信する処理とイベントクラスの作成はできたのですが、イベントを発生させる方法がよくわかりません。
下記のコードでは、コンパイルエラーが起きてしまうようです。
アドバイスを頂けないでしょうか。
よろしくお願いします。
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
namespace WndMessage{
public class WndMessage{
// メッセージ処理関数用デリゲート
private delegate int D_MyWndProc(IntPtr hwnd, int msg, int wParam, int lParam);
// ウィンドウをサブクラス化するAPI
private static int GWL_WNDPROC = -4;
[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "GetWindowLongA")]
extern static int GetWindowLong(IntPtr hwnd, int nIndex);
[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SetWindowLongA")]
extern static int SetWindowLong(IntPtr hwnd, int nIndex, int dwNewLong);
[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SetWindowLongA")]
extern static int SetWindowLong(IntPtr hwnd, int nIndex, D_MyWndProc dwNewLong);
[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "CallWindowProcA")]
extern static int CallWindowProc(int lpPrevWndFunc, IntPtr hwnd, int msg, int wParam, int lParam);
// デフォルトのメッセージ処理関数
private static int lngWnP;
// 独自メッセージの処理を開始
public void StartReceiveMessage(IntPtr hwnd){
lngWnP = GetWindowLong(hwnd, GWL_WNDPROC);
SetWindowLong(hwnd, GWL_WNDPROC, MyWndProc);
}
// 独自メッセージの処理を終了
public void ExitReceiveMessage(IntPtr hwnd){
SetWindowLong(hwnd, GWL_WNDPROC, lngWnP);
}
// ウィンドウに来たメッセージを振り分ける関数
private static int MyWndProc(IntPtr hwnd, int msg, int wParam, int lParam){
return CallWindowProc(lngWnP, hwnd, msg, wParam, lParam);
}
public class MessageEventArgs : EventArgs {
private readonly int msg;
private readonly int lParam;
private readonly int wParam;
public MessageEventArgs(int msg, int lParam, int wParam){
this.msg = msg;
this.lParam = lParam;
this.wParam = wParam;
}
public int msg{
get { return msg; }
}
public int lParam{
get { return lParam; }
}
public int wParam{
get { return wParam; }
}
}
}
}