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


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
1211
hsp初心者SendInput で連続で文字列を入力したいのですが・・。4解決


hsp初心者

リンク

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



この記事に返信する


notroN

リンク

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
にしただけだよ。



hsp初心者

リンク

2011/12/12(Mon) 01:32:38|NO.43686

ありがとうございます。
ひとつ疑問があるのですが、押す動作→離す動作と言う風にしなくても問題ないのでしょうか?
それから、常に押した状態になってるのか、それとも押す→押すという動作の間に自動的に離す
と言う動作が入ってるのでしょうか?
細かいことですが、よろしければ教えてください。
とりあえず解決ということで、有難うございました。



pizza

リンク

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



hsp初心者

リンク

2011/12/13(Tue) 09:38:26|NO.43713

有難うございます。
「キーダウン→キーアップ」としなくても問題ないという解釈でいいのですね。
keybd_event関数の場合は、押したら離すという動作を入れなくてはならなかったので、
その点 SendInput は使いやすいかも・・。と今思いました。
有難うございました。



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