プロが教えるわが家の防犯対策術!

VB6かUWSCにて、フォーカスを移さずにクリックさせる方法がありましたら教えてください。

ネットで拾ってくるクリックをしてくれるフリーソフト(例えばGlobalShortcutHelper)の中には、
クリックをした後にそのクリックされたプログラム(たとえばブラウザなど)に
フォーカスが移らないものがあります。
そのようなプログラムを組む方法がありましたら教えてください。

擬似的に元のカーソル座標へ戻るようにプログラムしてみましたが
プログラム間の切り替えが明らかに発生しており、望むような結果にはなりませんでした。

A 回答 (2件)

まず、UWSC では不可能です。


VB6 ではできないことは無いような気がしますが、相当しんどいです。

このような要件のサンプルプログラムは、ほとんど C++ ですので、C++ を読んでVB6に翻訳する技術力があれば、可能です。……最初から C++ で作ったほうが早そうな気がしますが。

技術的には、以下の API で実現できます。しかし、この API を VB6 から呼び出すのは大変です。
PostMessage(h, WM_LBUTTONDOWN, 0, MakeLParam(p.X, p.Y));

この回答への補足

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

補足日時:2011/03/05 19:58
    • good
    • 0

原理的にはダイアログとかにクリックイベントを送る・・・ってやれば良いんだけど・・・



原理だけ 書いといた・・・やり方が色々あるからね・・・
    • good
    • 0
この回答へのお礼

ありがとうございます
sendmessageを使ってみようと思いました!

お礼日時:2011/03/05 19:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A