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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0306
yarioある部分が実行されない6解決


yario

リンク

2015/3/6(Fri) 16:07:43|NO.67727

ある部分が実行されずに困っています。
#pack "hspext.dll"
#include "hspext.as" #uselib "user32.dll" #func global GetClassName "GetClassNameA" int,int,int #func global WindowFromPoint "WindowFromPoint" int,int sdim classname,256 sdim txt,20,7 sdim loadtxt,200000 waittime=0 *classgetset screen 0,320,24,0 : gsel 0,2 title "記録対象をShift+左クリック" mesbox classname,320,24,0,256 *classget classname="" WindowFromPoint ginfo_mx,ginfo_my GetClassName stat,varptr(classname),256 objprm 0,classname getkey click,1 getkey shift,16 if click=1 and shift=1 { dialog "記録対象["+classname+"]でよろしいですか?",2,"a" if stat=6 :goto *main } wait 10 goto *classget *main screen 0,360,100 title "BlockAction Tool-Assisted Superplay" clrobj pos 0,0 mesbox loadtxt,240,100,5 pos 240,0 objsize 60,50 button "保存",*save pos 240,50 button "読込",*load pos 300,0 button "対象変更",*classgetset pos 300,50 button "再生",*play stop *play notesel loadmax noteget repeatframe,1 repeat int(repeatframe) aplobj classname aplact noteget utility,frame+1 if waittime=0 { repeat 7 if cnt=0 :sstr="press ctrl":keycode=17 if cnt=1 :sstr="press left":keycode=37 if cnt=2 :sstr="press up":keycode=38 if cnt=3 :sstr="press right":keycode=39 if cnt=4 :sstr="press down":keycode=40 if cnt=5 :sstr="press space":keycode=16 if cnt=6 :sstr="press tab":keycode=17 ifstat=instr(utility,0,sstr) if ifstat!-1 :aplkeyd keycode:await 1 loop repeat 7 if cnt=0 :sstr="letgo ctrl":keycode=17 if cnt=1 :sstr="letgo left":keycode=37 if cnt=2 :sstr="letgo up":keycode=38 if cnt=3 :sstr="letgo right":keycode=39 if cnt=4 :sstr="letgo down":keycode=40 if cnt=5 :sstr="letgo space":keycode=16 if cnt=6 :sstr="letgo tab":keycode=17 ifstat=instr(utility,0,sstr) if ifstat!-1 :aplkeyu keycode:await 1 loop ifstat=instr(utility,0,"wait") if ifstat!-1 { waittime=int(strmid(utility,ifstat,5)) frame=frame+1 } } else { waittime=waittime-1 } await 10 loop stop *save dialog "txt",17,"テキストファイル" if stat=0 :stop notesel loadtxt notesave refstr goto *main *load dialog "txt",16,"テキストファイル" if stat=0 :stop notesel loadtxt noteload refstr goto *main
ソース丸写しで見にくいかもですが問題の部分は
if waittime=0 {
repeat 7 if cnt=0 :sstr="press ctrl":keycode=17 if cnt=1 :sstr="press left":keycode=37 if cnt=2 :sstr="press up":keycode=38 if cnt=3 :sstr="press right":keycode=39 if cnt=4 :sstr="press down":keycode=40 if cnt=5 :sstr="press space":keycode=16 if cnt=6 :sstr="press tab":keycode=17 ifstat=instr(utility,0,sstr) if ifstat!-1 :aplkeyd keycode:await 1 loop repeat 7 if cnt=0 :sstr="letgo ctrl":keycode=17 if cnt=1 :sstr="letgo left":keycode=37 if cnt=2 :sstr="letgo up":keycode=38 if cnt=3 :sstr="letgo right":keycode=39 if cnt=4 :sstr="letgo down":keycode=40 if cnt=5 :sstr="letgo space":keycode=16 if cnt=6 :sstr="letgo tab":keycode=17 ifstat=instr(utility,0,sstr) if ifstat!-1 :aplkeyu keycode:await 1 loop ifstat=instr(utility,0,"wait") if ifstat!-1 { waittime=int(strmid(utility,ifstat,5)) frame=frame+1 }
だと思うのですが。。。ご教示お願いします



この記事に返信する


tds12

リンク

2015/3/6(Fri) 17:30:55|NO.67728

これで、実行されない問題は解決されると思います。

*play ; notesel loadmax notesel loadtxt ; noteget repeatframe,1 ; repeat int(repeatframe) repeat notemax ; aplobj classname aplsel classname aplact ; noteget utility,frame+1 noteget utility,cnt if waittime<=0 { repeat 7 if cnt=0 :sstr="press ctrl":keycode=17 if cnt=1 :sstr="press left":keycode=37 if cnt=2 :sstr="press up":keycode=38 if cnt=3 :sstr="press right":keycode=39 if cnt=4 :sstr="press down":keycode=40 if cnt=5 :sstr="press space":keycode=16 ; if cnt=6 :sstr="press tab":keycode=17 if cnt=6 :sstr="press tab":keycode=9 ifstat=instr(utility,0,sstr) if ifstat!-1 :aplkeyd keycode:await 1 loop ; dialog "true" repeat 7 if cnt=0 :sstr="letgo ctrl":keycode=17 if cnt=1 :sstr="letgo left":keycode=37 if cnt=2 :sstr="letgo up":keycode=38 if cnt=3 :sstr="letgo right":keycode=39 if cnt=4 :sstr="letgo down":keycode=40 if cnt=5 :sstr="letgo space":keycode=16 if cnt=6 :sstr="letgo tab":keycode=17 ifstat=instr(utility,0,sstr) if ifstat!-1 :aplkeyu keycode:await 1 loop ifstat=instr(utility,0,"wait") if ifstat!-1 { waittime=int(strmid(utility,ifstat,5)) ; frame=frame+1 } } else { waittime=waittime-1 dialog "min" } await 10 loop stop
特に問題だったのがloadmax変数です。

ただし、正しく動くことは確認できませんでした。

Altキーと他のアルファベットもあると良いと思います。

タスクバーに表示されているような親ウィンドウの
ボタンなどがついていない部分で選択しないと
うまく実行されないと思います。



yario

リンク

2015/3/6(Fri) 18:29:52|NO.67730

回答ありがとうございます。
blockactionというflashゲームの操作キーに合わせているので他のキーを必要ないです。

「タスクバーに表示されているような親ウィンドウの
ボタンなどがついていない部分で選択しないと
うまく実行されないと思います。」
がよくわからないんですが・・・



tds12

リンク

2015/3/6(Fri) 19:52:55|NO.67732

先ほどのスクリプトに誤りがありました。

*classget classname="" WindowFromPoint ginfo_mx,ginfo_my //変更 htargetwnd = stat GetClassName htargetwnd,varptr(classname),256 sdim wndname,1024 sendmsg htargetwnd,WM_GETTEXT,1024,varptr(wndname) ///ここまで変更 objprm 0,classname getkey click,1 getkey shift,16 if click=1 and shift=1 { dialog "記録対象["+classname+"]でよろしいですか?",2,"a" if stat=6 :goto *main } wait 10 goto *classget
このように直してから、
aplsel classnameをaplsel wndnameに
書き換えてください。
これで指定したウィンドウまで辿り着くことができます。



tds12

リンク

2015/3/6(Fri) 20:07:52|NO.67733

>他のキーを必要ないです。
そのゲームは知らなかったのですが、
こちらの確認にはキーが足りませんでした。
そのゲームサイトらしきページを見てみましたが、
ブラウザが不具合を起こして見られませんでした。

>がよくわからないんですが・
ウィンドウをaplselで取得してから
オブジェクトをaplobjを取得する必要があるところ、
aplselのみを使っているためです。



yario

リンク

2015/3/6(Fri) 20:13:18|NO.67734

なるほど。
aplselとaplobjの違いもいまいちよくわからないんですが・・・
分かったとして何を割り当てれば・・・



yario

リンク

2015/3/8(Sun) 15:34:06|NO.67756

質問の題名を変えて再投稿します。



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