HOME  >  スポンサー広告 >  プログラミング >  グローバルフック(システムフック)でハマったところ つづき

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--/--/-- | カテゴリ:スポンサー広告 | トラックバック(-) | コメント(-)

グローバルフック(システムフック)でハマったところ つづき

先日の続き
XP、Vista、7 とマルチ対応のグローバルフック(システムフック)の実装方法です。
ウィンドウハンドル _hwnd への WM_APP の送信を許可する例です。
C 言語 の DLL を作成しているという前提での記載です。

/* 関数ポインタ型宣言 */
typedef BOOL (__stdcall *FUNCTYPEVISTA)(UINT, DWORD);
typedef BOOL (__stdcall *FUNCTYPE7)(HWND, UINT, DWORD, int);

(中略)

FUNCTYPE7 ChangeWindowMessageFilterEx;
FUNCTYPEVISTA ChangeWindowMessageFilter;

HMODULE dll = LoadLibrary(TEXT("user32.dll"));

ChangeWindowMessageFilterEx =
    (FUNCTYPE7)GetProcAddress(dll, "ChangeWindowMessageFilterEx");

if(ChangeWindowMessageFilterEx != NULL){
    /* 7 以降ならこれを使う(7 以降なら実装されている API) */
    ChangeWindowMessageFilterEx(_hWnd, WM_APP, MSGFLT_ALLOW, 0);
}else{
    ChangeWindowMessageFilter =
        (FUNCTYPEVISTA)GetProcAddress(dll, "ChangeWindowMessageFilter");
    if(ChangeWindowMessageFilter != NULL){
        /* Vista ならこれを使う(Vista 以降なら実装されている API) */
        ChangeWindowMessageFilter(WM_APP, MSGFLT_ADD);
    }
}
FreeLibrary(dll);

後始末は、同様にLoadLibrary、条件分岐して、フィルタの設定を戻してあげれば終わりです。

ChangeWindowMessageFilterEx(_hWnd, WM_APP, MSGFLT_RESET, 0);
ChangeWindowMessageFilter(WM_APP, MSGFLT_REMOVE);

2013/09/28 | カテゴリ:プログラミング | トラックバック(0) | コメント(0)
コメントの投稿












管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
http://uisteven.blog.fc2.com/tb.php/4-37e61328

外部リンク

カンパのお願い
公開しているソフトウェアはフリーウェアなので無料でご利用いただけます。 気に入ってくださった方は、Amazon でお買い物をする際に下記のリンクを経由して頂ければ励みになります。

検索BOX・タグ一覧
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。