HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0208
にゃんちゃんマウスポインタの位置を仮想クリック2解決


にゃんちゃん

リンク

2015/2/8(Sun) 22:21:24|NO.67340

こんばんは。
現在のマウスがある場所をただ仮想クリックするという動作なのですが、組んでみるとけっこう難しく、うまく動きません。
現在、アクティブウィンドウを取得して、そこにマウスクリックイベントを送っています。ですが、これだといくつか問題があります。
まず、WM_lbuttondownに渡すマウス位置のパラメータが、スクリーン座標ではなくクライアント座標であること。これは演算で解決した(はず)なのですが、なぜか動きません。
次に、クリックした場所がアクティブウィンドウの外だった場合の処理。マウスが乗っているウィンドウのハンドルを取得できればいいのですが、なぜかWindowFromPoint関数がうまく動かせなくて放置。
そして、一番大事なWM_lbuttondownもうまくうごいていないみたいです。
どなたか、原因と対処法をご教授いただけると幸いです。
以下、動かないスクリプトです。ctrlを押すとクリックが走る設計にしています。

#uselib "USER32.DLL" #cfunc global GetForegroundWindow "GetForegroundWindow" #cfunc global WindowFromPoint "WindowFromPoint" sptr #define global GetWindowText GetWindowTextA #func global GetWindowTextA "GetWindowTextA" sptr,sptr,sptr//いずれ使う予定 #func global GetWindowRect "GetWindowRect" sptr,sptr *lp getkey k,17 if k:{ /* WindowFromPointは動きません point="" lpoke point,0,ginfo_mx lpoke point,4,ginfo_my //hWindow=windowFromPoint(varptr(point))      動きません //hWindow=windowFromPoint(point)      ためしにこうやっても動きません */ hWindow=getForegroundWindow()//しょうがないのでこっちを使う rect="" getWindowRect hWindow,varptr(rect)//位置情報取得 //マウスのスクリーン位置からクライアント領域のクリック位置を算出 x=ginfo_mx-lpeek(rect,0) y=ginfo_my-lpeek(rect,4) value = (x & 0xFFFF) | (y << 16)//パラメータとしてまとめて sendmsg hWindow,0x0201,1,value//送る } await 30 goto*lp end



この記事に返信する


tds12

リンク

2015/2/8(Sun) 23:39:04|NO.67343

このようなことでしょうか。

#include "llmod3/llmod3.hsp" #include "llmod3/input.hsp" *lp ;SHIFTが押されたら左ボタンを押す getkey kSHIFT,16 : if kSHIFT : Lbtn=$2 : else : Lbtn=0 mouse_event Lbtn await 30 goto *lp
llmod3/input.hspを使ってマウス入力しています。
このスクリプトでは、shiftによる左ボタン押しのみに対応しており、
左ボタンを離すための処理は別に用意する必要があります。
かなり短いスクリプトですが、自由に使って良いことを明示しておきます。



にゃんちゃん

リンク

2015/2/9(Mon) 16:33:24|NO.67347

llmod3、調べてませんでした。最初からAPIでやるつもりだったので、そっちばかり見てました。
lmodを使って希望のことができるかどうか、やってみたいとおもいます。ご回答ありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.