|
|
2023/6/13(Tue) 21:02:10|NO.99573
Hiroさんが書かれているHSPメモ帳で、連結すればそのまま簡単にWebView2が使えるようになるモジュール群が公開されました。
https://blog.goo.ne.jp/hiro239415/e/279927d2a52e6390a2abc17ce166795f
【使用手順】
・mod_MSZip.hsp, mod_wv2s.hsp をそれぞれhspファイルとしてコピペ保存。
・wv2sdll.hsp の1〜3を1つのスクリプトにする。
上記の手順でサンプルを実行できます。(サンプルはwv2sdll.hsp 3つ目の後半に載っています。)
モジュールの中で必要となるdllを取り出して保存することが出来るので、他に何も準備することなくWebView2を使ったHSP3ソフトの開発が出来ます。
この新しいモジュール群(wv2s.dll)は、Windows 8.1以降でWebView2ランタイムがインストールされている全てのユーザーの環境で動作が可能になります。
また、スタンドアロン(ポータブル)版のランタイムを WV2Env に指定すると、Windowsへのランタイムのインストール無しにWebView2を動かすことが出来ます。
ぜひ試してみください!
|
|
2023/6/13(Tue) 21:02:54|NO.99574
上記のモジュール群にnetincludeを使用して、1つのサンプルスクリプトで、
・sv2s.dll環境構築
・ランタイム有無確認
・無ければスタンドアロン版ランタイムのダウンロード&展開
・サンプル実行
を出来るようにしてみました。
(前回の記事を読んでる方にはnetincludeの宣伝しつこいと思われてしまうかもしれませんが・・・)
・netincludeについて: https://hsp.tv/play/pforum.php?mode=all&num=99534
Windows10でWebView2ランタイムがインストールされていない方でも、スタンドアロン(ポータブル)版ランタイムをダウンロード&展開できるのでユーザーにランタイムのインストールを強いることなく環境構築が可能です。
また、Windows8.1では適したバージョンがダウンロードされるのでそのまま使用可能です。
(ただし、Windows8.1については2023年1月10日にサポートが終了しているので、ランタイムのURLがいつまで有効かは分かりません。)
#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]*?MOD_MSZIP_HSP[\s\S]*?)</pre"
#netinclude "https/blog.goo.ne.jp/hiro239415/e/279927d2a52e6390a2abc17ce166795#/mod_wv2s.hsp"/, current
;, "<pre.*>(?![\s\S]*<pre[\s\S]*?MOD_WV2S_HSP[\s\S]*?</pre)([\s\S]*?MOD_WV2S_HSP[\s\S]*?)</pre"
#netinclude "https/blog.goo.ne.jp/hiro239415/e/279927d2a52e6390a2abc17ce166795f#/wv2sdll-1.hsp"/, current
;, "<pre.*>([\s\S]*?wv2sdll[\s\S]*?)</pre"
#netinclude "https/blog.goo.ne.jp/hiro239415/e/90286eff56ba52ed1354be06824c088a#/wv2sdll-2.hsp"/, current
;, "<pre.*>([\s\S]*?wv2sdll[\s\S]*?)</pre"
#netinclude "https/blog.goo.ne.jp/hiro239415/e/0937855dfca53704fd6da87832fabfed#/wv2sdll-3.hsp"/, current
;, "<pre.*>([\s\S]*?wv2sdll[\s\S]*?)#include"
#netinclude "https/blog.goo.ne.jp/hiro239415/e/0937855dfca53704fd6da87832fabfed#/wv2sdll_inst.hsp"/, current
;, "<pre.*>[\s\S]*(restart = 0[\s\S]*?)oncmd gosub \*WM_CLOSE", "Ws"
#netinclude "https/suwa.pupu.jp/HSP/modules/mod_HighDpi_kakkokari.hsp"/, current
#netinclude "https/hsp.tv/play/pforum.php?mode=pastwch&num=69769#/mod_consexec.hsp"/, current
;, "<pre(?![\s\S]*<pre[\s\S]*?consexec[\s\S]*?#global)>([\s\S]*?consexec[\s\S]*?#global)", "EsD"
#netinclude "https/suwa.pupu.jp/HSP/modules/dl_wv2FixedVerRuntime.hsp"/, current
// 提案(&相談中) WV2CCall : ComCallを少しだけ見やすくする(?)モジュール
#netinclude "https/suwa.pupu.jp/HSP/modules/plus_wv2ccall.hsp"/, current
#include "ole32.as"
pRuntimeFolderW = 0 ; WV2Envに渡すランタイムフォルダ文字列のポインタ(インストールされている場合は0)
GetAvailableCoreWebView2BrowserVersionString 0, lpws ; ランタイムがインストールされているか確認
if lpws != 0 {
// ランタイムがインストールされている
CoTaskMemFree lpws
}else {
// ランタイムがインストールされていない
screen 0, DPI(640), DPI(240), 2 : font msgothic, DPI(12) ; 進捗表示用ウィンドウ(関数内でのmes)
// ランタイムフォルダを調査して返す。カレントフォルダに無ければ関数の中でダウンロード&展開される。
runtimeFolder = WebView2_GetFixedVersionRuntime(1) ; オプション = 1 : 処理の進捗を描画
; ・2023年6月時点でランタイム書庫のURLが取れるようにしていますが、
; 月日が経てばMicroSoftが書庫の置き場所やランタイム取得ページの内容を変更するかもしれません。
; もし上手くダウンロード出来なくなっていたら関数の処理を見直してください。
; ・結構古いバージョンのものは消えているので、
; Windows8.1の場合にダウンロードされる109.0.1518.78はもしかしたら近々使えなくなるかもしれません。
if runtimeFolder == "no" { end } ; ダウンロード拒否
if runtimeFolder == "" { stop } ; 失敗
sdim runtimeFolderW, strlen(runtimeFolder+1)*2
cnvstow runtimeFolderW, runtimeFolder
pRuntimeFolderW = varptr(runtimeFolderW) ; WV2Envに渡すランタイムフォルダ文字列のポインタ
}
SetHighDpi ; 高DPI化
screen 0, DPI(960), DPI(720)
oncmd gosub *WM_CLOSE, 0x0010
oncmd gosub *WV2_RESRECV, 0x8000
WV2Env pRuntimeFolderW, 0
env = stat
if ( env ){
WV2Ctrl env, hwnd
ctrl = stat
if ( stat ){
// 25 get_CoreWebView2
prm = varptr(web)
ComCall ctrl, 25, prm, 1
;WV2CCall ctrl, "get_CoreWebView2", varptr(web)
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
;WV2CCall web2, "add_WebResourceResponseReceived", resRecvHdl, varptr(token)
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 }
if ( resRecvHdl == 0 ){ dialog "0 resRecvHdl" }
// 3 get_Request
prm = varptr(req)
ComCall lparam, 3, prm, 1
;WV2CCall lparam, "get_Request", varptr(req)
if ( stat == 0 ){
// 3 get_Uri
prm = varptr(uri)
ComCall req, 3, prm, 1
;WV2CCall req, "get_Uri", varptr(uri)
// 5 get_Method
prm = varptr(method)
ComCall req, 5, prm, 1
;WV2CCall req, "get_Method", varptr(method)
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
;WV2CCall web, "remove_WebResourceResponseReceived", token(0), token(1)
}
if ( web ){ ComDel web }
if ( ctrl ){ ComDel ctrl }
if ( env ){ ComDel env }
end
| |
|
2023/10/27(Fri) 21:13:53|NO.100357
1つのスクリプトにするのに拘り過ぎて分かり辛かったなと思いまして、、、
「インストール処理」と「実際に必要な最低限のサンプル」に分けました。
【インストール処理】
wv2s.dll と mod_wv2s.hsp を開発者が入手する為のスクリプトです。
分かりやすくするため、このサンプルスクリプトをファイルとして保存してからスクリプトエディタで実行してください。(カレントディレクトリに wv2s.dll と mod_wv2s.hsp が作られます。)
これは開発者が自分の環境で1度実行するだけで大丈夫です。作られたフォルダ等は削除して構いません。
#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 "https/blog.goo.ne.jp/hiro239415/e/fe657bd57b6d2de0c4855c0578452dd9#/mod_MSZip.hsp"/, current
;, "<pre.*>([\s\S]*?MOD_MSZIP_HSP[\s\S]*?)</pre"
#netinclude "https/blog.goo.ne.jp/hiro239415/e/279927d2a52e6390a2abc17ce166795#/mod_wv2s.hsp"/, current
;, "<pre.*>(?![\s\S]*<pre[\s\S]*?MOD_WV2S_HSP[\s\S]*?</pre)([\s\S]*?MOD_WV2S_HSP[\s\S]*?)</pre"
#netinclude "https/blog.goo.ne.jp/hiro239415/e/279927d2a52e6390a2abc17ce166795f#/wv2sdll-1.hsp"/, current
;, "<pre.*>([\s\S]*?wv2sdll[\s\S]*?)</pre"
#netinclude "https/blog.goo.ne.jp/hiro239415/e/90286eff56ba52ed1354be06824c088a#/wv2sdll-2.hsp"/, current
;, "<pre.*>([\s\S]*?wv2sdll[\s\S]*?)</pre"
#netinclude "https/blog.goo.ne.jp/hiro239415/e/0937855dfca53704fd6da87832fabfed#/wv2sdll-3.hsp"/, current
;, "<pre.*>([\s\S]*?wv2sdll[\s\S]*?)#include"
MSZipFromCode wv2sdll, dst
bsave "wv2s.dll", dst, stat
bcopy dir_cur+"/https/blog.goo.ne.jp/hiro239415/e/279927d2a52e6390a2abc17ce166795#/mod_wv2s.hsp", dir_cur+"/mod_wv2s.hsp"
dialog "wv2s.dll, mod_wv2s.hsp を保存しました。"
end
【実際に必要な最低限のサンプル】
#include "mod_wv2s.hsp"
WV2Env 0, 0
env = stat
if ( env ){
WV2Ctrl env, hwnd
ctrl = stat
if ( stat ){
WV2SetVisible ctrl, 1
WV2SetSize ctrl, 0, 0, ginfo_winx, ginfo_winy
surl = "https://hsp.tv/make/hsp3.html"
WV2Navigate ctrl, surl
}
}
onexit *ONEXIT_
stop
*ONEXIT_
if ( ctrl ){ ComDel ctrl }
if ( env ){ ComDel env }
end
各コマンドの解説は特にされてなさそうなので、HIROさん の所の過去記事・過去サンプルスクリプト資産等から類推して紐解いていく必要がありそうです。
https://blog.goo.ne.jp/hiro239415/e/5041aec497e02427c2b123aef07977e3
# Webブラウザ
--------------------
上記のものは、WebView2ランタイム(スタンドアロン版)に関しては特に触れていません。
なので使用環境としては Windows11 もしくは Windows10を普通にアップデートして使用している方 が対象になります。
| |
|
2023/10/28(Sat) 03:11:13|NO.100360
> zrs90(5さい)さん
コメントありがとうございます。
mod_wv2s.hsp で定義されている WV2Env, WV2HdlNew 等のコマンドは HIROさん がお作りになられたもので、その動作やコマンドの引数詳細についてはご紹介頂いたリンク先の Microsoftドキュメント の中には見つけられないかなと思ってます。
mod_wv2s.hsp の前身である mod_WebView2_10115038.hsp と見比べて想像するしかない・・・だろう、と現時点では思ってます。
> https://hsp.tv/play/pforum.php?mode=pastwch&num=97202#97208
私自身としては認識していましたが、モジュールを使いたいユーザーにとってWebView2大元のドキュメントへのアクセスがあるのは足掛かりの1つとして大いに助けになると思います。
ご提示頂きありがとうございます。
|
|
2023/10/30(Mon) 22:17:07|NO.100385
mod_WebView2_10115038.hspで作っているのですが、移植すべきでしょうか?
wv2.dllはMicrosoftの署名とかないからちょっと心配...
|
|
2023/11/1(Wed) 01:18:38|NO.100399
> ABATBelieverさん
既に mod_WebView2_10115038.hsp で作っているならそのまま開発を進めても問題ないと思います。
おそらく、wv2.dll または wv2s.dll を使用するメリットとしては、
・自分で別途 WebView2Loader.dll を用意する必要が無い。
・導入用モジュールの内部に圧縮文字列として wv2(s).dll が埋め込まれているのでモジュールテキストのコピペだけで導入できる。
・WV2EnvなどコマンドがHSP3の標準命令に近いような命名となって取っ付きやすくなり、プログラムが一部整理された。
という、これからWebView2を始めるにあたってのハードル下げと取っ付きやすさアップが挙げられる、のではないかと勝手に思っています。
(2つ目の wv2(s).dll の入手性はzipか何かでどこかにダウンロード先があれば別に良いのかもしれませんが・・・。)
基本的には、 mod_WebView2_10115038.hsp も mod_wv2(s).hsp も出来ること自体はほぼ変わらないと思います。
違ったらごめんなさい。
> dll Microsoftの署名
署名の件に関しては、恥ずかしながらイマイチ詳しくなくて影響については分かりません。
無知で勝手な意見としては、これまでの経験上問題ない・・・んじゃないかなぁ、と気楽に考えてしまいがちですが。。。
ここは他の有識者の方にお願いします。
|
|
2023/12/29(Fri) 12:27:07|NO.100947
これってx64にできないの?
#include "hsp3_64.as"
つけると動かない
|
|
2023/12/29(Fri) 13:40:02|NO.100948
>これってx64にできないの?
mod_WebView2_10115038.hsp 内部で呼び出しているマシン語コードが32bitのため、
これを64bit対応しないと絶対に動かないですね。
|
|