現在のマウスがある場所をただ仮想クリックするという動作なのですが、組んでみるとけっこう難しく、うまく動きません。
現在、アクティブウィンドウを取得して、そこにマウスクリックイベントを送っています。ですが、これだといくつか問題があります。
まず、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