スポンサーサイト

    上記の広告は1ヶ月以上更新のないブログに表示されています。
    新しい記事を書く事で広告が消せます。

    .NETでのウィンドウメッセージのグローバルフック

    補助線ツールでマウスをグリッドにスナップする機能を実装しようとしていろいろと調べた結果,.NETだけで実装するのはできず,C++でフック部分を作っていろいろと頑張れば出来そうだけど,そうするならいっそのことC++だけで実装した方が良いという結論に.

    理由は以下の通り
    • .NETでは一部の例外を除きグローバルフックをかけられない(グローバルフックで仕掛けた関数はメッセージが送信されるEXEのコンテキストで実行されるが,それは.NETの仕様上許されないため)
    • 上記の「一部の例外」はWM_KEYBOARD_LLとWM_MOUSE_LLの二つ.ただし,メッセージの監視とフック処理の無効化はできるが,メッセージの編集はできない.つまり,マウスやキーボードの入力をフック処理で変更することはできない.
    • フック部分をC++で実装し,.NET部分と何らかの形で通信してメッセージを編集するような形で頑張って実装できなくはないが,フック処理は一定時間内に処理を完了する必要があるのでその実装は慎重に設計する必要がある.
    実装に関する情報はWM_MOUSE_LLWM_KEYBOARD_LLでググると先人たちの情報が多々ヒットします.

    ということで,マウスのスナップを実装するとしたら複数の言語を組み合わせて頑張るよりはいっそ単一の言語で実装した方が良いような感じですが,一度組んだ処理をもう一度くむというのは結構苦行.もしVC++で組み直すとしたら以下のようなメリット・デメリット?
    • ○スナップ処理が実装できる
    • ○(多分)動作がキビキビする(.NETはややもっさり系の動作)
    • ○.NET Frameworkよりすこし動作環境が増える
    • ×組み直しメンドクサイ
    • ×多分実装規模がやや膨らむ
    メリットは結構有りますが,一番大きいのはやっぱり「メンドクサイ」です…
    まだ実装規模は5千ライン程度なのでがんばりの問題ですが,頑張るのいやだしなぁ.
    スポンサーサイト

    コメントの投稿

    非公開コメント

    プロフィール

    eikun

    Author:eikun
    なかなかやるきがでない人です

    えいくんち

    twitter

    pixiv

    最新記事
    最新コメント
    最新トラックバック
    月別アーカイブ
    カテゴリ
    検索フォーム
    RSSリンクの表示
    リンク
    ブロとも申請フォーム

    この人とブロともになる

    QRコード
    QR
    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。