|
|
|
2011/12/11(Sun) 07:24:29|NO.43649
題名通りですが、下のスクリプトを実行すると aが一度しか入力されません。
押し下げた状態を3秒間置いてるのですが実行されません。
色々ぐぐって見るとkeypress関数を送るとあるのですが、どうやって送ればいいのかまったく
わかりません><
>http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200904/09040031.txt
で、あったと思ったら自己解決でにっちもさっちも行きません。
わかる方いましたらどうかアドバイスお願いします。
#uselib "user32.dll"
#func SendInput "SendInput" int,int,int
#func MapVirtualKey "MapVirtualKeyA" int,int
#const INPUT_MOUSE $00000000 ;マウスイベント
#const INPUT_KEYBOARD $00000001 ;キーボードイベント
#const INPUT_HARDWARE $00000002 ;ハードウェアイベント
#const KEYEVENTF_KEYDOWN $00000000 ;KEYEVENTF_KEYUPを指定しなければ押す
#const KEYEVENTF_EXTENDEDKEY $00000001 ;[拡張キー]を使う場合に指定
#const KEYEVENTF_KEYUP $00000002 ;キーを離す
screen 0,100,100,8
button"",*j
stop
*j
exec "notepad"
wait 100
gsel 0,-1
wait 100
MapVirtualKey 65, 0
scan_code=stat
input_struct =INPUT_KEYBOARD,65+(scan_code<<16),KEYEVENTF_KEYDOWN | KEYEVENTF_EXTENDEDKEY,0,0,0,0
SendInput 3,varptr(input_struct),28
wait 300
MapVirtualKey 65, 0
scan_code=stat :
input_struct =INPUT_KEYBOARD,65+(scan_code<<16),KEYEVENTF_KEYUP | KEYEVENTF_EXTENDEDKEY,0,0,0,0
SendInput 3,varptr(input_struct),28
gsel 0,1
| |
|
2011/12/11(Sun) 12:24:26|NO.43660
連続で入力したいっていうのは下みたいなのでいいの?
#uselib "user32.dll"
#func SendInput "SendInput" int,int,int
#func MapVirtualKey "MapVirtualKeyA" int,int
#const INPUT_MOUSE $00000000 ;マウスイベント
#const INPUT_KEYBOARD $00000001 ;キーボードイベント
#const INPUT_HARDWARE $00000002 ;ハードウェアイベント
#const KEYEVENTF_KEYDOWN $00000000 ;KEYEVENTF_KEYUPを指定しなければ押す
#const KEYEVENTF_EXTENDEDKEY $00000001 ;[拡張キー]を使う場合に指定
#const KEYEVENTF_KEYUP $00000002 ;キーを離す
screen 0,100,100,8
button"",*j
stop
*j
exec "notepad"
wait 100
gsel 0,-1
wait 100
repeat 10 ;ここは何回連続で書きたいか。
MapVirtualKey 65, 0
scan_code=stat
input_struct =INPUT_KEYBOARD,65+(scan_code<<16),KEYEVENTF_KEYDOWN | KEYEVENTF_EXTENDEDKEY,0,0,0,0
SendInput 3,varptr(input_struct),28
wait 1 ;0,01秒に1回入力
loop
wait 300
MapVirtualKey 65, 0
scan_code=stat :
input_struct =INPUT_KEYBOARD,65+(scan_code<<16),KEYEVENTF_KEYUP | KEYEVENTF_EXTENDEDKEY,0,0,0,0
SendInput 3,varptr(input_struct),28
gsel 0,1
上のスクリプトは
repeat XX 〜wait Y 〜 loop
にしただけだよ。
|
|
2011/12/12(Mon) 01:32:38|NO.43686
ありがとうございます。
ひとつ疑問があるのですが、押す動作→離す動作と言う風にしなくても問題ないのでしょうか?
それから、常に押した状態になってるのか、それとも押す→押すという動作の間に自動的に離す
と言う動作が入ってるのでしょうか?
細かいことですが、よろしければ教えてください。
とりあえず解決ということで、有難うございました。
|
|
2011/12/13(Tue) 03:08:21|NO.43710
SendInputのp1はINPUT構造体の配列の数なのでこの場合は1で良いはずです。
>それから、常に押した状態になってるのか、それとも押す→押すという動作の間に自動的に離す
>と言う動作が入ってるのでしょうか?
#uselib "user32.dll"
#func SendInput "SendInput" int,int,int
#func MapVirtualKey "MapVirtualKeyA" int,int
#const INPUT_MOUSE $00000000 ;マウスイベント
#const INPUT_KEYBOARD $00000001 ;キーボードイベント
#const INPUT_HARDWARE $00000002 ;ハードウェアイベント
#const KEYEVENTF_KEYDOWN $00000000 ;KEYEVENTF_KEYUPを指定しなければ押す
#const KEYEVENTF_EXTENDEDKEY $00000001 ;[拡張キー]を使う場合に指定
#const KEYEVENTF_KEYUP $00000002 ;キーを離す
#const WM_KEYDOWN 0x0100
#const WM_KEYUP 0x0101
oncmd gosub *lb_OnKeyup, WM_KEYUP
oncmd gosub *lb_OnKeydown, WM_KEYDOWN
repeat 5
await 1
MapVirtualKey 65, 0
scan_code=stat
input_struct =INPUT_KEYBOARD,65+(scan_code<<16),KEYEVENTF_KEYDOWN | KEYEVENTF_EXTENDEDKEY,0,0,0,0
SendInput 1,varptr(input_struct),28
loop
MapVirtualKey 65, 0
scan_code=stat :
input_struct =INPUT_KEYBOARD,65+(scan_code<<16),KEYEVENTF_KEYUP | KEYEVENTF_EXTENDEDKEY,0,0,0,0
SendInput 1,varptr(input_struct),28
stop
*lb_OnKeyup
mes "WM_KEYUP"
return
*lb_OnKeydown
mes "WM_KEYDOWN"
return
| |
|
2011/12/13(Tue) 09:38:26|NO.43713
有難うございます。
「キーダウン→キーアップ」としなくても問題ないという解釈でいいのですね。
keybd_event関数の場合は、押したら離すという動作を入れなくてはならなかったので、
その点 SendInput は使いやすいかも・・。と今思いました。
有難うございました。
|
|