|
|
|
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秒あたりからのそれ)
| |
|
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
| |
|
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/
| |
|
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だと思います。
//モジュールじゃなくてサンプルです。利用の際はファイルを開いて抜粋編集してください。
大変便利で昔からお世話になっているので紹介。
モジュールじゃなくてサンプルなので例としては不向きかもしれませんが。。。
| |
|
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側はコメント行も読み取っています。
| |
|
2023/6/1(Thu) 20:28:13|NO.99539
―――ということで、怒涛の「ひとりごと」でした。
もしここまで読んでくれた方がいましたら、どうもありがとうございました。
|
|
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 ファイル名」で検索して調べてもらう必要がありそうです。
|
|
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
| |
|
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
| |
|
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行程度書けば プラグイン込みの実行でもユーザーに手動インストールさせることなく可能になる という「手軽・簡単・(カレントで)完結」を現状は提供して行こうと思います。
|
|