- 締切済み
フォーカスを移さずに、クリックしたい
VB6かUWSCにて、フォーカスを移さずにクリックさせる方法がありましたら教えてください。 ネットで拾ってくるクリックをしてくれるフリーソフト(例えばGlobalShortcutHelper)の中には、 クリックをした後にそのクリックされたプログラム(たとえばブラウザなど)に フォーカスが移らないものがあります。 そのようなプログラムを組む方法がありましたら教えてください。 擬似的に元のカーソル座標へ戻るようにプログラムしてみましたが プログラム間の切り替えが明らかに発生しており、望むような結果にはなりませんでした。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
noname#212058
回答No.2
まず、UWSC では不可能です。 VB6 ではできないことは無いような気がしますが、相当しんどいです。 このような要件のサンプルプログラムは、ほとんど C++ ですので、C++ を読んでVB6に翻訳する技術力があれば、可能です。……最初から C++ で作ったほうが早そうな気がしますが。 技術的には、以下の API で実現できます。しかし、この API を VB6 から呼び出すのは大変です。 PostMessage(h, WM_LBUTTONDOWN, 0, MakeLParam(p.X, p.Y));
- SAYKA
- ベストアンサー率34% (944/2776)
回答No.1
原理的にはダイアログとかにクリックイベントを送る・・・ってやれば良いんだけど・・・ 原理だけ 書いといた・・・やり方が色々あるからね・・・
質問者
お礼
ありがとうございます sendmessageを使ってみようと思いました!
補足
VB6にて以下のように作ってみました。 FormにCommandボタンを貼り付けた状態です。 コマンドボタンをクリックするとフォームの右上座標の下にある ウィンドウのハンドルを取得して、その座標をクリックさせる・・・ というつもりで作ったのですが、うまく動きません。 ハンドルは数字でちゃんと取得できています。 座標も取得できています。 クリック(DOWN後にUP)がされないです。 よろしければ、アドバイスをください。 ================================= Option Explicit Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long Private Declare Function SendMessage Lib "user32" _ Alias "SendMessageA" _ (ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ lParam As Any) As Long Private Const WM_LBUTTONDOWN = &H201 Private Const WM_LBUTTONUP = &H202 Private Sub Command1_Click() Dim hTargetWnd As Long Dim lParam As Long Dim lx As Long Dim ly As Long lx = Me.Left / 15 ly = Me.Top / 15 hTargetWnd = WindowFromPoint(lx - 1, ly - 1) lParam = (ly * &H10000) + lx Call SendMessage(hTargetWnd, WM_LBUTTONDOWN, 0&, lParam) Call SendMessage(hTargetWnd, WM_LBUTTONUP, 0&, lParam) End Sub