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


HSPTV!掲示板


未解決 解決 停止 削除要請

2023
0601
MIZUSHIKInetincludeモジュールカード(HSPTV!掲示板仕様)[並行処理サンプル]9解決


MIZUSHIKI

リンク

2023/6/1(Thu) 19:54:05|NO.99534

「並列処理について」のスレッド
http://hsp.tv/play/pforum.php?mode=all&num=99411

で、最初 1さんのやりたいことは『wait中に勝手に他の処理してくれるスクリプトを書きたい(出来れば手軽に)』感じかな〜と想像して準備してみたけど、別に全然そんなこと無さそうだったので静観してまして、、、解決したかはわからないですがそろそろノイズにはならないだろうということで、供養(と宣伝)の意味を込めてひとりごと投稿です。

netincludeモジュールカード(HSPTV!掲示板仕様)
・HSPのcommonフォルダにモジュールをダウンロード(今回TimerRepeatモジュール)
・通常はcommonに保存するので「timer_repeat」等の上でF1キーを押すとヘルプが見れます。
・netincludeについて詳細は https://suwa.pupu.jp/HSP/index.html#netinclude

#ifdef _debug/////////////////////////////////////////////////////////////////////////////////////////////// #include"hspinet.as"//////////////////////////////////////////////////// mod_netinclude-min.hsp - Ver.3.1 // #include"mod_regexp.as"///////////////////////////////////////////////////////////////////// by MIZUSHIKI // #define netinclude(%1,%2=0,%3=0,%4=0) addition %1*////////////////////////////////////////////////////////// a@@="":w@@=dir_exe+"\\common\\":y@@="#net\include":notesel a@@:noteload"hsptmp":i@@="(?:\\s*,\\s*\"(.*?)\")? noteunsel:matches a@@,a@@,y@@+"\\s*\"(net/|https?)?(.+?)\"\\s*/\\s*,?\\s*(\\w*)(\n)?\\s*;*/*"+i@@+i@@:b@@="0 repeat stat:a@@.cnt="0":x@@=w@@:if"current"=a@@.cnt.3{x@@=""}exist x@@+a@@.cnt.1+a@@.cnt.2:if strsize<0{:::: if""!b@@{netinit:b@@=""}a@@.cnt="":if""=x@@{a@@.cnt.3="2":m@@++}else{a@@.cnt.3="1":n@@++}}loop:if n@@+m@@>0{ s@@="","","":z@@="ダウンロード":repeat 2,1:i@@=cnt:foreach a@@:if"0"=a@@.cnt{continue}if""+i@@!a@@.cnt.3{::: continue}if"net/"=a@@.cnt.1{a@@.cnt="0":k@@=cnt:if""=b@@{neturl"https\://timetag.main.jp/HSP3NetModules/netm netrequest_get"od.php?req=data":do:wait 5:netexec n@@:until n@@:netgetv b@@:matches b@@,b@@,"^(.*?)\t(.*?)$" j@@=stat}repeat j@@:if getpath(b@@.cnt.1,16)=getpath(a@@.k@@.2,16){a@@.k@@=b@@.cnt.2:a@@.k@@.2=b@@.cnt.1:::: break}loop:if"0"=a@@.cnt{continue}s@@.i@@+=">net/(->"+a@@.cnt+")"+a@@.cnt.2+"\n"}else{s@@.i@@+=">"+a@@.cnt.1 s@@.i@@+=a@@.cnt.2+"\n"}loop:loop:if""!s@@.1{s@@.0+=w@@+"\n\nに\n\n"+s@@.1:if""!s@@.2{s@@.0+="\nを"+z@@+"、" s@@.0+="\n------\n\n"}}if""=s@@.1+s@@.2{dialog"モジュールデータが見つかりませんでした",1,y@@:end}if""!s@@.2{ s@@.0+=dir_cur+"\n\nに\n\n"+s@@.2}dialog s@@.0+"\nを"+z@@+"します。",2,y@@:if stat=6{s@@="":x@@=dir_cur::::: foreach a@@:if"0"=a@@.cnt{continue}if"1"=a@@.cnt.3{chdir w@@}a@@.cnt.3=a@@.cnt.1+":/":a@@.cnt.1+=a@@.cnt.2:: split a@@.cnt.1,"/",b@@:repeat stat-1:dirlist i@@,b@@.cnt,5:if stat=0{mkdir b@@.cnt}chdir b@@.cnt:loop:::::: a@@.cnt+=a@@.cnt.2:j@@=a@@.cnt.6:if$70747468!lpeek(a@@.cnt.1){a@@.cnt.3="https\://raw.githubusercontent.com/ }neturl replace(replace(a@@.cnt.3+a@@.cnt,"#.*$",""),"?","?"):netrequest_get"":do:wait 5:netexec n@@::::::: until n@@:netgetv b@@:if n@@<0{s@@+="\n>"+a@@.cnt}else{if""!j@@{nkfcnv b@@,b@@,j@@,,stat}if""!a@@.cnt.5{:::: b@@=submatch(b@@,a@@.cnt.5,,1)}m@@=getpath(a@@.cnt,8):notesel b@@:notesave m@@:if instr(j@@,0,"D")!-1{:::::: m@@=dir_cur+"/"+m@@:k@@="powershell \"Add-Type -AssemblyName System.Web;$s=Get-Content '"+m@@+"' -Raw;$d=[S" k@@+="ystem.Web.HttpUtility]::HtmlDecode($s.Replace('<br>',\\\"`r`n\\\"));Set-Content -Path '"+m@@+"' $d;\"" exec k@@,2}}chdir x@@:loop:if""!s@@{dialog z@@+"失敗\n"+s@@:end}dialog z@@+"完了。\n再実行して下さい":end}}: #else/////////////////////////////////////////////////////////////////////////////////////////////////////// #define netinclude(%1,%2=0,%3=0,%4=0) include %1//////////////////////////////////// Download HSP3 module // #endif////////////////////////////////////////////////////////////////////////////////////////////////////// #netinclude "net/mod_TimerRepeat.hsp"/ ; ←必ず末尾「 / 」が必要です // 並行処理1 pos 50,30 : mes "並行1:40ms毎" timer_repeat 40 ; 40ミリ秒ごとに実行 color 255,255,255 : boxf 50,50,150,150 : color 255,0,0 line 100,100,100+(sin(M_PI*timer_cnt/10)*50),100+(cos(M_PI*timer_cnt/10)*50) pos 100,100 : mes ""+timer_cnt timer_loop // 並行処理2 pos 250,30 : mes "並行2:60ms毎" timer_repeat 60 ; 60ミリ秒ごとに実行 color 255,255,255 : boxf 250,50,350,150 : color 0,0,255 line 300,100,300+(sin(M_PI*timer_cnt/36)*50),100+(cos(M_PI*timer_cnt/36)*50) pos 300,100 : mes ""+timer_cnt timer_loop // メインのループプログラム(タイトルバーでカウント) repeat title "メイン: count= "+cnt await 1000 loop
『wait中に勝手に他の処理』
本当はそんなこと出来ないので、モジュールでそれっぽくなるものを紹介するつもりでした。

スクリプトの見た目には、await 1000 で1秒待ってる間に勝手に並行処理1、並行処理2が実行されているように見えます。
ただ実際は、await 1000 の行がTimerRepeatモジュールによって分解され、適切なwait後に必要な処理へgosubしています。

ゲームに組み込むのは精度やフレーム処理等の要因からそんなにお勧めはできませんが、ツール等で使う分には問題ないかと思っています。

使用例の紹介ですが、私の自作スクショアプリPriScVistaでは、スクショしたときプレビューがニョキっと出てきたりするところや、ボタンがうにょうにょ伸びたり縮んだりするようなところで使ってまして、
それぞれのオブジェクトがtimer_repeatで独立して並行処理しています。
(古いバージョンの映像ですが https://twitter.com/millline/status/1458827721820147715 ←この20秒あたりからのそれ)



この記事に返信する


MIZUSHIKI

リンク

2023/6/1(Thu) 19:57:30|NO.99535

>ニョキっと出てきたりするところや、ボタンがうにょうにょ伸びたり縮んだり
>それぞれのオブジェクトがtimer_repeatで独立して並行処理

ちょっと長めで冗長ですけれど、大体イメージはこんな感じです。

#ifdef _debug/////////////////////////////////////////////////////////////////////////////////////////////// #include"hspinet.as"//////////////////////////////////////////////////// mod_netinclude-min.hsp - Ver.3.1 // #include"mod_regexp.as"///////////////////////////////////////////////////////////////////// by MIZUSHIKI // #define netinclude(%1,%2=0,%3=0,%4=0) addition %1*////////////////////////////////////////////////////////// a@@="":w@@=dir_exe+"\\common\\":y@@="#net\include":notesel a@@:noteload"hsptmp":i@@="(?:\\s*,\\s*\"(.*?)\")? noteunsel:matches a@@,a@@,y@@+"\\s*\"(net/|https?)?(.+?)\"\\s*/\\s*,?\\s*(\\w*)(\n)?\\s*;*/*"+i@@+i@@:b@@="0 repeat stat:a@@.cnt="0":x@@=w@@:if"current"=a@@.cnt.3{x@@=""}exist x@@+a@@.cnt.1+a@@.cnt.2:if strsize<0{:::: if""!b@@{netinit:b@@=""}a@@.cnt="":if""=x@@{a@@.cnt.3="2":m@@++}else{a@@.cnt.3="1":n@@++}}loop:if n@@+m@@>0{ s@@="","","":z@@="ダウンロード":repeat 2,1:i@@=cnt:foreach a@@:if"0"=a@@.cnt{continue}if""+i@@!a@@.cnt.3{::: continue}if"net/"=a@@.cnt.1{a@@.cnt="0":k@@=cnt:if""=b@@{neturl"https\://timetag.main.jp/HSP3NetModules/netm netrequest_get"od.php?req=data":do:wait 5:netexec n@@:until n@@:netgetv b@@:matches b@@,b@@,"^(.*?)\t(.*?)$" j@@=stat}repeat j@@:if getpath(b@@.cnt.1,16)=getpath(a@@.k@@.2,16){a@@.k@@=b@@.cnt.2:a@@.k@@.2=b@@.cnt.1:::: break}loop:if"0"=a@@.cnt{continue}s@@.i@@+=">net/(->"+a@@.cnt+")"+a@@.cnt.2+"\n"}else{s@@.i@@+=">"+a@@.cnt.1 s@@.i@@+=a@@.cnt.2+"\n"}loop:loop:if""!s@@.1{s@@.0+=w@@+"\n\nに\n\n"+s@@.1:if""!s@@.2{s@@.0+="\nを"+z@@+"、" s@@.0+="\n------\n\n"}}if""=s@@.1+s@@.2{dialog"モジュールデータが見つかりませんでした",1,y@@:end}if""!s@@.2{ s@@.0+=dir_cur+"\n\nに\n\n"+s@@.2}dialog s@@.0+"\nを"+z@@+"します。",2,y@@:if stat=6{s@@="":x@@=dir_cur::::: foreach a@@:if"0"=a@@.cnt{continue}if"1"=a@@.cnt.3{chdir w@@}a@@.cnt.3=a@@.cnt.1+":/":a@@.cnt.1+=a@@.cnt.2:: split a@@.cnt.1,"/",b@@:repeat stat-1:dirlist i@@,b@@.cnt,5:if stat=0{mkdir b@@.cnt}chdir b@@.cnt:loop:::::: a@@.cnt+=a@@.cnt.2:j@@=a@@.cnt.6:if$70747468!lpeek(a@@.cnt.1){a@@.cnt.3="https\://raw.githubusercontent.com/ }neturl replace(replace(a@@.cnt.3+a@@.cnt,"#.*$",""),"?","?"):netrequest_get"":do:wait 5:netexec n@@::::::: until n@@:netgetv b@@:if n@@<0{s@@+="\n>"+a@@.cnt}else{if""!j@@{nkfcnv b@@,b@@,j@@,,stat}if""!a@@.cnt.5{:::: b@@=submatch(b@@,a@@.cnt.5,,1)}m@@=getpath(a@@.cnt,8):notesel b@@:notesave m@@:if instr(j@@,0,"D")!-1{:::::: m@@=dir_cur+"/"+m@@:k@@="powershell \"Add-Type -AssemblyName System.Web;$s=Get-Content '"+m@@+"' -Raw;$d=[S" k@@+="ystem.Web.HttpUtility]::HtmlDecode($s.Replace('<br>',\\\"`r`n\\\"));Set-Content -Path '"+m@@+"' $d;\"" exec k@@,2}}chdir x@@:loop:if""!s@@{dialog z@@+"失敗\n"+s@@:end}dialog z@@+"完了。\n再実行して下さい":end}}: #else/////////////////////////////////////////////////////////////////////////////////////////////////////// #define netinclude(%1,%2=0,%3=0,%4=0) include %1//////////////////////////////////// Download HSP3 module // #endif////////////////////////////////////////////////////////////////////////////////////////////////////// #netinclude "net/mod_TimerRepeat.hsp"/ #netinclude "net/a2d+AlphaLayer.hsp"/ #ifndef uniq2 // 今後のバージョンアップで増やす予定... #define global ctype uniq2(%1) %tunique %1@%p1 #define global ctype uniq3(%1) %tunique %1@%p2 #endif // Menu1 alCreateImage 1, 150,50 ; Artlet2D仮想イメージ(imageID=1) alColor 64, 64, 64, 200 : alFillRect : alColor 255, 255, 255, 255 : alFont "", 20 alDrawText "≡", 0, 0, 50, 50, 1, 1 alDrawText "Menu 1", 50, 0, 100, 50, 1, 1 alalSetParent 1, ,,0,35, *menu1 ; image1をウィンドウに貼り付け alalWidth 1, 50 // Menu2 alCreateImage 2, 150,50 ; Artlet2D仮想イメージ(imageID=2) alColor 64, 64, 64, 200 : alFillRect : alColor 255, 255, 255, 255 : alFont "", 20 alDrawText "≡", 0, 0, 50, 50, 1, 1 alDrawText "Menu 2", 50, 0, 100, 50, 1, 1 alalSetParent 2, ,,0,100, *menu2 ; image2をウィンドウに貼り付け alalWidth 2, 50 // Menu2の子メニュー:同じ仮想イメージに四角を縦に2つ書いている alCreateImage 3, 50,200 ; Artlet2D仮想イメージ(imageID=3) alColor 0, 0, 0, 1 : alFillRect alColor 64, 64, 64, 200 : alFillRect 0,10,50,50 : alFillRect 0,70,50,50 alColor 255, 255, 255, 255 : alFont "", 20 alDrawText "1", 0, 10, 50, 50, 1, 1 alDrawText "2", 0, 70, 50, 50, 1, 1 alalSetParent 3, ,,0,150, *menu3 ; image3をウィンドウに貼り付け alalWidth 3, 50,0 sysfont 0 color mes "メニューをクリック!" stop // Menu1 基本の伸びて縮む処理 *menu1 switch iparam case 0x0201 ;WM_LBUTTONDOWN mes "クリック! "+ginfo_intid swbreak case 0x0200 ;WM_MOUSEMOVE // 上にマウスが乗ったら始動 timer_repeat timer_init: ; 初期化処理 if uniq(x) == 0 : uniq(x)=50 ; uniq(x)に現在のMenuの幅を記憶 uniq(a) = uniq(x) : uniq(b) = 150 uniq(isStretching) = 1 _init_end if alalIsOnLayer(1) == 0 : timer_break ; メニュー上から外れたら終了させる timer_ease uniq(x), uniq(a), uniq(b), ease_quartic_inout, 150 ; メニュー伸ばしサイズを計算(150msで完了) alalWidth 1, uniq(x) ; サイズ変更 timer_deinit: ; 終了処理 uniq(isStretching) = 0 // 伸ばす処理を止めたら、今度は縮ませる処理を動かす timer_repeat timer_init: uniq(a) = uniq2(x) ; uniq2()は1つ外側のuniq()変数を取得できる。現在のMenu1の幅を取得。 uniq(b) = 50 _init_end if uniq2(isStretching) = 1 : timer_break ; またマウスが乗ったら縮む処理は中断 timer_ease uniq2(x), uniq(a), uniq(b), ease_quartic_inout, 250 ; メニュー縮みサイズを計算 alalWidth 1, uniq2(x) ; サイズ変更 if refdval >= 1.0 : timer_break ; 縮みきったら処理終了 timer_loop timer_loop swbreak swend return // Menu1と同じものを作るけど、Menu2は伸びきった後に子メニュー(image3)を縦に伸ばす *menu2 switch iparam case 0x0201 ;WM_LBUTTONDOWN mes "クリック! "+ginfo_intid swbreak case 0x0200 ;WM_MOUSEMOVE timer_repeat timer_init: if uniq(x) == 0 : uniq(x)=50 uniq(a) = uniq(x) : uniq(b) = 150 uniq(isStretching) = 1 _init_end if alalIsOnLayer(2) == 0 && alalIsOnLayer(3) == 0 : timer_break ; Menu2(image2)と子メニュー(image3)両方から外れたら終了 timer_ease uniq(x), uniq(a), uniq(b), ease_quartic_inout, 150 ; 150msで完了(refdval=0.0〜1.0) alalWidth 2, uniq(x) // timer_easeの進捗がrefdvalに代入されている(0.0〜1.0) if refdval >= 1.0 { // Menu2が伸びきった後に 子メニュー(image3)を縦に伸ばす timer_repeat timer_init: uniq(a) = 0 : uniq(b) = 120 _init_end if uniq2(isStretching) = 0 : timer_break ; Menu2が横に伸ばす処理を辞めたら子メニュー(image3)の処理も辞める timer_ease uniq(y), uniq(a), uniq(b), ease_quartic_inout, 200 ; メニュー伸ばしサイズを計算 alalWidth 3, ,uniq(y),uniq2(x), ,1 ; サイズと横位置の変更(Menu2の幅を反映) timer_deinit: ; (子メニュー縦伸ばしの)終了処理 timer_repeat timer_init: uniq(a) = uniq2(y) : uniq(b) = 0 _init_end timer_ease uniq(y), uniq(a), uniq(b), ease_quartic_inout, 200 alalWidth 3, ,uniq(y),uniq3(x), ,1 if refdval >= 1.0 : timer_break timer_loop timer_loop } timer_deinit: ; (Menu2横伸ばしの)終了処理 uniq(isStretching) = 0 timer_repeat timer_init: uniq(a) = uniq2(x) : uniq(b) = 50 _init_end if uniq2(isStretching) = 1 : timer_break timer_ease uniq2(x), uniq(a), uniq(b), ease_quartic_inout, 250 alalWidth 2, uniq2(x) if refdval >= 1.0 : timer_break timer_loop timer_loop swbreak swend return //子メニューのクリック検知。伸ばす処理は*menu2内で行っている。 *menu3 switch iparam case 0x0201 ;WM_LBUTTONDOWN // 1枚のイメージ(image3)になっているので、クリック位置で押したボタンを判別 alalGetRect 3, rect, -1 if rect(1)+10 <= ginfo_my && ginfo_my <= rect(1)+60 { mes "クリック! 2-1" }else : if rect(1)+70 <= ginfo_my && ginfo_my <= rect(1)+120 { mes "クリック! 2-2" } swbreak swend return



MIZUSHIKI

リンク

2023/6/1(Thu) 20:06:36|NO.99536

で!!!
#netinclude Ver.3.0 の新機能で、ネットページ上に書かれたモジュールを抽出して保存・そのまま利用できるようになりました。

また先日、Hiroさんとこの「HSPメモ帳」ページにて WebView2が簡単に導入できるようになるモジュール群が公開されました。
大変感謝!!

https://blog.goo.ne.jp/hiro239415/e/005b3b0f813f10098cf0eb7c52e72a8f
https://blog.goo.ne.jp/hiro239415/e/fe657bd57b6d2de0c4855c0578452dd9
https://blog.goo.ne.jp/hiro239415/e/aea2df33cd810488bbe7ca48d84656d1

ということで、1つのスクリプトでWebView2の導入、サンプル実行が出来るようにしてみちゃいました!
#netincludeと高DPI化以外のところは HSPメモ帳さま のサンプルをそのまま使わせてもらってます。
ぜひHiroさんの「HSPメモ帳」ページも見に行ってください。

#ifdef _debug/////////////////////////////////////////////////////////////////////////////////////////////// #include"hspinet.as"//////////////////////////////////////////////////// mod_netinclude-min.hsp - Ver.3.1 // #include"mod_regexp.as"///////////////////////////////////////////////////////////////////// by MIZUSHIKI // #define netinclude(%1,%2=0,%3=0,%4=0) addition %1*////////////////////////////////////////////////////////// a@@="":w@@=dir_exe+"\\common\\":y@@="#net\include":notesel a@@:noteload"hsptmp":i@@="(?:\\s*,\\s*\"(.*?)\")? noteunsel:matches a@@,a@@,y@@+"\\s*\"(net/|https?)?(.+?)\"\\s*/\\s*,?\\s*(\\w*)(\n)?\\s*;*/*"+i@@+i@@:b@@="0 repeat stat:a@@.cnt="0":x@@=w@@:if"current"=a@@.cnt.3{x@@=""}exist x@@+a@@.cnt.1+a@@.cnt.2:if strsize<0{:::: if""!b@@{netinit:b@@=""}a@@.cnt="":if""=x@@{a@@.cnt.3="2":m@@++}else{a@@.cnt.3="1":n@@++}}loop:if n@@+m@@>0{ s@@="","","":z@@="ダウンロード":repeat 2,1:i@@=cnt:foreach a@@:if"0"=a@@.cnt{continue}if""+i@@!a@@.cnt.3{::: continue}if"net/"=a@@.cnt.1{a@@.cnt="0":k@@=cnt:if""=b@@{neturl"https\://timetag.main.jp/HSP3NetModules/netm netrequest_get"od.php?req=data":do:wait 5:netexec n@@:until n@@:netgetv b@@:matches b@@,b@@,"^(.*?)\t(.*?)$" j@@=stat}repeat j@@:if getpath(b@@.cnt.1,16)=getpath(a@@.k@@.2,16){a@@.k@@=b@@.cnt.2:a@@.k@@.2=b@@.cnt.1:::: break}loop:if"0"=a@@.cnt{continue}s@@.i@@+=">net/(->"+a@@.cnt+")"+a@@.cnt.2+"\n"}else{s@@.i@@+=">"+a@@.cnt.1 s@@.i@@+=a@@.cnt.2+"\n"}loop:loop:if""!s@@.1{s@@.0+=w@@+"\n\nに\n\n"+s@@.1:if""!s@@.2{s@@.0+="\nを"+z@@+"、" s@@.0+="\n------\n\n"}}if""=s@@.1+s@@.2{dialog"モジュールデータが見つかりませんでした",1,y@@:end}if""!s@@.2{ s@@.0+=dir_cur+"\n\nに\n\n"+s@@.2}dialog s@@.0+"\nを"+z@@+"します。",2,y@@:if stat=6{s@@="":x@@=dir_cur::::: foreach a@@:if"0"=a@@.cnt{continue}if"1"=a@@.cnt.3{chdir w@@}a@@.cnt.3=a@@.cnt.1+":/":a@@.cnt.1+=a@@.cnt.2:: split a@@.cnt.1,"/",b@@:repeat stat-1:dirlist i@@,b@@.cnt,5:if stat=0{mkdir b@@.cnt}chdir b@@.cnt:loop:::::: a@@.cnt+=a@@.cnt.2:j@@=a@@.cnt.6:if$70747468!lpeek(a@@.cnt.1){a@@.cnt.3="https\://raw.githubusercontent.com/ }neturl replace(replace(a@@.cnt.3+a@@.cnt,"#.*$",""),"?","?"):netrequest_get"":do:wait 5:netexec n@@::::::: until n@@:netgetv b@@:if n@@<0{s@@+="\n>"+a@@.cnt}else{if""!j@@{nkfcnv b@@,b@@,j@@,,stat}if""!a@@.cnt.5{:::: b@@=submatch(b@@,a@@.cnt.5,,1)}m@@=getpath(a@@.cnt,8):notesel b@@:notesave m@@:if instr(j@@,0,"D")!-1{:::::: m@@=dir_cur+"/"+m@@:k@@="powershell \"Add-Type -AssemblyName System.Web;$s=Get-Content '"+m@@+"' -Raw;$d=[S" k@@+="ystem.Web.HttpUtility]::HtmlDecode($s.Replace('<br>',\\\"`r`n\\\"));Set-Content -Path '"+m@@+"' $d;\"" exec k@@,2}}chdir x@@:loop:if""!s@@{dialog z@@+"失敗\n"+s@@:end}dialog z@@+"完了。\n再実行して下さい":end}}: #else/////////////////////////////////////////////////////////////////////////////////////////////////////// #define netinclude(%1,%2=0,%3=0,%4=0) include %1//////////////////////////////////// Download HSP3 module // #endif////////////////////////////////////////////////////////////////////////////////////////////////////// #include "user32.as" #include "kernel32.as" #netinclude "https/blog.goo.ne.jp/hiro239415/e/fe657bd57b6d2de0c4855c0578452dd9#/mod_MSZip.hsp"/, current, "<pre.*>(?![\s\S]*<pre[\s\S]*?MOD_MSZIP_HSP[\s\S]*?</pre)([\s\S]*?MOD_MSZIP_HSP[\s\S]*?)</pre" #netinclude "https/blog.goo.ne.jp/hiro239415/e/aea2df33cd810488bbe7ca48d84656d1#/mod_wv2.hsp"/, current, "<pre.*>(?![\s\S]*<pre[\s\S]*?MOD_WV2_HSP[\s\S]*?</pre)([\s\S]*?MOD_WV2_HSP[\s\S]*?)</pre" #netinclude "https/blog.goo.ne.jp/hiro239415/e/aea2df33cd810488bbe7ca48d84656d1#/mod_ComCall.hsp"/, current, "<pre.*>(?![\s\S]*<pre[\s\S]*?MOD_COMCALL_HSP[\s\S]*?</pre)([\s\S]*?MOD_COMCALL_HSP[\s\S]*?)</pre" #netinclude "https/blog.goo.ne.jp/hiro239415/e/005b3b0f813f10098cf0eb7c52e72a8f#/wv2dll_inst.hsp"/, current, "<pre.*>[\s\S]*(wv2dll = [\s\S]*?)oncmd gosub \*WM_CLOSE", "Ws" #netinclude "https/suwa.pupu.jp/HSP/modules/mod_HighDpi_kakkokari.hsp"/, current SetHighDpi ; 高DPI化 screen 0, DPI(960), DPI(720) oncmd gosub *WM_CLOSE, 0x0010 oncmd gosub *WV2_RESRECV, 0x8000 WV2Env 0, 0 env = stat if ( env ){ WV2Ctrl env, hwnd ctrl = stat if ( stat ){ // 25 get_CoreWebView2 prm = varptr(web) ComCall ctrl, 25, prm, 1 ComQuery web, "{A0D6DF20-3B92-416D-AA0C-437A9C727857}" web2 = stat if ( web2 ){ // type(0:II 1:HI 2:HW 3:HB 4:H), hWnd, msg WV2HdlNew 0, hwnd, 0x8000 resRecvHdl = stat // 61 add_WebResourceResponseReceived dim token, 2 prm = resRecvHdl, varptr(token) ComCall web2, 61, prm, 2 ComDel web2 } WV2SetVisible ctrl, 1 WV2SetSize ctrl, 0, 0, ginfo_winx, ginfo_winy * 4 / 5 surl = "https://www.yahoo.co.jp" WV2Navigate ctrl, surl mb = "" pos 0, ginfo_winy * 4 / 5 objmode 2 font "consolas", 12 mesbox mb, ginfo_winx, ginfo_winy / 5, 4, 0 hmb = objinfo_hwnd(stat) } } stop *WV2_RESRECV if ( lparam == 0 ){ return } // 3 get_Request prm = varptr(req) ComCall lparam, 3, prm, 1 if ( stat == 0 ){ // 3 get_Uri prm = varptr(uri) ComCall req, 3, prm, 1 // 5 get_Method prm = varptr(method) ComCall req, 5, prm, 1 dupptr dpUri, uri, 4096, 2 dupptr dpMethod, method, 4096, 2 stime = strf("%02d:%02d:%02d ", gettime(4), gettime(5), gettime(6)) mb = strf("%s[%s] %s\n", stime, cnvwtos(dpMethod), cnvwtos(dpUri)) + mb sendmsg hmb, 0x000c, 0, varptr(mb) ComFree uri ComFree method ComDel req await } return *WM_CLOSE if ( resRecvHdl ){ // 62 remove_WebResourceResponseReceived prm = token(0), token(1) ComCall web, 62, prm, 2 } if ( web ){ ComDel web } if ( ctrl ){ ComDel ctrl } if ( env ){ ComDel env } end
WebView2の注意点ですが、Windows11なら必ず動くけど、Windows10ではランタイムがインストールされてないと動かないと思います。
MicroSoftは、Windows10にも標準インストールさせていくと言ってましたが、徐々に浸透させていく感じらしいのでまだ利用できない場合があります。
https://blogs.windows.com/msedgedev/2022/06/27/delivering-the-microsoft-edge-webview2-runtime-to-windows-10-consumers/



MIZUSHIKI

リンク

2023/6/1(Thu) 20:18:38|NO.99537

HSPTV!掲示板内のモジュールやサンプルをnetincludeすることも可能です!

・URLに「?(半角)」が含まれる場合は「?(全角)」に置き換えください。
・URL末尾に「#/モジュールファイル名」と書くのがオススメです。
・この掲示板の文字コードがeuc-jpなのでp3で"Es"指定する必要があります。
・HTMLエンティティや<br>も残ってしまう様なので追加でp3に"D"も指定してください。

#netinclude "module_name"/,p1,p2,p3

"module_name"/ : "モジュール名またはURL文字列"/
p1 : currentキーワード
p2 : ネットページ抽出用 "正規表現文字列"[submatch]
p3 : NKF変換/HTMLデコード オプション (nkfcnv命令参照、「D」指定でHTMLエンティティ展開<br>改行化[powershell])


#ifdef _debug/////////////////////////////////////////////////////////////////////////////////////////////// #include"hspinet.as"//////////////////////////////////////////////////// mod_netinclude-min.hsp - Ver.3.1 // #include"mod_regexp.as"///////////////////////////////////////////////////////////////////// by MIZUSHIKI // #define netinclude(%1,%2=0,%3=0,%4=0) addition %1*////////////////////////////////////////////////////////// a@@="":w@@=dir_exe+"\\common\\":y@@="#net\include":notesel a@@:noteload"hsptmp":i@@="(?:\\s*,\\s*\"(.*?)\")? noteunsel:matches a@@,a@@,y@@+"\\s*\"(net/|https?)?(.+?)\"\\s*/\\s*,?\\s*(\\w*)(\n)?\\s*;*/*"+i@@+i@@:b@@="0 repeat stat:a@@.cnt="0":x@@=w@@:if"current"=a@@.cnt.3{x@@=""}exist x@@+a@@.cnt.1+a@@.cnt.2:if strsize<0{:::: if""!b@@{netinit:b@@=""}a@@.cnt="":if""=x@@{a@@.cnt.3="2":m@@++}else{a@@.cnt.3="1":n@@++}}loop:if n@@+m@@>0{ s@@="","","":z@@="ダウンロード":repeat 2,1:i@@=cnt:foreach a@@:if"0"=a@@.cnt{continue}if""+i@@!a@@.cnt.3{::: continue}if"net/"=a@@.cnt.1{a@@.cnt="0":k@@=cnt:if""=b@@{neturl"https\://timetag.main.jp/HSP3NetModules/netm netrequest_get"od.php?req=data":do:wait 5:netexec n@@:until n@@:netgetv b@@:matches b@@,b@@,"^(.*?)\t(.*?)$" j@@=stat}repeat j@@:if getpath(b@@.cnt.1,16)=getpath(a@@.k@@.2,16){a@@.k@@=b@@.cnt.2:a@@.k@@.2=b@@.cnt.1:::: break}loop:if"0"=a@@.cnt{continue}s@@.i@@+=">net/(->"+a@@.cnt+")"+a@@.cnt.2+"\n"}else{s@@.i@@+=">"+a@@.cnt.1 s@@.i@@+=a@@.cnt.2+"\n"}loop:loop:if""!s@@.1{s@@.0+=w@@+"\n\nに\n\n"+s@@.1:if""!s@@.2{s@@.0+="\nを"+z@@+"、" s@@.0+="\n------\n\n"}}if""=s@@.1+s@@.2{dialog"モジュールデータが見つかりませんでした",1,y@@:end}if""!s@@.2{ s@@.0+=dir_cur+"\n\nに\n\n"+s@@.2}dialog s@@.0+"\nを"+z@@+"します。",2,y@@:if stat=6{s@@="":x@@=dir_cur::::: foreach a@@:if"0"=a@@.cnt{continue}if"1"=a@@.cnt.3{chdir w@@}a@@.cnt.3=a@@.cnt.1+":/":a@@.cnt.1+=a@@.cnt.2:: split a@@.cnt.1,"/",b@@:repeat stat-1:dirlist i@@,b@@.cnt,5:if stat=0{mkdir b@@.cnt}chdir b@@.cnt:loop:::::: a@@.cnt+=a@@.cnt.2:j@@=a@@.cnt.6:if$70747468!lpeek(a@@.cnt.1){a@@.cnt.3="https\://raw.githubusercontent.com/ }neturl replace(replace(a@@.cnt.3+a@@.cnt,"#.*$",""),"?","?"):netrequest_get"":do:wait 5:netexec n@@::::::: until n@@:netgetv b@@:if n@@<0{s@@+="\n>"+a@@.cnt}else{if""!j@@{nkfcnv b@@,b@@,j@@,,stat}if""!a@@.cnt.5{:::: b@@=submatch(b@@,a@@.cnt.5,,1)}m@@=getpath(a@@.cnt,8):notesel b@@:notesave m@@:if instr(j@@,0,"D")!-1{:::::: m@@=dir_cur+"/"+m@@:k@@="powershell \"Add-Type -AssemblyName System.Web;$s=Get-Content '"+m@@+"' -Raw;$d=[S" k@@+="ystem.Web.HttpUtility]::HtmlDecode($s.Replace('<br>',\\\"`r`n\\\"));Set-Content -Path '"+m@@+"' $d;\"" exec k@@,2}}chdir x@@:loop:if""!s@@{dialog z@@+"失敗\n"+s@@:end}dialog z@@+"完了。\n再実行して下さい":end}}: #else/////////////////////////////////////////////////////////////////////////////////////////////////////// #define netinclude(%1,%2=0,%3=0,%4=0) include %1//////////////////////////////////// Download HSP3 module // #endif////////////////////////////////////////////////////////////////////////////////////////////////////// #undef dir_cmdline #define dir_cmdline "二重起動を検出しました! (コマンドライン文字列)" ; テスト用二重起動確認文字列 mes "二重起動防止サンプル" mes "これを起動したまま、もう1つ HSP実行(F5) してみてください。\n" #netinclude "http/hsp.tv/play/pforum.php?mode=pastwch&num=18983#/sample_PreventMultiple.hsp"/, current, "<pre(?![\s\S]*<pre[\s\S]*?WM_USER_DUPEXEC[\s\S]*?</pre)>([\s\S]*?WM_USER_DUPEXEC[\s\S]*?)</pre", "EsD" //p2 ネットページ抽出用 "正規表現文字列" : 大概は「WM_USER_DUPEXEC」のとこを<pre </pre 内で使っている文字にすればOKだと思います。 //モジュールじゃなくてサンプルです。利用の際はファイルを開いて抜粋編集してください。
大変便利で昔からお世話になっているので紹介。
モジュールじゃなくてサンプルなので例としては不向きかもしれませんが。。。



MIZUSHIKI

リンク

2023/6/1(Thu) 20:24:27|NO.99538

ちょっとここまで Ver.3.0 時点の話で書いてたんですけど、、、天啓が降りてきまして・・・ Ver.3.1 が出来ました!
(これまでのサンプルも実は Ver.3.1 版に置き換えてます。)

改行位置がちょっとキモイですけど、p2の正規表現のカンマ前に改行を入れられるようになりました。
これで横に長くなりまくっていたのが少し解消されるようになりました。

#ifdef _debug/////////////////////////////////////////////////////////////////////////////////////////////// #include"hspinet.as"//////////////////////////////////////////////////// mod_netinclude-min.hsp - Ver.3.1 // #include"mod_regexp.as"///////////////////////////////////////////////////////////////////// by MIZUSHIKI // #define netinclude(%1,%2=0,%3=0,%4=0) addition %1*////////////////////////////////////////////////////////// a@@="":w@@=dir_exe+"\\common\\":y@@="#net\include":notesel a@@:noteload"hsptmp":i@@="(?:\\s*,\\s*\"(.*?)\")? noteunsel:matches a@@,a@@,y@@+"\\s*\"(net/|https?)?(.+?)\"\\s*/\\s*,?\\s*(\\w*)(\n)?\\s*;*/*"+i@@+i@@:b@@="0 repeat stat:a@@.cnt="0":x@@=w@@:if"current"=a@@.cnt.3{x@@=""}exist x@@+a@@.cnt.1+a@@.cnt.2:if strsize<0{:::: if""!b@@{netinit:b@@=""}a@@.cnt="":if""=x@@{a@@.cnt.3="2":m@@++}else{a@@.cnt.3="1":n@@++}}loop:if n@@+m@@>0{ s@@="","","":z@@="ダウンロード":repeat 2,1:i@@=cnt:foreach a@@:if"0"=a@@.cnt{continue}if""+i@@!a@@.cnt.3{::: continue}if"net/"=a@@.cnt.1{a@@.cnt="0":k@@=cnt:if""=b@@{neturl"https\://timetag.main.jp/HSP3NetModules/netm netrequest_get"od.php?req=data":do:wait 5:netexec n@@:until n@@:netgetv b@@:matches b@@,b@@,"^(.*?)\t(.*?)$" j@@=stat}repeat j@@:if getpath(b@@.cnt.1,16)=getpath(a@@.k@@.2,16){a@@.k@@=b@@.cnt.2:a@@.k@@.2=b@@.cnt.1:::: break}loop:if"0"=a@@.cnt{continue}s@@.i@@+=">net/(->"+a@@.cnt+")"+a@@.cnt.2+"\n"}else{s@@.i@@+=">"+a@@.cnt.1 s@@.i@@+=a@@.cnt.2+"\n"}loop:loop:if""!s@@.1{s@@.0+=w@@+"\n\nに\n\n"+s@@.1:if""!s@@.2{s@@.0+="\nを"+z@@+"、" s@@.0+="\n------\n\n"}}if""=s@@.1+s@@.2{dialog"モジュールデータが見つかりませんでした",1,y@@:end}if""!s@@.2{ s@@.0+=dir_cur+"\n\nに\n\n"+s@@.2}dialog s@@.0+"\nを"+z@@+"します。",2,y@@:if stat=6{s@@="":x@@=dir_cur::::: foreach a@@:if"0"=a@@.cnt{continue}if"1"=a@@.cnt.3{chdir w@@}a@@.cnt.3=a@@.cnt.1+":/":a@@.cnt.1+=a@@.cnt.2:: split a@@.cnt.1,"/",b@@:repeat stat-1:dirlist i@@,b@@.cnt,5:if stat=0{mkdir b@@.cnt}chdir b@@.cnt:loop:::::: a@@.cnt+=a@@.cnt.2:j@@=a@@.cnt.6:if$70747468!lpeek(a@@.cnt.1){a@@.cnt.3="https\://raw.githubusercontent.com/ }neturl replace(replace(a@@.cnt.3+a@@.cnt,"#.*$",""),"?","?"):netrequest_get"":do:wait 5:netexec n@@::::::: until n@@:netgetv b@@:if n@@<0{s@@+="\n>"+a@@.cnt}else{if""!j@@{nkfcnv b@@,b@@,j@@,,stat}if""!a@@.cnt.5{:::: b@@=submatch(b@@,a@@.cnt.5,,1)}m@@=getpath(a@@.cnt,8):notesel b@@:notesave m@@:if instr(j@@,0,"D")!-1{:::::: m@@=dir_cur+"/"+m@@:k@@="powershell \"Add-Type -AssemblyName System.Web;$s=Get-Content '"+m@@+"' -Raw;$d=[S" k@@+="ystem.Web.HttpUtility]::HtmlDecode($s.Replace('<br>',\\\"`r`n\\\"));Set-Content -Path '"+m@@+"' $d;\"" exec k@@,2}}chdir x@@:loop:if""!s@@{dialog z@@+"失敗\n"+s@@:end}dialog z@@+"完了。\n再実行して下さい":end}}: #else/////////////////////////////////////////////////////////////////////////////////////////////////////// #define netinclude(%1,%2=0,%3=0,%4=0) include %1//////////////////////////////////// Download HSP3 module // #endif////////////////////////////////////////////////////////////////////////////////////////////////////// #undef dir_cmdline #define dir_cmdline "二重起動を検出しました! (コマンドライン文字列)" ; テスト用二重起動確認文字列 mes "二重起動防止サンプル" mes "これを起動したまま、もう1つ HSP実行(F5) してみてください。\n" #netinclude "http/hsp.tv/play/pforum.php?mode=pastwch&num=18983#/sample_PreventMultiple.hsp"/, current ; , "<pre(?![\s\S]*<pre[\s\S]*?WM_USER_DUPEXEC[\s\S]*?</pre)>([\s\S]*?WM_USER_DUPEXEC[\s\S]*?)</pre", "EsD" // ↑これでも netinclude側はコメント行も読み取っています。



MIZUSHIKI

リンク

2023/6/1(Thu) 20:28:13|NO.99539

―――ということで、怒涛の「ひとりごと」でした。

もしここまで読んでくれた方がいましたら、どうもありがとうございました。



MIZUSHIKI

リンク

2023/6/2(Fri) 20:26:44|NO.99540

おっと、、、
>NO.99537, NO.99538
>二重起動防止サンプル
「昔からお世話になっているので紹介」と言ってるくせに参照元を示してませんでしたね。
https://hsp.tv/play/pforum.php?mode=pastwch&num=18983#19007
こちらで New Monkeyさん が作ってくださいました。感謝。

あと、#netinclude がどこからダウンロードしてくるかの説明が抜けてました。
冒頭が「http」から始まるのはそのURLからですが、「net/」から始まるものはGitHubからのダウンロードになります。
どういうスクリプトか先に知りたい場合は、GitHub内で検索すると良いd・・・あれ?出てこない。。。

どうやらUTF-8のファイルしか検索対象(インデックス対象)にならないようです。(Shift-JISで登録してるんですよね・・・)
Google等で「GitHub ファイル名」で検索して調べてもらう必要がありそうです。



MIZUSHIKI

リンク

2024/1/18(Thu) 02:11:40|NO.101078

【宣伝】
mod_netinclude.hsp を Version 3.3 にアップデートしました。

<更新内容>
・今まで動作しなかったVSCode等の外部エディタでも機能するようにしました。

外部エディタ(VSCode)の場合はコンパイル時に.axファイルが出力される必要があります。
(要は hsptmpか.axファイルが必要 ということになります。)

#ifdef _debug/////////////////////////////////////////////////////////////////////////////////////////////// #include"hspinet.as"//////////////////////////////////////////////////// mod_netinclude-min.hsp - Ver.3.3 // #include"mod_regexp.as"///////////////////////////////////////////////////////////////////// by MIZUSHIKI // #define netinclude(%1,%2=0,%3=0,%4=0) addition %1*////////////////////////////////////////////////////////// a@@="hsptmp":exist a@@:if strsize<0{a@@=__file__}notesel a@@:noteload a@@:i@@="(\\s*,\\s*\"(.*?)\")?":b@@="0 y@@="#netinclud":matches a@@,a@@,y@@+{"e\\s*"(net/|https?)?(.+)"\\s*/\\s*,?\\s*(\\w*)(\n)?\\s*;*/*"}+i@@+i@@ w@@=dir_exe+"\\common\\":repeat stat:a@@.cnt="0":x@@=w@@:v@@=a@@.cnt.1+a@@.cnt.2:if"current"=a@@.cnt.3:x@@=" exist x@@+v@@:if strsize<0{if""!b@@{netinit:b@@=""}a@@.cnt="":if""=x@@{a@@.cnt.3="2":m@@++}else{a@@.cnt.3="1 n@@++}}loop:if n@@+m@@{s@@="","","":z@@="ダウンロード":repeat 2,1:i@@=cnt:foreach a@@:if"0"=a@@.cnt{continue }if""+i@@!a@@.cnt.3{continue}if"net/"=a@@.cnt.1{if""=b@@{neturl"https\://timetag.main.jp/HSP3NetModules/netm netrequest_get"od.php?req=data":do:wait 5:netexec n@@:until n@@:netgetv b@@:matches b@@,b@@,"^(.*?)\t(.*?)$" j@@=stat}a@@.cnt="0":k@@=cnt:repeat j@@:if getpath(b@@.cnt.1,16)=getpath(a@@.k@@.2,16){a@@.k@@=b@@.cnt.2:::: a@@.k@@.2=b@@.cnt.1:break}loop:if"0"=a@@.cnt{continue}s@@.i@@+=">net/"+a@@.cnt.2+" ["+a@@.cnt+"]\n"}else{:: s@@.i@@+=">"+a@@.cnt.1+a@@.cnt.2+"\n"}loop:loop:if""!s@@.1{s@@+=w@@+"\n\nに\n\n"+s@@.1:if""!s@@.2{s@@+="\nを s@@+=z@@+"、\n-----\n\n"}}y@@+="e":if""=s@@.1+s@@.2{dialog"モジュールデータが見つかりませんでした",1,y@@:end }if""!s@@.2{s@@+=dir_cur+"\n\nに\n\n"+s@@.2}dialog s@@+"\nを"+z@@+"します",2,y@@:if stat=6{x@@=dir_cur:s@@=" foreach a@@:if"0"=a@@.cnt{continue}if"1"=a@@.cnt.3{chdir w@@}a@@.cnt.3=a@@.cnt.1+":/":a@@.cnt.1+=a@@.cnt.2:: split a@@.cnt.1,"/",b@@:repeat stat-1:dirlist i@@,b@@.cnt,5:if stat=0{mkdir b@@.cnt}chdir b@@.cnt:loop:::::: a@@.cnt+=a@@.cnt.2:j@@=a@@.cnt.8:if$70747468!lpeek(a@@.cnt.1){a@@.cnt.3="https\://raw.githubusercontent.com/ }neturl replace(replace(a@@.cnt.3+a@@.cnt,"#.*$",""),"?","?"):netrequest_get"":do:wait 5:netexec n@@::::::: until n@@:netgetv b@@:if n@@<0{s@@+="\n>"+a@@.cnt}else{if""!j@@{nkfcnv b@@,b@@,j@@,,stat}if""!a@@.cnt.6{:::: b@@=submatch(b@@,a@@.cnt.6,,1)}m@@=getpath(a@@.cnt,8):notesel b@@:notesave m@@:if instr(j@@,0,"D")!-1{:::::: m@@=dir_cur+"/"+m@@:k@@="powershell \"Add-Type -AssemblyName System.Web;$s=Get-Content '"+m@@+"' -Raw;$d=[S" k@@+="ystem.Web.HttpUtility]::HtmlDecode($s.Replace('<br>',\\\"`r`n\\\"));Set-Content -Path '"+m@@+"' $d;\"" exec k@@,2}}chdir x@@:loop:if""!s@@{dialog z@@+"失敗\n"+s@@:end}dialog z@@+"完了。\n再実行して下さい":end}}: #else/////////////////////////////////////////////////////////////////////////////////////////////////////// #define netinclude(%1,%2=0,%3=0,%4=0) include %1//////////////////////////////////// Download HSP3 module // #endif////////////////////////////////////////////////////////////////////////////////////////////////////// #netinclude "net/mod_TimerRepeat.hsp"/ , current ; ←末尾『/』は必須 // 並行処理 pos 50,30 : mes "並行処理:40ms毎" timer_repeat 40 ; 40ミリ秒ごとに実行 color 255,255,255 : boxf 50,50,150,150 : color 255,0,0 line 100, 100, 100+(sin(M_PI*timer_cnt/10)*50), 100+(cos(M_PI*timer_cnt/10)*50) pos 50,50 : mes timer_cnt timer_loop // メインループ処理 pos 250,30 : mes "メインループ:60ms毎" repeat ; 60ミリ秒ごとに実行 color 255,255,255 : boxf 250,50,350,150 : color 0,0,255 line 300, 100, 300+(sin(M_PI*cnt/10)*50), 100+(cos(M_PI*cnt/10)*50) pos 250,50 : mes cnt await 60 loop



MIZUSHIKI

リンク

2024/2/14(Wed) 22:34:13|NO.101222

mod_netinclude.hsp を Version 4.0 にアップデート!
内容が大幅に刷新されました。

・#netuselib追加:ネット上のdllを指定してダウンロードできるようになりました。
・zipの指定とzip内のモジュール(またはdll)を選択できるようになりました。(!)
・デフォルトのモジュールダウンロード先をcommonからカレントフォルダに変更。

特に、内容を大きく変更(コード増量)したためminバージョンは廃止となりました。
代わりにmod_netinclude.hsp+読み込み用HSPDEF.ASをカレントディレクトリにダウンロードするダウンローダを用意しました。

また、mod_netinclude.hspはカレントディレクトリ内で完結する方針を固め、モジュールのデフォルトダウンロード先をカレントフォルダとすることに変更しました。


以下は、テスト用のdllとモジュール(zip内)をダウンロードして実行するサンプルです。


#ifndef __mod_netinclude__// - カレントディレクトリに HSPDEF.AS, mod_netinclude.hsp を生成 - /////////////// #include"hspinet.as"//////// 生成後のフォルダでnetincludeが利用できます [生成後ダウンローダ(5行)削除可能] // if dirinfo.0=dirinfo.1{dialog"スクリプトを保存して下さい":end}netinit:a="usercontent.com/MIZUSHIKI/m/a/": // neturl"https\://raw.github"+a:netload"HSPDEF.AS":netload"mod_netinclude.hsp":dialog"再実行して下さい":end // #else/////////////////////// (ローカル用) mod_netinclude.hsp+読み込み用HSPDEF.AS ダウンローダ - Ver.4.0 /// #netuselib "https/suwa.pupu.jp/HSP/modules/sayhello.zip!/sayhello.dll" #netinclude "https/suwa.pupu.jp/HSP/modules/sayhello.zip!/sayhello.as"/ sdim a, 128 SayHello "わーるど", a, 128 mes a

3回 HSPの「実行(F5)」をする必要があります。

1回目: mod_netinclude.hsp+読み込み用HSPDEF.AS のダウンロード
2回目: #netuselib, #netinclude による dllとモジュール のダウンロード
3回目: サンプルスクリプトの実行

大文字のHSPDEF.AS ですが、ソースファイルと同じフォルダにあるだけで自動的に読み込まれます。
内部では commonフォルダ内の「hspdef.as」を呼び出して、さらに「mod_netinclude.hsp」も読み込むようになっています。
(つまり、この2つのファイルがあれば冒頭の5行が無くても#netincludeが使えます。)

#netinclude,#netuselibのコマンドについて詳細はオンラインヘルプを参照ください。
https://suwa.pupu.jp/HSP/netinclude/mod_netinclude.htm



MIZUSHIKI

リンク

2024/2/14(Wed) 22:34:43|NO.101223

「HSP向けパッケージマネージャを作りたい」
https://hsp.tv/play/pforum.php?mode=all&num=101101

こちらを拝見したりコメントしたりしているうちに #netinclude はローカルでこそ輝くかな…と思い直しました。

global(common)へのダウンロードをしないと F1ヘルプ が使えないので #netinclude もcommon内ダウンロードを推していたのですが、F1ヘルプを含むしっかりとしたパッケージ管理はいつか来るであろうパッケージマネージャにお任せしようかなと思います。

#netincludeの方は、掲示板のスクリプト等で5行程度書けば プラグイン込みの実行でもユーザーに手動インストールさせることなく可能になる という「手軽・簡単・(カレントで)完結」を現状は提供して行こうと思います。



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.99534への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

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