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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0528
B.Fクリックをするには?4解決


B.F

リンク

2008/5/28(Wed) 18:53:11|NO.16222

今、キーボードだけでマウスカーソルを
自由に操れるソフトを作ろうとしています。
マウスカーソルをキーボードで動かすことは
難なくできたのですが、クリックをさせることがどうしてもできません。
いろいろと命令やプラグインを調べてみたのですが
どうしてもできないので、
キーボードで何かボタンを押したら
クリックをしたことになるような命令を
教えてください。



この記事に返信する


Kpan

リンク

2008/5/28(Wed) 20:32:10|NO.16226

Win32 APIのmouse_event関数を使っては?



GENKI

リンク

2008/5/28(Wed) 20:37:45|NO.16230

aplkeyd、aplkeyuを使ってみてはいかがでしょうか。



flory

リンク

2008/5/28(Wed) 23:18:52|NO.16246

質問の趣旨からして、aplkey系は向かないと思います。
そこで、mouse_event関数の解説付きサンプルをば。

#uselib "user32.dll" #func mouse_event "mouse_event" int, int, int, int, int ////////mouse_event関数///////// ;マウスの移動やマウスボタンのクリックを合成する。 ;これを使えばプログラムからマウスの動作を行うことができる。 ;第一パラメータ: マウスの動作を指定する。意味のある組み合わせでなければならない。以下の値を指定できる。 #define MOUSEEVENTF_ABSOLUTE $00008000 ;これを指定すると第二、第三パラメータを絶対座標で指定できる #define MOUSEEVENTF_MOVE $00000001 ;マウスカーソルが移動した #define MOUSEEVENTF_LEFTDOWN $00000002 ;左ボタンが押された #define MOUSEEVENTF_LEFTUP $00000004 ;左ボタンが離された #define MOUSEEVENTF_RIGHTDOWN $00000008 ;右ボタンが押された #define MOUSEEVENTF_RIGHTUP $00000010 ;右ボタンが離された #define MOUSEEVENTF_MIDDLEDOWN $00000020 ;中央ボタンが押された #define MOUSEEVENTF_MIDDLEUP $00000040 ;中央ボタンが離された #define MOUSEEVENTF_WHEEL $00000800 ;マウスホイールが回された #define MOUSEEVENTF_XDOWN $00000080 ;xボタンが押された #define MOUSEEVENTF_XUP $00000100 ;xボタンが離された ;第二パラメータ: MOUSEEVENTF_MOVE時のx方向移動量。 ;第三パラメータ: MOUSEEVENTF_MOVE時のy方向移動量。 ;第四パラメータ: MOUSEEVENTF_WHEEL時のホイール回転量。一回のホイールクリックは120になる。 ; また、MOUSEEVENTF_XDOWNおよびMOUSEEVENTF_XUPを指定した場合はxボタンを指定する。 #define XBUTTON1 $00000001 ;最初のxボタンが押されたor離された #define XBUTTON2 $00000002 ;二番目のxボタンが押されたor離された ;第五パラメータ: マウスイベントに関連付けられた 32 ビットの追加情報を指定する。 ; GetMessageExtraInfo関数を呼び出すとこの値を取得できる。 ; しかし、SetMessageExtraInfo関数を使わない限り0なので、普段は0でよい。 //////////////////////////////// ;#cfunc GetMessageExtraInfo "GetMessageExtraInfo" //////////以下サンプル////////// flag = 0 ;この変数を使って、スペースキーが押された瞬間と離された瞬間を感知する。 repeat mx = 0 ;x移動量をリセット。 my = 0 ;y移動量をリセット。 stick key, 31, 0 ;第二パラメータを指定して押され続けている間も検出。第三パラメータに0を指定して非アクティブ時も検出。 if key&1 : mx -= 5 ;←キーでx移動量を減らす。 if key&2 : my -= 5 ;↑キーでy移動量を減らす。 if key&4 : mx += 5 ;→キーでx移動量を増やす。 if key&8 : my += 5 ;↓キーでy移動量を増やす。 mouse_event MOUSEEVENTF_MOVE, mx, my, 0, 0 ;マウスカーソル移動。 if key&16 { ;スペースキーが押されているとき if flag = 0 { ;スペースキーが押された瞬間 mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 ;左ボタン押す。 flag = 1 } } else { ;スペースキーが押されていないとき if flag = 1 { ;スペースキーが離された瞬間 mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 ;左ボタン離す。 flag = 0 } } wait 1 loop //////////////追記////////////// ;自分のウィンドウおよびデバッグウィンドウのタイトルバーや最小化・最大化ボタン、閉じるボタンなどを ;このスクリプトで「クリック」する(つまりスペースキーを押す)と、スクリプトの実行が中断されてしまう。 ;この場合、MOUSEEVENTF_LEFTDOWNは送信されているが、MOUSEEVENTF_LEFTUPは送信されていないので、 ;左ボタンが押しっぱなしの状態になる。 ;そうなったときはマウスで一度クリックしてやると復帰する。
MSDNによれば、mouse_event関数は
>この関数は、SendInput関数にとって代わられました。
らしいですが、このほうがわかりやすいので。



B.F

リンク

2008/5/30(Fri) 17:19:25|NO.16305

floryさん サンプルどうもありがとうございました。
無事つくることができました。



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