|
分類:[C# (Windows)]
はじめまして。 DLLをはじめて使う者です。
VC++でCBTProcをフックして、ウィンドウの状態を取得するDLLを 作成しました。
作成したDLL関数は全てCALLBACKです。 それをC#で使用するにはどのように記述すればよいのでしょうか?
以上、丸投げ感は否めませんが宜しくお願いします。
以下VC++のソースです。
#define STRICT #include <windows.h> #include <stdio.h> #include <HookDLL.h>
#pragma data_seg(".sharedata") HHOOK hHookWnd = 0; // フックプロシージャハンドル HWND hWndSend = 0; // メッセージ送信先のウィンドウハンドル #pragma data_seg()
// *************************************************************/ // 関数名:DLLエントリポイント // *************************************************************/ BOOL WINAPI DllMain(HINSTANCE hInst, DWORD fdwReason, LPVOID lpReserved) { (void)lpReserved; if(fdwReason==DLL_PROCESS_ATTACH) { hdll = hInst; }
return TRUE; }
// *************************************************************/ // 関数名:コールバック処理 // *************************************************************/ LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam) { switch(nCode) { // ウィンドウが作成される case WM_USER+1: // 指定されたウィンドウへメッセージ送信 PostMessage(hWndSend, WM_CREATEWINDOW, wParam, lParam); break; // ウィンドウがアクティブ化 case WM_USER+2: // 指定されたウィンドウへメッセージ送信 PostMessage(hWndSend, WM_ACTIVEWINDOW, wParam, lParam); break; // ウィンドウが破棄される case WM_USER+3: // 指定されたウィンドウへメッセージ送信 PostMessage(hWndSend, WM_DESTROYWINDOW, wParam, lParam); break; } //次のフックを呼ぶ return CallNextHookEx(hHookWnd, nCode, wParam, lParam); }
// *************************************************************/ // 関数名:フックインストール // *************************************************************/ void CALLBACK SetHook(HWND hWnd) { hHookWnd = SetWindowsHookEx(WH_CBT, CBTProc, hdll, 0); hWndSend = hWnd; }
// *************************************************************/ // 関数名:フックアンインストール // *************************************************************/ void CALLBACK ReleaseHook() { UnhookWindowsHookEx(hHookWnd); }
|