• ベストアンサー

他のアプリケーションをクリックしたときのイベントを得る方法

タイトル通り、他のアプリケーションを左クリックしたときのイベントを得たいのですが、うまくいきません。 具体的には、DirectXを使って動いているフルスクリーンのアプリケーションを左クリックしたときにイベントを得るということです。 http://tokyo.cool.ne.jp/kanain/APIHTM/GetMsg.html こちらで紹介されている方法でVBのフォームを左クリックしたときのイベントは得ることができました。 そして、他のアプリケーションのハンドルを取得して引数に指定してみましたが、うまくいきません。 分かりにくい説明ですみません^^; 何が間違っているのでしょうか。自分なりに作ってみたソースを記述した方がよいでしょうか?また、全く違う方法でも構わないので他のアプリケーションを左クリックしたときのイベントを得る方法がありましたら教えてください。 バージョン:VB6.0

質問者が選んだベストアンサー

  • ベストアンサー
  • hofuhofu
  • ベストアンサー率70% (336/476)
回答No.1

ここよりの引用 http://www.microsoft.com/JAPAN/developer/library/jpuipf/_win32_setwindowlong.htm 「Windows 95/98:hWnd パラメータで指定したウィンドウが SetWindowLong 関数を呼び出したスレッドと同じプロセスに属していないと、SetWindowLong 関数は失敗します。」 他プロセスのイベントの取得はグローバルフックを使えばできますが、VBだけでは無理っぽいですね。 http://www.geocities.co.jp/SiliconValley/7406/tips/mouse/

piko7531
質問者

お礼

回答ありがとうございます。 SetWindowLongでは別プロセスのイベントは取得できなかったんですね。 >他プロセスのイベントの取得はグローバルフックを使えばできますが、VBだけでは無理っぽいですね。 VBではできないんですか・・・。残念。 今回はマウスクリックではなくGetAsyncKeyStateとタイマーでキーボード入力からイベントを取得して代用することにしたいと思います。

その他の回答 (1)

  • 2ch
  • ベストアンサー率51% (64/125)
回答No.2

#1の言うように >SetWindowsHookEx で、Windows全てのイベントを取得する方法のほかに、 95系 CreateFileMapping/MapViewOfFile NT系 VirtualAllocEx/WriteProcessMemory/ReadProcessMemory で特定ハンドルに対するイベントは取得できます。 参考URL(VCですが) http://techtips.belution.com/ja/vc/0001/ で、別プロセスのリストビュー、ツリービュー(簡単に言ってしまえばエクスプローラ)のイベントを取得いたしました。VBにコンバートするにはチト厄介ですが、可能です。 もし完全に別プロセスのイベントが取得できないと言うのであれば、VisualStudio付属のアプリケーション「Spy++」はどうやってんだ?ってことになります。

piko7531
質問者

お礼

回答ありがとうございます。 参考URL拝見しましたが難しくてよく分かりませんでした(汗 今回はマウスクリックのイベントを取得するのではなくキーボード入力からの取得で代用しようと思います。

関連するQ&A