C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: SetWindowsHookExのOSによる引数の違い


(過去ログ 54 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■30690 / inTopicNo.1)  SetWindowsHookExのOSによる引数の違い
  
□投稿者/ らべるさん (1回)-(2009/01/03(Sat) 02:10:10)

分類:[.NET 全般] 

こんばんは。

現在VB.NETでSetWindowsHookExを利用してマウスのグローバルフック(非DLL)を行っています。
ただしvistaとwin2000でSetWindowsHookExの引数に与える値が違うようなのです。

SetWindowsHookExの第3引数であるインスタンスハンドルですが
vistaの場合vbNullString(=NULL)でうまく動作するのですが
win2000だとvbNullStringでは怒られます。
(「1428:モジュールハンドルなしでは、非ローカルフックを設定できません。」)

win2000でフックさせたい場合はインスタンスハンドルを渡してあげます。
ただ今度はインスタンスハンドルを渡すとvistaでは怒られてフックできないのです。
(「87:パラメータが正しくありません。」)

これは一体どういった仕組みなのでしょうか?
また現在XP環境がないのでXPで動作させるためにはどのような指定になるのか
何か手がかりになることがわかれば幸いです。
引用返信 編集キー/
■30691 / inTopicNo.2)  Re[1]: SetWindowsHookExのOSによる引数の違い
□投稿者/ オショウ (63回)-(2009/01/03(Sat) 02:27:52)
> win2000でフックさせたい場合はインスタンスハンドルを渡してあげます。
> ただ今度はインスタンスハンドルを渡すとvistaでは怒られてフックできないのです。
> (「87:パラメータが正しくありません。」)

  あくまで未確認です。

  VISTAの場合、その関係のAPIは、プロセス間での使用する機能ですので
  管理者権限が必要なのでは?

  試しに、そのアプリを管理者権限で機動した場合、Win2000と同様に、
  インスタンスハンドル渡しで成功しませんか?

以上。
引用返信 編集キー/
■30692 / inTopicNo.3)  Re[1]: SetWindowsHookExのOSによる引数の違い
□投稿者/ らべるさん (2回)-(2009/01/03(Sat) 02:33:28)
2009/01/03(Sat) 02:35:40 編集(投稿者)
2009/01/03(Sat) 02:35:28 編集(投稿者)

' 取り下げます。
引用返信 編集キー/
■30693 / inTopicNo.4)  Re[2]: SetWindowsHookExのOSによる引数の違い
□投稿者/ らべるさん (3回)-(2009/01/03(Sat) 02:34:54)
確認せず送信してしまいました。
返信ありがとうございます。
確認してみます。
引用返信 編集キー/
■30694 / inTopicNo.5)  Re[3]: SetWindowsHookExのOSによる引数の違い
□投稿者/ らべるさん (4回)-(2009/01/03(Sat) 02:54:46)
期待した結果は得られませんでした。
別方向で検討してみます。
ありがとうございました。

未解決ですがトピックを閉じます(解決済みにチェックします)。
解決済み
引用返信 編集キー/
■30701 / inTopicNo.6)  Re[4]: SetWindowsHookExのOSによる引数の違い
□投稿者/ オショウ (64回)-(2009/01/03(Sat) 09:46:35)
興味深い記事を見つけましたので、報告のみしておきます。

http://support.microsoft.com/kb/319524/ja

こんなのも・・・
http://dobon.net/vb/bbs/log3-3/1585.html
※ 最終的には、英語サイトに元記事があります。

以上。
引用返信 編集キー/
■30703 / inTopicNo.7)  Re[5]: SetWindowsHookExのOSによる引数の違い
□投稿者/ オショウ (65回)-(2009/01/03(Sat) 11:08:47)
追伸

SetWindowsHookEx関数の説明で・・・

hMod
lpfn パラメータが指すフックプロシージャを保持している DLL のハンドルを指定します。dwThreadId パラメータが、現在のプロセスが作成したスレッドを指定していて、フックプロシージャが現在のプロセスに関連付けられているコード内に存在する場合、hMod パラメータで NULL を指定しなければなりません。

とあります。
DLL形式では無いとのことですので、NULLと言うのが正しい仕様ですネ!〜

※ 見落としてました。

以上。
引用返信 編集キー/
■30704 / inTopicNo.8)  Re[5]: SetWindowsHookExのOSによる引数の違い
□投稿者/ Azulean (263回)-(2009/01/03(Sat) 20:37:52)
No30701 (オショウ さん) に返信
> 興味深い記事を見つけましたので、報告のみしておきます。
主張したいことが書いていないため、意図が読み取れませんでした。
念のため、下記のように整理しておきたいと思います。
誤りがあれば、ご指摘下さい。

・C#/VB.NET等のマネージコードで書かれたDLLは、基本的にグローバルフックに使用できない。
・グローバルフックでもWH_MOUSE_LL/WH_KEYBOARD_LLは例外で、C#やVB.NETでも利用できる。

# 質問主は一度解決済みつけているようなので、つけておきます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -