• ベストアンサー

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

タイトル通り、他のアプリケーションを左クリックしたときのイベントを得たいのですが、うまくいきません。 具体的には、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

  • comboboxのクリックイベントについて

    VB6です comboboxを設置してクリックイベントに処理を書いたら、フォームロード時に必ず1回クリックイベントが発生します。 当初はフラグを立ててこの現象を回避していたのですが、コードを書くうちに、この最初のクリックイベントが面倒で仕方ありません。 comboboxを設置するとフォームロード時に必ずクリックイベントが発生するのはVB6の仕様なのでしょうか。 それともほかに回避の仕方があるのでしょうか。

  • VB6 コマンドボタン クリックイベントについて

    教えてください。 フォームに貼り付けているコマンドボタンのクリックイベントについてですが、クリックイベント内の処理で処理に時間がかかります。コマンドボタンを1度クリックすると、この処理を実行します。この状態であれば、問題ないのです。ところが、コマンドボタンを押して、処理している間にコマンドボタンを連打すると、ずーっと同じ処理を繰り返してしまいます。 クリックイベントが待ち行列にたまっているように思えるのですが、 これを回避する方法などがあれば教えてください。 ・待ち行列をクリアするとか ・待ち行列にイベントがたまっていても、1度しか実行しない。 などなど、具体的な方法とサンプルコードなどを教えていただけないでしょうか。お願いします。 環境VB6 WIN2K です。

  • 他のフォームのイベントを起動させる方法

    アクセスです。 Fログイン_サブフォーム と言う名前のフォームがあり、 そのフォームの中には、 cmd_ログインする と言うコマンドボタンがあります。 cmd_ログインするのクリックイベントでは フォームモジュールのcmd_ログインする_Clickに記載されたたくさんのコードがあります。 新たにフォーム1を作り、コマンドボタンを押下すると、 Fログイン_サブフォームのcmd_ログインする_Clickを実行させるにはどうすればいいでしょうか? フォーム1のフォームモジュールの Private Sub コマンドボタン_Click() で、 Call Fログイン_サブフォーム!cmd_ログインする_Click としましたが、 VBAを実行する前に、コンパイルエラーになります。 Fログイン_サブフォーム!cmd_ログインする_Click としてもダメです。 フォームから同じプロジェクト内の他のフォームのイベントを起動させる方法を教えてください。 よろしくお願いします。

  • サブフォームでのダブルクリックイベント

    Access2003です。 フォームにサブフォームを設置し、直接テーブルを表示させています。 このサブフォームのテーブルのある行をダブルクリックしたら その行のデータを他のフォームのオブジェクトにセットしたいのですが 行や行のデータ全てを取得は出来るのですが、サブフォームのイベントがEnterとExitしかなくて、イベント発生が出来ません。 フォームのダブルクリックでXとYを見て…と思ったのですがサブフォーム上ではフォームのダブルクリックイベントが発生せず。 サブフォームのテーブルはユーザーがソートする事もあるのでベタに上にテキストボックス等を置く事は出来ません。 どうにかダブルクリックで動作させる方法はありませんでしょうか?

  • VBでクリックイベントを発生させたいです

    VBのことについての質問なんですが 座標を指定してマウスカーソルを自動でクリックさせたり、何秒間か長押しさせたりするイベントの発生のさせ方はどうするんですか? またデスクトップの座標ではなく、フォーム内での座標指定はできますか? 回答よろしくお願いいたします

  • クリックイベントなのに、2回クリックしないとフォー

    クリックイベントなのに、2回クリックしないとフォームが閉じないです。 フォームに閉じると言うコマンドボタンがあり、クリックイベントで Private Sub cmd_閉じる_Click() DoCmd.Close acForm, Me.Name End Sub としてるのですが、なぜか1回ボタンを押しただけではフォームが閉じません。 2回目押した時にフォームがとじます。 ダブルクリックでも閉じます。 Private Sub cmd_閉じる_Click() 'DoCmd.Close acForm, Form_Fフォーム.Name End Sub のように、フォーム名を指定すると1回のクリックで閉じます。 しかしMe.Nameだと2回目じゃないと閉じない理由がわかりません。 Fフォームは他フォームから DoCmd.OpenForm Form_Fフォーム.Name, acNormal で開いたから2回クリックしないと閉じないのでしょうか?

  • VBのイベント処理について

    お世話になります。 VB6.0のイベント処理について教えてください。 VB.NETでは、イベント処理のメソッド(VBだとプロシージャですか) のシグニチャのおしりに Handles Button1.Click という記述がされているので、このメソッドはButton1のクリックという イベントが発生したときに行われる処理だなと見当がつくのですが、 VB6.0ではその記述をしないのが一般的とみました。 してそのときに、このメソッドがButton1のクリック時のイベントだと いうのは、どのように判断されるのですか?メソッド名が Button1_Click みたいに勝手につけられるので、それで判断されるのですか?という ことはメソッド名を変えたらそのメソッドはButton1のクリック時の イベント処理メソッドではなくなってしまうのですか? よろしくご教授ください。

  • シートのクリックイベントは拾えないのか?

    ExcelのVBAに関する質問です。 さきほど「セルをクリック、またはダブルクリックしたときに○○したい」という質問に回答したのですが、「セルをクリックした」というイベントを拾う方法がわからず、ダブルクリックのパターンで回答しました。 Worksheetのイベントには BeforeDobuleClick や BeforeRightClick はあるのに Click や onClick というイベントがありません。オートシェイプなどのオブジェクトやフォーム上のオブジェクトには Click イベントがあるのですが、Worksheet になぜかありません。 これまでも同様のケースがあり、ネットで検索したりしたのですが、どれも SelectionChange で代用するものでした。それだと確かにマウスで別セルを選択したときにイベントが発生しますが、 ・キーボード操作でセルを移動してもイベントが発生する ・現在選択しているセルをクリックしてもイベントが発生しない と、厳密はマウスでクリックしたときと同じ動作になりません。 確か以前の質問で「あるセルをクリックするたびに、他のセルの値をカウントアップしたい」というようなものもありました。このような場合には、やはり Click に相当するようなイベントで処理したいです。 どうにかしてWorksheetでクリックイベントを拾うことはできないのでしょうか?

  • ラインコントロールにクリックイベント

    ラインコントロールにイベントが発生しないことは分かっています。 なので、自作しないといけないのかなと思っていますが、良い方法が見つかりません。クリックイベントが発生するようなラインのユーザーコントロールの作り方を教えていただけませんか? あるいは、フォームのクリックイベントで、そこがラインコントロール上か否かという判断をさせる方法でもいいです。 よろしくお願いします。

  • VB.NETでマウスクリックイベントを発生させたい。

    VB.NETでformの外で任意の座標でマウスクリックイベントを発生させたい。 formにはボタンがあり、そのボタンを押すを固定位置(formの外)でマウスの左クリックイベントを発生させたいのですがどのような手段を使えばいいでしょうか。 環境 Windows XP,VB2008 Exoress

専門家に質問してみよう