掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
DLLから自分自身(EXE)にSendMessageするには? (ID:53279)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
何がしたいのかわかりません。 もう少し、やりたいことを具体的に記述してください。 また、どううまくいかないのか、成功した場合はどんな結果を期待するのかも記述すべきです。 まぁ、推測するに、システムフックをかけてウィンドウの作成を呼び出し側に通知したいといったところでしょうか。 自アプリを監視したいだけなら、こんな DLL を作る必要はありません。 他アプリも監視したいなら…まぁ、このコードではいけませんね。 DLL を作っているところから、グローバルフックだろうとは思いますが。 以下、グローバルフックだとして話を進めると… グローバルフックには DLL のインスタンスハンドルが必要です。これを DllMain で取得して、どこかに保存しておかなければなりません。 SetWindowsHookEx 関数は VB からは使えません。 呼び出すことは可能ですが、グローバルフックの場合はその戻り値を共有しなければならず、これは VB では不可能です。 そこで、SetWindowsHookEx、UnhookWindowsHookEx を呼び出すコードは DLL 内に必要です。ここで、先ほど保存しておいたインスタンスハンドルを使います。 また、MsgHook のかわりに、このフックをセット/解除する関数をエクスポートすべきです。 ついでに、フックプロシージャ内で毎回クライアントウィンドウを検索せずに、このフックをセットする関数で一度セットすればよりよいかと。 コールバック関数を使うという手もありますね。 フックプロシージャは、CallNextHookEx を呼び出さなければなりません。 ちゃんと nCode を判定して、適切な処理を行ってください。 def ファイルの LIBRARY 文には、拡張子は含めません。…たぶん。 EXPORTS 文は前述の通りに修正して、あとは… フックハンドルの共有のために、共有セクションの定義も行う必要があります。 ざっと修正点を挙げてみました。こんな感じでどうでしょう?
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.