全然更新しないブログ
HSPメモ帳
mod_MSZip - 2 / 3
mod_MSZip - 1 / 3 - 2 / 3 - 3 / 3
サンプル wv2dll.hsp - wv2.dll等をソースコードに埋め込む
wv2.dllは、WebView2を使用するための小さなDLLです。
WebView2LoaderStatic.libをリンクしているので、別途 WebView2Loader.dllは必要ありません。
バージョンは、1.0.1518.46。
(引用 訳)WebView2 SDK バージョン 1.0.1519.0 以降は、Windows 7 および Windows 8/8.1 をサポートしなくなります。
参照 Microsoft Edge and WebView2 ending support for Windows 7 and Windows 8/8.1
実行時に、wv2.dllが無い場合は、
mod_MSZip.hsp の MSZipToCode関数を使用してソースコードに圧縮文字列化して埋め込んだwv2.dllを解凍、実行ファイルを再起動します。
WebView2LoaderStatic.libをリンクしているので、別途 WebView2Loader.dllは必要ありません。
バージョンは、1.0.1518.46。
(引用 訳)WebView2 SDK バージョン 1.0.1519.0 以降は、Windows 7 および Windows 8/8.1 をサポートしなくなります。
参照 Microsoft Edge and WebView2 ending support for Windows 7 and Windows 8/8.1
実行時に、wv2.dllが無い場合は、
mod_MSZip.hsp の MSZipToCode関数を使用してソースコードに圧縮文字列化して埋め込んだwv2.dllを解凍、実行ファイルを再起動します。
#include "user32.as" #include "kernel32.as" #include "mod_MSZip.hsp" #include "mod_wv2.hsp" #include "mod_ComCall.hsp" wv2dll = {"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 RPIgLUWyIt2ApEEaaWJsAOktpGeRvol0N9I6pGKkTKSbka5CUiN9upGx3yMdQWrB eE8j34X0TaQtG2UeizagH9JVSDciRW2Q4QeQH0V6GOlBpCeQHkH6i9JubIQMGuXy WuRepAeQipBeQ/oj0gUkLcZZjvwJBfca5Aal7AOtdQq9X2RE/rp37LPvC2CX+1wP 1DilHP0F7Xa2kLmYm61jTlaPfPMXwlazNmZlacjtbCPgblaLf/RcyLysGRitqHkv 6rUA7Y2MJvVVVsQszMhMLJ2Z8S+NzQfEjlI+SinIM1gqSlbQK0TLfOAaWQH65KMl H73swCoAzlZOzYxyIbDzOV468O2gbQUuUTMiL0Qpn+NZUSIaRWixcz4KOBf5+CdT MwI7Fc+FnKcC4BP1NIW3It6baKRxHubz/ikYLw3YxGEBeprQX6aWBlrEeSqHpgA/ DXUT54h60fzn814pXA7pHMuKegHnm0bJAFSmthBjpKJuB0YRp2Hk88xXqJmAQdQs yI28NZWPlcElRvK2cskQtauWIzRE+hUSK2P6pfR3uVi9OubDalVj/dxY4RKsXg1f 1ValjVa9lq1HawVrQakaMMIswNrSSjehXoYUgdOHdIQgjOvJJuQ1qDXxUe5CrZ73 Ip0hmKz49J5Ug3Ql0jVIc5GImsu9zlnv3mzOTC6qrm901yb7mpPr6puQe9zJ1S0t ye42d3JLtc+zYPKX40Yak2sa691NOHk3NiZX+zKT2WS2yO0rAr7T7W2tb25a3FTX XFZ/t9v1BXAXQ6XU7/be5axu9AMFM6bZe/mc1mOV6jEfN1uMWh0kuBprIusk5bRK q5mDy7eW+SEVH/YLyaEV/ZpZk/z38ePm0bqhvqUFE6lvqq6pcbe21q9rdCdDZi3A n4/d2IrnZj72fFBr5qs4HxIfT3M+ODLhaeIaMrYvJ2KNwfOhQU48HZiFBfo61mLf BMEtd6+vb/W5vZeXdjX9QEOrr7qRgKNi9/qbfPUb3cnN3uSm5qb5aKe5lNTXeJtb m+t8yfba9e5Iv2of5I0F/QJ9XHCRnTGz5ZAk6VM95OFGu6yN6/g6VEH7NyPfAL1b h9nUor4O/wj2z1FfqOj2v55yId8r/3q6BeP23r+e+uKL9vKXjwC/50S8ijTZxfTr kEJITsUfeaLk/FL95ypV07wRG51vgU3ylkyWf0oD+7TA7/VCOR3VNRuq17tpq4ID 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 ed0yYglb5qYUpbSm3JWyPWVnymMpT6d0p/SmfJxSmrol9b7U76c+kfpaalSaM21y uj79lvSU9Kz0wvTl6SvS3ekN6a3pbelb0zvT/yP9h+l703+Wvi/9hfTj6e+l32fd bX3K+qz1HesH1gHrH6yD1s+s56xha1zGFRmzMswZ1gxbxsKM2gxP5uSslKwfZz2e 1Zt1MmtBdn72oew9tjdsJ2x/sv2X7VPbOdsFW3TOdTmpOVk5dTlRuU/lPpf7eu7x XHpp/yHmnWbcYHza+Bvjfxr/2/g1049NPzc9ZwqZUs355uXmNvN3zY+Yf28eMV9l ybessvzZ8rO0/WnPpr2f9re0Kekz069Pt6U70jeC+5fS30h/P/136SfTB9OH0/+a HmdNsN5ovcW6yFpidVorrZutAes26y7ro9a3rf3WORmNGYGMhzI+zvg8IypTm2nN ZFk3Zj2a9ULWQNbk7O9l/ya71naf7Qnb87Ye21HbSZsqx5azMKcspyqnNefJnGdy Xs15LefNnI9yTub8d0587vzc1bkduT/LfTL3UG5v7lu5I7l0fU2H8GijaHzdeI1p rslqKjEFTY+a/tM0aDpvmmw+aD5l1lpMFqflPy03pLSl7E+Zk/bNtBfTXk8bSvsE 66RLT0pfk16X/t30PelPph/BvBZb77Bek+HKuDNjd8bLGb/L+EPGnzOGwb8K/E/P TMy8PvPWzJTMwszFmasy12a6M1sy787syPx65n9k7sp8LHN/5quZRzJPZ57PnJQV n3Vt1pysW7NSs7Ky8rNKsu7IWptVl9WctSmrI+vrWQ9mfT/r51lHsy5kTc2+Knt2 dkZ2a/aW7GD2d7Mfzf559pPZL2R3Z2fafotVvTVnXc62nO/kPJGzP+fZnFDO4Zwj OW/l/CnnfE507qTcmblzcoO538t9OfedXLpDfZ4fZqYbf2cMGyeZbjDdYjKaCkwu 02pTs6nD9EPTgOkPps9NarPOfJX5JnO62WYuMC82LzNXmFeba8wN5juhDfeav2Z+ 0Pxt8w/NPzP/2nzA/KK51/wW9ONTc5RlimWmZY5lgeU9y4BFshhSFqSkp+SlVKSs SQmmfDvlRym/wK7oT/ldyqcp51OiUjWp01LjU69JTU69MXVeqjnVmpqTWph6W6oj 1Zm6OnVdqie1KdWX2pk6OY3OpfTOxmGqNe207LLstTxmedySDdqFKcUpS1IM1rnW eVajNcW6z7rfesD6vDVkPYZd02/9EPvmSPax7Babz9Zm22Jrt3XattkesG237bA9 bNtp22Xba3vM9rhtn22/7QB0LWR7xdZrO2I7ZnvH1m/70DYAzZNs83KMOdac7TmP 5bBcda4mV5tryJ2ba83Nzi2E3q3NbcvdktuZuzN3V+7e3AO5z+eGcl/J7c/9MHcg 9zRpIv8/HehorTfGG+cZs415Roex3LjCuNrYYvTB2uww7jXuNx4wPm98x3jSKMHi nDfGmxJNSabeVCn1dKo2TZ+WnFaY5khbkdaZti2NbsLoblRtLDauNbYZtxsfM4aM /cZ/G/J/7vN/AA=="} ComCalldll = {"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 tZyzXLD86YXT/wI="} restart = 0 msg = "%s の読み込みに失敗しました\nカレントフォルダに作成しますか?" if ( varptr(WV2Env) == 0 ){ dialog strf(msg, "wv2.dll"), 2, "確認" if ( stat != 6 ){ end } MSZipFromCode wv2dll, dst dstSize = stat bsave "wv2.dll", dst, dstSize restart++ } if ( varptr(ComCall) == 0 ){ dialog strf(msg, "ComCall.dll"), 2, "確認" if ( stat != 6 ){ end } MSZipFromCode ComCalldll, dst dstSize = stat bsave "ComCall.dll", dst, dstSize restart++ } if ( restart ){ dialog "アプリを再起動します。\nよろしいですか?", 2, "確認" if ( stat != 6 ){ end } GetCommandLineW dupptr dp, stat, 1024, 2 exec cnvwtos(dp) end } 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
コメント ( 0 ) | Trackback ( 0 )
mod_MSZip - 1 / 3
mod_MSZip - 1 / 3 - 2 / 3 - 3 / 3
mod_MSZip
mod_MSZip.hspは、Cabinet.dllを使用した圧縮解凍モジュールです。
mod_MSZip.hsp
#ifndef MOD_MSZIP_HSP #define global MOD_MSZIP_HSP #include "kernel32.as" #module mod_MSZip #uselib "Cabinet.dll" #func global CreateCompressor "CreateCompressor" int,int,var #func global CloseCompressor "CloseCompressor" int #func global Compress "Compress" int,var,int,int,int,var #func global CreateDecompressor "CreateDecompressor" int,int,var #func global CloseDecompressor "CloseDecompressor" int #func global Decompress "Decompress" int,var,int,int,int,var #uselib "Crypt32.dll" #func global CryptBinaryToString "CryptBinaryToStringA" var,int,int,int,var #func global CryptStringToBinary "CryptStringToBinaryA" sptr,int,int,int,var,int,int #deffunc MSZipComp int size, var src, var dst ds = 0 if ( size ){ ss = size } else { ss = varsize(src) } CreateCompressor 2, 0, hComp if ( stat ){ Compress hComp, src, ss, 0, 0, ds GetLastError if ( stat == 122 ){ sdim buf, ds Compress hComp, src, ss, varptr(buf), ds, ds if ( stat ){ sdim dst, ds : memcpy dst, buf, ds } else { ds = 0 } buf = 0 } CloseCompressor hComp } return ds #deffunc MSZipDecomp int size, var src, var dst ds = 0 if ( size ){ ss = size } else { ss = varsize(src) } CreateDecompressor 2, 0, hComp if ( stat ){ Decompress hComp, src, ss, 0, 0, ds GetLastError if ( stat == 122 ){ sdim buf, ds Decompress hComp, src, ss, varptr(buf), ds, ds if ( stat ){ sdim dst, ds : memcpy dst, buf, ds } else { ds = 0 } buf = 0 } CloseDecompressor hComp } return ds #deffunc MSZipCompFile str src, str dst exist src if ( strsize == -1 ){ return 0 } ss = strsize : sdim s, ss : bload src, s, ss MSZipComp ss, s, d : ds = stat if ( ds ){ bsave dst, d, ds } s = 0 : d = 0 return ds #deffunc MSZipDecompFile str src, str dst exist src if ( strsize == -1 ){ return 0 } ss = strsize : sdim s, ss : bload src, s, ss MSZipDecomp ss, s, d : ds = stat if ( ds ){ bsave dst, d, ds } s = 0 : d = 0 return ds #deffunc MSZipToCode int size, var src, var dst if ( size ){ ss = size } else { ss = varsize(src) } MSZipComp ss, src, d if ( ds == 0 ){ return 0 } ss = 0 CryptBinaryToString d, ds, 1, 0, ss if ( stat ){ sdim dst, ss CryptBinaryToString d, ds, 1, varptr(dst), ss if ( stat == 0 ){ ss = 0 } } d = 0 if ( ss == 0 ){ return 0 } return ss - 1 #deffunc MSZipFromCode str src, var dst CryptStringToBinary src, 0, 1, 0, ds, 0, 0 if ( stat == 0 ){ return 0 } sdim d, ds CryptStringToBinary src, 0, 1, varptr(d), ds, 0, 0 if ( stat ){ MSZipDecomp ds, d, dst } d = 0 return ds #global #endif // MOD_MSZIP_HSP
サンプル
#include "mod_MSZip.hsp" #include "shell32.as" title "sample - mod_MSZip.hsp ( ファイルドロップ可 )" objmode 2 : font "consolas", 14 oncmd gosub *DROPFILES, 0x0233 DragAcceptFiles hwnd, 1 x = ginfo_winx / 2 objsize x, 32 strBtn = "圧縮", "解凍" pos 0, 0 : button gosub strBtn(0), *LB_COMP pos x, 0 : button gosub strBtn(1), *LB_DECOMP sdim mb, 1024 * 64 pos 0, 32 : mesbox mb, ginfo_winx, ginfo_winy - 32 : idmb = stat stop *LB_COMP *LB_DECOMP type = stat dialog , 16 if ( stat != 1 ){ return -1 } filename = refstr *LB_COMP2 *LB_DECOMP2 ret = 0 exist filename size = strsize if ( size == -1 ){ mbtmp = strf("%s ファイルが存在しません\n", filename) ret = -1 } else { sdim src, size + 1 bload filename, src, size if ( type ){ MSZipDecomp size, src, dst } else { MSZipComp size, src, dst } dstSize = stat if ( dstSize ){ dialog , 17 if ( stat == 1 ){ bsave refstr, dst, dstSize } f = 1.0 * dstSize / Size * 100 mbtmp = strf("%s size: %dByte -> %dByte(%.2f)%% %sしました\n", filename, size, dstSize, f, strBtn(type)) if ( type == 0 ){ dialog "テキスト化しますか?", 2, "確認" if ( stat == 6 ){ MSZipToCode size, src, dst mb = strf("mszip = {\"%s\"}\n", dst) + mb objprm idmb, mb } } ret = 1 } else { mbtmp = strf("%s %sできませんでした\n", filename, strBtn(type)) } } mb = mbtmp + mb objprm idmb, mb return ret *DROPFILES sdim filename, 520 DragQueryFile wparam, 0, varptr(filename), 520 if ( stat ){ exist filename type = 1 : gosub *LB_DECOMP2 if ( ret == 0 ){ type = 0 : gosub *LB_COMP2 } } DragFinish wparam return
コメント ( 0 ) | Trackback ( 0 )
WebView2 1.0.1150.38
関連
- WebView2概要。
Microsoft Edge WebView2 (developer preview) - 以前の記事 WebView2 0.8.355
WebView2
mod_WebView2_08355.hsp
環境
- HSP Ver 3.6 (0x3607)
- OS Windows10 x64 21H2
- WebView2 SDK Ver 1.0.1150.38
- WebView2 ランタイム Ver 90.0.1150.30
準備
- WebView2 ランタイム
WebView2ランタイムをインストールする必要があります。
WebView2 ランタイム または、Microsoft Edge Insider Channels から任意のランタイムをインストールします。 - WebView2 SDK
Microsoft.Web.WebView2から任意のバージョンをダウンロードする。(参照 リリースノート) ファイル名の拡張子nupkgをzipに変更して解凍する。
build\native\x86\WebView2Loader.dll を実行ファイルのフォルダかパスが通ったフォルダにコピーする。
sample 1
#include "mod_WebView2_10115038.hsp" screen 0, 640, 480 pEnv = WebView2_CreateEnv() pCtrl = WebView2_CreateCtrl(pEnv, hwnd) WebView2_Size pCtrl, 0, 0, ginfo_winx, ginfo_winy pView = WebView2_GetView(pCtrl) WebView2_Navigate pView, "https://hsp.tv/make/hsp3.html" onexit *ONEXIT_ stop *ONEXIT_ WebView2_Release pView WebView2_Release pCtrl WebView2_Release pEnv end
sample 2
/* --------------------------------------------------------- include --------------------------------------------------------- */ #include "mod_WebView2_10115038.hsp" /* --------------------------------------------------------- define --------------------------------------------------------- */ #define global DEF_URL "https://www.google.co.jp/" #define global WM_SETFONT 0x0030 #define global TCM_GETITEMCOUNT 0x1304 #define global TCM_GETITEMA 0x1305 #define global TCM_INSERTITEMA 0x1307 #define global TCM_DELETEITEM 0x1308 #define global TCM_GETCURSEL 0x130b #define global TCM_SETCURSEL 0x130c #define global TCM_HITTEST 0x130d #define global TCM_SETITEMW 0x133d #define global TCM_INSERTITEMW 0x133e #define global WV2Env_CreateWV2Ctrl 3 #define global WV2Ctrl_put_IsVisible 4 #define global WV2Ctrl_put_Bounds 6 #define global WV2Ctrl_GetParent 21 #define global WV2Ctrl_Close 24 #define global WV2Ctrl_get_CoreWebView2 25 #define global WV2_get_Source 4 #define global WV2_Navigate 5 #define global WV2_add_NavigationCompleted 15 #define global WV2_del_NavigationCompleted 16 #define global WV2_ExecuteScript 29 #define global WV2_CapturePreview 30 #define global WV2_Reload 31 #define global WV2_get_CanGoBack 38 #define global WV2_get_CanGoForward 39 #define global WV2_get_GoBack 40 #define global WV2_get_GoForward 41 #define global WV2_add_NewWindowRequested 44 #define global WV2_del_NewWindowRequested 45 #define global WV2_add_DocumentTitleChanged 46 #define global WV2_del_DocumentTitleChanged 47 #define global WV2_get_DocumentTitle 48 #define global WV2_add_FullScrChanged 52 #define global WV2_del_FullScrChanged 53 #define global WV2_GetFullScreen 54 #define global WV2_OpenTaskManagerWindow 79 #define global WV2_PrintToPdf 80 #define global WV2_IsDownloadDialogOpen 90 #define global WV2_OpenDownloadDialog 91 #define global WV2_CloseDownloadDialog 92 #define global WV2NewWnd_get_Uri 3 #define global WV2NewWnd_put_NewWindow 4 #define global WV2NewWnd_put_Handled 6 #define global WV2NewWnd_GetDeferral 9 #define global WV2Deferral_Complete 3 /* --------------------------------------------------------- ExecuteScript screen 2 --------------------------------------------------------- */ screen 2, ginfo_dispx, ginfo_dispy, 2, , , 320, 240 title "ExecuteScript" : hWnd2 = hwnd : font "Consolas", 11 : objmode 2 sdim bufExec, 1024 : sdim bufRes, 1024 pos 0, 0 : objsize ginfo_winx, 20 button gosub "ExecuteScript", *BTN_EXEC : hBtnExec = objinfo_hwnd(stat) p1 = (ginfo_winy - 20) / 2 : pos 0, 20 mesbox bufExec, ginfo_winx, p1 : hMbExec = objinfo_hwnd(stat) pos 0, p1 + 20 mesbox bufRes, ginfo_winx, p1 : hMbRes = objinfo_hwnd(stat) oncmd gosub *WM2_SIZE, 0x0005 oncmd gosub *WM2_CLOSE, 0x0010 /* --------------------------------------------------------- Main Window --------------------------------------------------------- */ WebView2_InitWnd 0 hWnd0 = hwnd : title "WebView2" font "メイリオ", 11 : mref bmscr, 67 : hFont = bmscr(38) dim wndInfo, 7 hMenu = CreateMenu() menuBuf(0) = "Back", "Forward", "Reload", "Navigate" menuBuf(4) = "New Tab", "Del Tab", "Execute", "Capture" menuBuf(8) = "PrintPDF", "DownLoad", "Task" repeat length(menuBuf) InsertMenu hMenu, -1, 0x400, 0x8000 + cnt, menuBuf(cnt) loop dim mi, 12 : mi = 48, 1 : mi(3) = 3 SetMenu hWnd0, hMenu ldim lbCmd, length(menuBuf) lbCmd(0) = *CMD_BACK, *CMD_FORWARD, *CMD_RELOAD, *CMD_NAVIGATE lbCmd(4) = *CMD_NEW_TAB, *CMD_DEL_TAB, *CMD_EXECUTE, *CMD_CAPTURE lbCmd(8) = *CMD_PRINTPDF, *CMD_DOWNLOAD, *CMD_TASKMANAGER CreateWindowExA 0, "edit", 0, 0x56000080, 0, 0, 0, 0, hWnd0, 0, hinstance, 0 hEditUrl = stat : sendmsg hEditUrl, WM_SETFONT, hFont, 1 bufTmp = DEF_URL : SetWindowTextA hEditUrl, varptr(bufTmp) dim rc, 4 : dim tci, 7 : bAdd = 0 : bDel = 0 CreateWindowExA 0, "SysTabControl32", 0, 0x56008468, 0, 0, 0, 0, hWnd0, 0, hinstance, 0 hTab = stat : sendmsg hTab, WM_SETFONT, hFont, 1 p1 = 0 << 16 : p1 |= 160 : sendmsg hTab, 0x1329, 0, p1 pEnv = WebView2_CreateEnv() if ( pEnv == 0 ){ dialog "err WebView2_CreateEnv" : end } curCtrl = 0 : curView = 0 oncmd gosub *EVENT_TITLE, 0x9000 oncmd gosub *EVENT_COMPLETE, 0x9001 oncmd gosub *EVENT_FULLSCR, 0x9002 oncmd gosub *EVENT_NEWWND, 0x9003 oncmd gosub *EVENT_NEWWND2, 0x9004 oncmd gosub *EVENT_PRINT, 0x9005 oncmd gosub *WM_SIZE, 0x0005 oncmd gosub *WM_CLOSE, 0x0010 oncmd gosub *WM_NOTIFY, 0x004E oncmd gosub *WM_COMMAND, 0x0111 gosub *TAB_ADD stop /* --------------------------------------------------------- Label Tab --------------------------------------------------------- */ *MENU_UPDATE mi(1) = 1 if ( CCall2(dpCtrl(1), WV2_get_CanGoBack, 1, varptr(p1)) == 0 ){ if ( p1 ){ mi(3) = 0 } else { mi(3) = 3 } } else { mi(3) = 3 } SetMenuItemInfo hMenu, 0, 1, varptr(mi) if ( CCall2(dpCtrl(1), WV2_get_CanGoForward, 1, varptr(p1)) == 0 ){ if ( p1 ){ mi(3) = 0 } else { mi(3) = 3 } } else { mi(3) = 3 } SetMenuItemInfo hMenu, 1, 1, varptr(mi) DrawMenuBar hWnd0 return *TAB_GETINFO sendmsg hTab, TCM_GETCURSEL, 0, 0 : iTab = stat gosub *TAB_GETINFO2 return *TAB_GETINFO2 pTabInfo = 0 if ( iTab == -1 ){ return } tci(0) = 8 : sendmsg hTab, TCM_GETITEMA, iTab, varptr(tci) if ( stat == 0 ){ return } pTabInfo = tci(6) dupptr dpCtrl, WV2_DATA_SIZE * 28 + pTabInfo, 8, 4 return *TAB_SELECT gosub *TAB_GETINFO if ( pTabInfo == 0 ){ return } pView = -1 : gosub *TAB_UPDATE gosub *WM_SIZE ret = CCall2(dpCtrl, WV2Ctrl_put_IsVisible, 1, 1) return *TAB_UPDATE gosub *TAB_GETINFO if ( pTabInfo == 0 ){ return } gosub *MENU_UPDATE if ( CCall2(dpCtrl(1), WV2_get_DocumentTitle, 1, varptr(p1)) == 0 ){ if ( pView == -1 || pView == dpCtrl(1) ){ SetWindowTextW hWnd0, p1 } tci(0) = 1 : tci(3) = p1 sendmsg hTab, TCM_SETITEMW, iTab, varptr(tci) CoTaskMemFree p1 } if ( pView == -1 || pView == dpCtrl(1) ){ if ( CCall2(dpCtrl(1), WV2_get_Source, 1, varptr(p1)) == 0 ){ SetWindowTextW hEditUrl, p1 CoTaskMemFree p1 } } return *TAB_ADD if ( bAdd ){ return } bAdd = 1 gosub *TAB_ADD2 gosub *EVENT_SET gosub *TAB_SELECT bufTmp = DEF_URL SetWindowTextA hEditUrl, varptr(bufTmp) gosub *CMD_NAVIGATE bAdd = 0 return *TAB_ADD2 gosub *TAB_GETINFO if ( pTabInfo ){ ret = CCall2(dpCtrl, WV2Ctrl_put_IsVisible, 1, 0) } sendmsg hTab, TCM_GETITEMCOUNT, 0, 0 : iTab = stat tci(0) = 9 : tci(6) = 0 bufTmp = "Loading..." : tci(3) = varptr(bufTmp) sendmsg hTab, TCM_INSERTITEMA, iTab, varptr(tci) sendmsg hTab, TCM_SETCURSEL, iTab, 0 curCtrl = WebView2_CreateCtrl(pEnv, hWnd0) curView = WebView2_GetView(curCtrl) if ( curCtrl == 0 || curView == 0 ){ gosub *TAB_DEL return } return *TAB_DEL sendmsg hTab, TCM_GETITEMCOUNT, 0, 0 if ( stat <= 1 ){ return } if ( bDel ){ return } bDel = 1 gosub *TAB_GETINFO2 if ( pTabInfo == 0 ){ return } ret = CCall2(dpCtrl(0), WV2Ctrl_Close, 0) WebView2_Release dpCtrl(1) WebView2_Release dpCtrl(0) HeapFree GetProcessHeap(), 0, pTabInfo sendmsg hTab, TCM_DELETEITEM, iTab, 0 if ( iTab ){ iTab-- } sendmsg hTab, TCM_SETCURSEL, iTab, 0 gosub *TAB_SELECT bDel = 0 return /* --------------------------------------------------------- Label Event --------------------------------------------------------- */ *EVENT_TITLE pView = wparam : gosub *TAB_UPDATE return *EVENT_COMPLETE pView = wparam : gosub *TAB_UPDATE return *EVENT_FULLSCR gosub *TAB_GETINFO if ( pTabInfo == 0 ){ return } if ( dpCtrl(1) != wparam ){ return } if ( CCall2(dpCtrl(1), WV2_GetFullScreen, 1, varptr(p1)) ){ return } if ( p1 ){ ShowWindow hEditUrl, 0 ShowWindow hTab, 0 wndInfo(0) = GetWindowLong(hWnd0, -20) wndInfo(1) = GetWindowLong(hWnd0, -16) wndInfo(2) = GetMenu(hWnd0) SetMenu hWnd0, 0 if ( WebView2_GetWndRect(hWnd0, rc) == 0 ){ return } wndInfo(3) = rc(0), rc(1), rc(2), rc(3) SetWindowLong hWnd0, -20, 0 SetWindowLong hWnd0, -16, wndInfo(1) & 0xff000000 if ( WebView2_GetMonitorRect(hWnd0, rc) == 0 ){ return } SetWindowPos hWnd0, -1, rc(0), rc(1), rc(2), rc(3), 0x220 } else { ShowWindow hEditUrl, 5 ShowWindow hTab, 5 SetWindowLong hWnd0, -20, wndInfo(0) SetWindowLong hWnd0, -16, wndInfo(1) if ( wndInfo(2) ){ SetMenu hWnd0, wndInfo(2) } if ( wndInfo(0) & 0x8 ){ p1 = -1 } else { p1 = -2 } SetWindowPos hWnd0, p1, wndInfo(3), wndInfo(4), wndInfo(5), wndInfo(6), 0x220 ShowWindow hWnd0, 1 } return *EVENT_PRINT dialog strf("PDF isSuccessful %d", lparam) mi(1) = 1 : mi(3) = 0 SetMenuItemInfo hMenu, 8, 1, varptr(mi) DrawMenuBar hWnd0 bPDF = 0 return *EVENT_NEWWND if ( lparam == 0 || bAdd != 0 ){ return } bAdd = 1 pNewWnd = lparam if ( CCall2(pNewWnd, WV2NewWnd_GetDeferral, 1, varptr(pDef)) == 0 ){ PostMessage hWnd0, 0x9004, 0, 0 bAdd = 1 } return *EVENT_NEWWND2 if ( CCall2(pNewWnd, WV2NewWnd_put_Handled, 1, 1) == 0 ){ if ( CCall2(pNewWnd, WV2NewWnd_get_Uri, 1, varptr(p1)) == 0 ){ gosub *TAB_ADD2 ret = CCall2(pNewWnd, WV2NewWnd_put_NewWindow, 1, curView) gosub *EVENT_SET gosub *TAB_SELECT } } ret = CCall2(pDef, WV2Deferral_Complete, 0) WebView2_Release pDef bAdd = 0 return *EVENT_SET pTabInfo = 0 pTabInfo = HeapAlloc(GetProcessHeap(), 8, WV2_DATA_SIZE * 28 + 8) if ( pTabInfo == 0 ){ return } dupptr dp, pTabInfo, WV2_DATA_SIZE * 4, 4 WebView2_EventInit WV2_EVENT_TITLECHANGED, hWnd0, 0x9000, dp ret = CCall2(curView, WV2_add_DocumentTitleChanged, 2, dp, varptr(dp(6))) dupptr dp, WV2_DATA_SIZE * 4 + pTabInfo, WV2_DATA_SIZE * 4, 4 WebView2_EventInit WV2_EVENT_NAVIGATIONCOMPLETED, hWnd0, 0x9001, dp ret = CCall2(curView, WV2_add_NavigationCompleted, 2, dp, varptr(dp(6))) dupptr dp, WV2_DATA_SIZE * 8 + pTabInfo, WV2_DATA_SIZE * 4, 4 WebView2_EventInit WV2_EVENT_FULLSCREEN, hWnd0, 0x9002, dp ret = CCall2(curView, WV2_add_FullScrChanged, 2, dp, varptr(dp(6))) dupptr dp, WV2_DATA_SIZE * 12 + pTabInfo, WV2_DATA_SIZE * 4, 4 WebView2_EventInit WV2_EVENT_NEWWINDOW, hWnd0, 0x9003, dp ret = CCall2(curView, WV2_add_NewWindowRequested, 2, dp, varptr(dp(6))) dupptr dpCtrl, WV2_DATA_SIZE * 28 + pTabInfo, 8, 4 dpCtrl(0) = curCtrl, curView tci(0) = 8 : tci(6) = pTabInfo sendmsg hTab, TCM_SETITEMW, iTab, varptr(tci) return /* --------------------------------------------------------- Label Menu --------------------------------------------------------- */ *CMD_BACK gosub *TAB_GETINFO if ( pTabInfo ){ ret = CCall2(dpCtrl(1), WV2_get_GoBack, 0) } return *CMD_FORWARD gosub *TAB_GETINFO if ( pTabInfo ){ ret = CCall2(dpCtrl(1), WV2_get_GoForward, 0) } return *CMD_RELOAD gosub *TAB_GETINFO if ( pTabInfo ){ ret = CCall2(dpCtrl(1), WV2_Reload, 0) } return *CMD_NAVIGATE gosub *TAB_GETINFO if ( pTabInfo == 0 ){ return } p1 = (GetWindowTextLengthW(hEditUrl) + 1) * 2 sdim bufTmp, p1 GetWindowTextW hEditUrl, varptr(bufTmp), p1 ret = CCall2(dpCtrl(1), WV2_Navigate, 1, varptr(bufTmp)) return *CMD_NEW_TAB gosub *TAB_ADD return *CMD_DEL_TAB gosub *TAB_DEL return *CMD_EXECUTE if ( IsWindowVisible(hWnd2) ){ SetWindowPos hWnd2, 0, 0, 0, 0, 0, 0x83 } else { SetWindowPos hWnd2, -1, 0, 0, 0, 0, 0x63 } return *CMD_CAPTURE dialog "png", 17 if ( stat == 0 ){ return } if ( SHCreateStreamOnFileEx(refstr, 0x1002, 0x80, 1, 0, p1) ){ return } gosub *TAB_GETINFO if ( pTabInfo == 0 ){ return } dupptr dp, WV2_DATA_SIZE * 20 + pTabInfo, WV2_DATA_SIZE * 4, 4 WebView2_EventInit WV2_EVENT_CAPTURE, hWnd0, 0, dp ret = CCall2(dpCtrl(1), WV2_CapturePreview, 3, 0, p1, dp) WebView2_EventWait dp WebView2_Release p1 return *CMD_PRINTPDF if ( bPDF ){ return } dialog "pdf", 17 if ( stat == 0 ){ return } gosub *TAB_GETINFO if ( pTabInfo == 0 ){ return } bPDF = 1 mi(1) = 1 : mi(3) = 3 SetMenuItemInfo hMenu, 8, 1, varptr(mi) DrawMenuBar hWnd0 dupptr dp, WV2_DATA_SIZE * 24 + pTabInfo, WV2_DATA_SIZE * 4, 4 WebView2_EventInit WV2_EVENT_PRINTTOPDF, hWnd0, 0x9005, dp sdim bufTmp, (strlen(refstr) + 1) * 2 cnvstow bufTmp, refstr ret = CCall2(dpCtrl(1), WV2_PrintToPdf, 3, varptr(bufTmp), 0, dp) return stat *CMD_DOWNLOAD gosub *TAB_GETINFO if ( pTabInfo == 0 ){ return } if ( CCall2(dpCtrl(1), WV2_IsDownloadDialogOpen, 1, varptr(p1)) ){ return } if ( p1 ){ p1 = WV2_CloseDownloadDialog } else { p1 = WV2_OpenDownloadDialog } ret = CCall2(dpCtrl(1), p1, 0) return *CMD_TASKMANAGER gosub *TAB_GETINFO if ( pTabInfo == 0 ){ return } ret = CCall2(dpCtrl(1), WV2_OpenTaskManagerWindow, 0) return /* --------------------------------------------------------- Label screen 0 --------------------------------------------------------- */ *WM_SIZE GetClientRect hWnd0, varptr(rc) if ( IsWindowVisible(hEditUrl) ){ MoveWindow hEditUrl, 8, 0, rc(2) - 16, 20, 0 MoveWindow hTab, 0, 20, rc(2), 24, 0 p1 = 44 } else { p1 = 0 } gosub *TAB_GETINFO if ( pTabInfo ){ WebView2_Size dpCtrl(0), 0, p1, rc(2), rc(3) } return *WM_CLOSE sendmsg hTab, TCM_GETITEMCOUNT, 0, 0 repeat stat iTab = cnt : gosub *TAB_DEL loop WebView2_Release pEnv if ( hMenu ){ DestroyMenu hMenu } return *WM_NOTIFY if ( lparam == 0 ){ return } dupptr dpHdr, lparam, 12, 4 if ( dpHdr(0) == hTab ){ if ( dpHdr(2) == -552 ){ sendmsg hTab, TCM_GETCURSEL, 0, 0 if ( stat == -1 ){ return } iTab = stat : gosub *TAB_GETINFO2 if ( pTabInfo == 0 ){ return } ret = CCall2(dpCtrl(0), WV2Ctrl_put_IsVisible, 1, 0) } if ( dpHdr(2) == -551 ){ gosub *TAB_SELECT return } if ( dpHdr(2) == -5 ){ dim tchi, 3 GetCursorPos varptr(tchi) ScreenToClient hTab, varptr(tchi) sendmsg hTab, TCM_HITTEST, 0, varptr(tchi) if ( stat == -1 ){ return } iTab = stat : gosub *TAB_DEL return } } return *WM_COMMAND if ( lparam == 0 && (wparam >> 16) == 0 ){ id = wparam & 0xffff if ( id < 0x8000 || id >= (0x8000 + length(lbCmd)) ){ return } gosub lbCmd(id - 0x8000) } return /* --------------------------------------------------------- Label screen 2 --------------------------------------------------------- */ *WM2_SIZE GetClientRect hWnd2, varptr(rc) rc(3) = (rc(3) - 20) / 2 MoveWindow hBtnExec, 0, 0, rc(2), 20, 1 MoveWindow hMbExec, 0, 20, rc(2), rc(3), 1 MoveWindow hMbRes, 0, rc(3) + 20, rc(2), rc(3), 1 return *WM2_CLOSE SetWindowPos hWnd2, 0, 0, 0, 0, 0, 0x83 return 0 *BTN_EXEC gosub *TAB_GETINFO if ( pTabInfo == 0 ){ return } EnableWindow hBtnExec, 0 p1 = (GetWindowTextLengthW(hMbExec) + 1) * 2 sdim bufTmp, p1 GetWindowTextW hMbExec, varptr(bufTmp), p1 dupptr dp, WV2_DATA_SIZE * 16 + pTabInfo, WV2_DATA_SIZE * 4, 4 WebView2_EventInit WV2_EVENT_EXECUTESCRIPT, 0, 0, dp if ( CCall2(dpCtrl(1), WV2_ExecuteScript, 2, varptr(bufTmp), dp) == 0 ){ WebView2_EventWait dp if ( dp(WV2_DATA_WP) == 0 ){ if ( WebView2_CnvWinStr(dp(WV2_DATA_LP), bufTmp) ){ SetWindowTextA hMbRes, varptr(bufTmp) } } } EnableWindow hBtnExec, 1 return
mod_WebView2_10115038.hsp
#ifndef MOD_WEBVIEW2_HSP_ #define global MOD_WEBVIEW2_HSP_ #include "user32.as" #include "kernel32.as" #ifndef CreateEventExA #func global CreateEventEx "CreateEventExA" int,int,int,int #endif // CreateEventExA #include "ole32.as" #ifndef SHCreateStreamOnFileEx #uselib "Shlwapi.dll" #func global SHCreateStreamOnFileEx "SHCreateStreamOnFileEx" wptr,int,int,int,int,var #endif // SHCreateStreamOnFileEx #uselib "combase.dll" #func global WindowsCreateString "WindowsCreateString" wptr,int,var #func global WindowsDeleteString "WindowsDeleteString" int #func global WindowsGetStringRawBuffer "WindowsGetStringRawBuffer" int,var #uselib "WebView2Loader.dll" #func global CreateCoreWebView2EnvironmentWithOptions "CreateCoreWebView2EnvironmentWithOptions" wptr,wptr,var,var #func global CreateCoreWebView2Environment "CreateCoreWebView2Environment" int #func global GetAvailableCoreWebView2BrowserVersionString "GetAvailableCoreWebView2BrowserVersionString" wptr,var #func global CompareBrowserVersions "CompareBrowserVersions" wptr,wptr,var #enum global WV2_EVENT_CAPTURE = 0 #enum global WV2_EVENT_FULLSCREEN #enum global WV2_EVENT_CREATECTRL #enum global WV2_EVENT_CREATEENV #enum global WV2_EVENT_TITLECHANGED #enum global WV2_EVENT_EXECUTESCRIPT #enum global WV2_EVENT_NAVIGATIONCOMPLETED #enum global WV2_EVENT_NAVIGATIONSTARTING #enum global WV2_EVENT_NEWWINDOW #enum global WV2_EVENT_PRINTTOPDF #enum global WV2_EVENT_SOURCECHANGED #enum global WV2_EVENT_WINDOWCLOSE #enum global WV2_EVENT_MAX #enum global WV2_DATA_PT = 0 #enum global WV2_DATA_VT #enum global WV2_DATA_WP #enum global WV2_DATA_LP #enum global WV2_DATA_HWND #enum global WV2_DATA_EVENT #enum global WV2_DATA_TOKENL #enum global WV2_DATA_TOKENH #enum global WV2_DATA_SIZE #ifndef MOD_COMCALL_HSP_ #define global MOD_COMCALL_HSP_ #module mod_ComCall #deffunc ComCall_Init if ( codeComCall ){ return } dim prm, 3 dim prm2, 4 dim codeComCall, 10 codeComCall(0) = $8bec8b55, $4d8b1045, $ff03eb14, $7d498834, $084d8bfa, $8b018b51, $048b0c55, $c9d0ff90 codeComCall(8) = $000000c3 fCCall = varptr(codeComCall) VirtualProtect varptr(codeComCall), length(codeComCall) * 4, 0x40, varptr(p1) return #defcfunc CCall int this_, int id_, array prm_, int prms_ if ( this_ == 0 ){ return 0 } prm = this_, id_, varptr(prm_), prms_ return callfunc(prm, fCCall, 4) #defcfunc CCall2 int this_, int id_, int prms_, int p1_, int p2_, int p3_, int p4_ if ( prms_ != 0 ){ if ( prms_ == 1 ){ prm2 = p1_ } else { if ( prms_ == 2 ){ prm2 = p1_, p2_ } else { if ( prms_ == 3 ){ prm2 = p1_, p2_, p3_ } else { if ( prms_ == 4 ){ prm2 = p1_, p2_, p3_, p4_ } }}} } return CCall(this_, id_, prm2, prms_) #global ComCall_Init #endif // MOD_COMCALL_HSP_ #module mod_WebView2 #deffunc WebView2_Init if ( codeEH ){ return } dim codeEH, 139 codeEH( 0) = $004002b8, $000cc280 codeEH( 2) = $04c2c033, $00000000 codeEH( 4) = $04c2c033, $00000000 codeEH( 6) = $08244c8b, $24748b56, $7c8b5708, $7e831424, $4e89000c, $087e8904, $51571d74, $c71076ff codeEH( 14) = $aa1c2444, $ffaaaaaa, $448b0c76, $d0ff2024, $5ec0335f, $85000cc2, $8b0674c9, $50ff5101 codeEH( 22) = $74ff8504, $57078b06, $ff0450ff, $44c71076, $bbbb1424, $448bbbbb, $d0ff1424, $1046c75f codeEH( 30) = $00000000, $c25ec033, $0000000c codeEH( 33) = $0824448b, $5575c085, $0c244c8b, $24748b56, $04468908, $39084e89, $1c740c46, $76ff5051 codeEH( 41) = $2444c710, $aaaaaa18, $0c76ffaa, $1c24448b, $c033d0ff, $000cc25e, $0674c985, $ff51018b codeEH( 49) = $76ff0450, $2444c710, $bbbbbb10, $24448bbb, $c7d0ff10, $00001046, $c0330000, $000cc25e codeEH( 57) = $5c8b5351, $8b571024, $8310247c, $89000c7f, $2574045f, $18244c8b, $77ff5351, $084f8910 codeEH( 65) = $c70c77ff, $aa282444, $8baaaaaa, $ff28244c, $c38b5fd1, $0cc2595b, $24448d00, $2444c714 codeEH( 73) = $cccccc10, $74ff50cc, $44c71c24, $dddd1024, $448bdddd, $44c71824, $00001c24, $d0ff0000 codeEH( 81) = $2474ff50, $24448b20, $ffd0ff14, $c9331077, $440fc085, $8918244c, $44c7084f, $bbbb1c24 codeEH( 89) = $448bbbbb, $d0ff1c24, $001047c7, $8b000000, $595b5fc3, $00000cc2 codeEH( 95) = $0c24448b, $24748b56, $7c8b5708, $7e831024, $7e89000c, $08468904, $57501d74, $c71076ff codeEH(103) = $aa1c2444, $ffaaaaaa, $4c8b0c76, $d1ff2024, $5e5fc78b, $ff000cc2, $44c71076, $bbbb1424 codeEH(111) = $448bbbbb, $d0ff1424, $46c7c78b, $00000010, $c25e5f00, $0000000c codeEH(117) = $24748b56, $7c8b5708, $7e831024, $7e89000c, $0846c704, $00000000, $006a1e74, $1076ff57 codeEH(125) = $1c2444c7, $aaaaaaaa, $8b0c76ff, $ff20244c, $5fc78bd1, $0008c25e, $c71076ff, $bb142444 codeEH(133) = $8bbbbbbb, $ff142444, $c7c78bd0, $00001046, $5e5f0000, $000008c2 dim aTmp, 8 p1 = varptr(SendMessageA) : aTmp = 59, 169, 267, 415, 504 repeat 5 : lpoke codeEH, aTmp(cnt), p1 : loop p1 = varptr(CloseHandle) : aTmp = 106, 205, 354, 442, 531 repeat 5 : lpoke codeEH, aTmp(cnt), p1 : loop lpoke codeEH, 293, varptr(lstrlenW) lpoke codeEH, 306, varptr(WindowsCreateString) vtHdlIxI = varptr(codeEH(0)), varptr(codeEH(2)), varptr(codeEH(4)), varptr(codeEH(6)) vtHdlHxI = varptr(codeEH(0)), varptr(codeEH(2)), varptr(codeEH(4)), varptr(codeEH(33)) vtHdlHxW = varptr(codeEH(0)), varptr(codeEH(2)), varptr(codeEH(4)), varptr(codeEH(57)) vtHdlHxB = varptr(codeEH(0)), varptr(codeEH(2)), varptr(codeEH(4)), varptr(codeEH(95)) vtHdlH = varptr(codeEH(0)), varptr(codeEH(2)), varptr(codeEH(4)), varptr(codeEH(117)) vtHdl = varptr(vtHdlIxI), varptr(vtHdlHxI), varptr(vtHdlHxW), varptr(vtHdlHxB), varptr(vtHdlH) VirtualProtect varptr(codeEH), length(codeEH) * 4, 0x40, varptr(p1) dim eVT, WV2_MAXHDL eVT(0) = 4, 0, 1, 1, 0, 2, 0, 0, 0, 3, 0, 0 return #deffunc WebView2_EventInit int enumEvent, int hWnd_, int nMsg, array aData aData(WV2_DATA_PT) = varptr(aData(WV2_DATA_VT)) aData(WV2_DATA_VT) = vtHdl(eVT(enumEvent)) aData(WV2_DATA_EVENT) = enumEvent if ( hWnd_ ){ aData(WV2_DATA_HWND) = hWnd_ aData(WV2_DATA_EVENT) = nMsg } else { CreateEventEx 0, 0, 0, 0x1F0003 p1 = stat if ( p1 == 0 ){ return 0 } aData(WV2_DATA_EVENT) = p1 aData(WV2_DATA_HWND) = 0 } return #deffunc WebView2_EventWait array aData if ( aData(WV2_DATA_EVENT) == 0 ){ return 0 } repeat WaitForSingleObject aData(WV2_DATA_EVENT), 100 if ( stat == 0 || stat != 0x102 ){ break } await 10 loop return 1 #deffunc WebView2_AddRef int pv return CCall2(pv, 1, 0) #deffunc WebView2_Release int pv return CCall2(pv, 2, 0) #defcfunc WebView2_CreateEnv dim aEnv, WV2_DATA_SIZE WebView2_EventInit WV2_EVENT_CREATEENV, 0, 0, aEnv ret = 0 CreateCoreWebView2Environment aEnv if ( stat == 0 ){ WebView2_EventWait aEnv if ( aEnv(WV2_DATA_WP) == 0 && aEnv(WV2_DATA_LP) != 0 ){ ret = 1 } } if ( ret == 0 ){ return 0 } return aEnv(WV2_DATA_LP) #defcfunc WebView2_CreateCtrl int pEnv, int hWnd_ dim aCtrl, WV2_DATA_SIZE WebView2_EventInit WV2_EVENT_CREATECTRL, 0, 0, aCtrl ret = 0 if ( CCall2(pEnv, 3, 2, hWnd_, aCtrl) == 0 ){ WebView2_EventWait aCtrl if ( aCtrl(WV2_DATA_WP) == 0 && aCtrl(WV2_DATA_LP) != 0 ){ ret = 1 } } if ( ret == 0 ){ return 0 } return aCtrl(WV2_DATA_LP) #defcfunc WebView2_GetView int pCtrl if ( CCall2(pCtrl, 25, 1, varptr(p1)) ){ return 0 } return p1 #deffunc WebView2_Size int pCtrl, int x, int y, int w, int h if ( CCall2(pCtrl, 6, 4, x, y, w, h) ){ return 0 } return 1 #deffunc WebView2_Navigate int pView, str sUrl sdim bufTmp, (strlen(sUrl) + 1) * 2 cnvstow bufTmp, sUrl if ( CCall2(pView, 5, 1, varptr(bufTmp)) ){ return 0 } return 1 #defcfunc WebView2_CnvpWtoS int pWStr, var vBuf if ( pWStr == 0 ){ return 0 } sdim bufTmp, (lstrlenW(pWStr) + 1) * 2 lstrcpyW varptr(bufTmp), pWStr vBuf = cnvwtos(bufTmp) bufTmp = 0 return 1 #defcfunc WebView2_CnvWinStr int pWinStr, var vBuf if ( pWinStr == 0 ){ return 0 } WindowsGetStringRawBuffer pWinStr, p1 p1 = stat ret = 1 if ( WebView2_CnvpWtoS(p1, vBuf) == 0 ){ ret = 0 } if ( p1 ){ WindowsDeleteString pWinStr } return ret #defcfunc WebView2_GetMonitorRect int hWnd_, array aRect dim pmi, 10 : pmi(0) = 40 MonitorFromWindow hWnd_, 1 if ( GetMonitorInfo(stat, varptr(pmi)) == 0 ){ return 0 } pmi(3) -= pmi(1) : pmi(4) -= pmi(2) dim aRect, 4 CopyRect varptr(aRect), varptr(pmi(1)) return 1 #defcfunc WebView2_GetWndRect int hWnd_, array aRect dim wndPl, 11 : wndPl(0) = 44 if ( GetWindowPlacement(hWnd_, varptr(wndPl)) == 0 ){ return 0 } dim aRect, 4 wndPl(9) -= wndPl(7) : wndPl(10) -= wndPl(8) CopyRect varptr(aRect), varptr(wndPl(7)) return 1 #deffunc WebView2_InitWnd int wndID mref bmscr, 96 + wndID hWndTmp = bmscr(13) if ( WebView2_GetMonitorRect(hWndTmp, rcMon) == 0 ){ return 0 } if( WebView2_GetWndRect(hWndTmp, rcWnd) == 0 ){ return 0 } screen wndID, rcMon(2), rcMon(3), 2, , , rcWnd(2), rcWnd(3) GetWindowLong hwnd, -16 SetWindowLong hwnd, -16, stat | 0x50000 SetWindowPos hwnd, 0, 0, 0, 0, 0, 0x63 return 1 #global WebView2_Init #endif // MOD_WEBVIEW2_HSP_
コメント ( 9 ) | Trackback ( 0 )
Scintilla
関連
- Scintilla 公式
- A free source code editing component for Win32, GTK, and OS X
ライセンス
License
License for Scintilla and SciTE Copyright 1998-2002 by Neil HodgsonAll Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. NEIL HODGSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL NEIL HODGSON BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
準備
- SciLexer.dll
- Download Scintilla and SciTEから、
SciTEをダウンロードする。(例 full 32-bit download)
現状、HSPは64ビットをフルサポートしていないので32-bitを使用してください。解凍して、SciLexer.dllを検索パスにコピーする。
Scintilla Edit コントロールの作成
上記画像は、右クリックでのメニューも表示させています。
エラーがなければ、Scintillaコントロールが作成されて、文字を入力できます。
デフォルト状態では、文字が小さかったので、次はフォントの変更をしてみます。
#include "user32.as" #include "kernel32.as" screen 0, 300, 200 title "Scintilla" LoadLibrary "SciLexer.dll" dllSciLexer = stat if ( dllSciLexer == 0 ){ dialog "Err SciLexer.dll", , "終了" : end } st = 0x52010000 : w = ginfo_winx : h = ginfo_winy CreateWindowEx 0, "Scintilla", "Scintilla", st, 0, 0, w, h, hwnd, 0x8000, hinstance, 0 hEdit = stat SetFocus hEdit stop
コメント ( 0 ) | Trackback ( 0 )
mod_WebView2_08355.hsp
関連
- WebView2_08355.hsp
- HSP用WebView2.hの定義ファイル
環境
OS:Windows10 x64
HSP: Ver3.5
開発用Edgeは、アンインストール。
リリース版Edgeのバージョンは、80.0.361.48 (公式ビルド) (64 ビット)。
HSP: Ver3.5
開発用Edgeは、アンインストール。
リリース版Edgeのバージョンは、80.0.361.48 (公式ビルド) (64 ビット)。
サンプル WebView2 コントロールの表示
mod_WebView2_08355.hspは、サンプルの下に記載。
#include "mod_WebView2_08355.hsp" screen 0, 600, 400 WebView2New web WebView2Size web, 0, 0, ginfo_winx, ginfo_winy WebView2Navigate web, "https://www.bing.com" stop
サンプル WebView2 イベント処理
mod_WebView2_08355.hspは、サンプルの下に記載。
#include "mod_WebView2_08355.hsp" screen 0, 600, 400 WebView2New web WebView2Size web, 0, 0, ginfo_winx, ginfo_winy dim token, 2 WebView2EventInit webEvent, 0x9000 WebView2EventSetBegin webEvent, WebView2_NavigationCompleted, *WEB_COMPLETED IWebView2WebView_add_NavigationCompleted web, stat, token WebView2EventSetEnd webEvent, WebView2_NavigationCompleted, token WebView2Navigate web, "https://www.bing.com" stop *WEB_COMPLETED IWebView2WebView3_get_DocumentTitle web, tmp if ( stat == 0 ){ WebView2WtoS tmp, buf } else { buf = "err" } title buf return
mod_WebView2_08355.hsp
#ifndef MOD_WEBVIEW2_HSP_ #define global MOD_WEBVIEW2_HSP_ #include "user32.as" #include "kernel32.as" #ifndef CreateEventExA #func global CreateEventEx "CreateEventExA" int,sptr,int,int #endif #include "ole32.as" #include "WebView2_08355.hsp" #enum global WebView2_NavigationStarting = 0 #enum global WebView2_DocumentStateChanged #enum global WebView2_NavigationCompleted #enum global WebView2_FrameNavigationStarting #enum global WebView2_MoveFocusRequested #enum global WebView2_GotFocus #enum global WebView2_LostFocus #enum global WebView2_WebResourceRequested #enum global WebView2_ScriptDialogOpening #enum global WebView2_ZoomFactorChanged #enum global WebView2_PermissionRequested #enum global WebView2_ProcessFailed #enum global WebView2_ScriptToExecuteOnDocumentCreated #enum global WebView2_ExecuteScript #enum global WebView2_CapturePreview #enum global WebView2_WebMessageReceived #enum global WebView2_CallDevToolsProtocolMethod #enum global WebView2_DevToolsProtocolEventReceived #enum global WebView2_NewWindowRequested #enum global WebView2_DocumentTitleChanged #enum global WebView2_AcceleratorKeyPressed #enum global WEBVIEW2_NewVersionAvailable #enum global WebView2_MAXHDL #module mod_WebView2 #deffunc WevView2Init p1 = 0 dim p2, 2 dTmp = 0.0 ldim lbTmp, 1 eVt(0) = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 eVt(10) = 0, 0, 1, 1, 2, 0, 1, 0, 0, 0 eVt(20) = 0, 0 WebView2InitHdl return #deffunc WebView2InitHdl if ( codeWeb2Hdl == 0 ){ dim codeWeb2Hdl, 136 codeWeb2Hdl(0) = $0c24448b, $04244c8b, $c0330889, $00000cc2 codeWeb2Hdl(8) = $04c2c033, $00000000 codeWeb2Hdl(16) = $04c2c033, $00000000 codeWeb2Hdl(24) = $8b575653, $8514247c, $8b0674ff, $50ff5707, $245c8b04, $74db8518, $53038b06, $8b0450ff codeWeb2Hdl(32) = $83102474, $8900147e, $5e89047e, $ff117408, $44c71476, $aaaa1824, $448baaaa, $d0ff1824 codeWeb2Hdl(40) = $00187e83, $006a1774, $1c76ff56, $202444c7, $bbbbbbbb, $8b1876ff, $ff242444, $335e5fd0 codeWeb2Hdl(48) = $0cc25bc0, $00000000 codeWeb2Hdl(56) = $0824448b, $4675c085, $24748b56, $147e8308, $04468900, $1024448b, $74084689, $1476ff11 codeWeb2Hdl(64) = $102444c7, $aaaaaaaa, $1024448b, $7e83d0ff, $17740018, $ff56006a, $44c71c76, $bbbb1824 codeWeb2Hdl(72) = $76ffbbbb, $24448b18, $33d0ff1c, $0cc25ec0, $00000000 codeWeb2Hdl(80) = $24748b56, $7c8b5708, $7e831024, $7e890014, $ff117404, $44c71476, $aaaa1424, $448baaaa codeWeb2Hdl(88) = $d0ff1424, $00187e83, $006a1774, $1c76ff56, $1c2444c7, $bbbbbbbb, $8b1876ff, $ff20244c codeWeb2Hdl(96) = $5fc78bd1, $0008c25e, $00000000 codeWeb2Hdl(104) = $0824448b, $5675c085, $7c8b5756, $ff851424, $078b0674, $0450ff57, $0c24748b, $00147e83 codeWeb2Hdl(112) = $000446c7, $89000000, $1174087e, $c71476ff, $aa142444, $8baaaaaa, $ff142444, $187e83d0 codeWeb2Hdl(120) = $6a177400, $76ff5600, $2444c71c, $bbbbbb1c, $1876ffbb, $2024448b, $335fd0ff, $0cc25ec0 codeWeb2Hdl(128) = $00000000 p1 = varptr(SetEvent) lpoke codeWeb2Hdl, 150, p1 : lpoke codeWeb2Hdl, 260, p1 : lpoke codeWeb2Hdl, 346, p1 : lpoke codeWeb2Hdl, 467, p1 p1 = varptr(SendMessageA) lpoke codeWeb2Hdl, 176, p1 : lpoke codeWeb2Hdl, 286, p1 : lpoke codeWeb2Hdl, 372, p1 : lpoke codeWeb2Hdl, 493, p1 VirtualProtect varptr(codeWeb2Hdl), 136 * 4, 0x40, varptr(p1) vtWeb2Hdl_IxI = varptr(codeWeb2Hdl(0)), varptr(codeWeb2Hdl(8)), varptr(codeWeb2Hdl(16)), varptr(codeWeb2Hdl(24)) vtWeb2Hdl_HxW = varptr(codeWeb2Hdl(0)), varptr(codeWeb2Hdl(8)), varptr(codeWeb2Hdl(16)), varptr(codeWeb2Hdl(56)) vtWeb2Hdl_H = varptr(codeWeb2Hdl(0)), varptr(codeWeb2Hdl(8)), varptr(codeWeb2Hdl(16)), varptr(codeWeb2Hdl(80)) vtWeb2Hdl_HxI = varptr(codeWeb2Hdl(0)), varptr(codeWeb2Hdl(8)), varptr(codeWeb2Hdl(16)), varptr(codeWeb2Hdl(104)) dim vtHdl, 4 vtHdl = varptr(vtWeb2Hdl_IxI), varptr(vtWeb2Hdl_HxW), varptr(vtWeb2Hdl_H), varptr(vtWeb2Hdl_HxI) } return #deffunc WebView2Wait int hdlEvent if ( hdlEvent == 0 ){ return 1 } p2 = hdlEvent repeat await 1 CoWaitForMultipleHandles 0, 1, 1, varptr(p2), varptr(p1) if ( stat == 0 || stat != 0x80010115 ){ break } loop p1 = stat CloseHandle p2 return p1 #deffunc WebView2CWtoS int pWStr, var dst if ( pWStr == 0 ){ return 0 } WideCharToMultiByte 0, 0, pWStr, -1, 0, 0, 0, 0 if ( stat == 0 ){ return 0 } sdim dst, stat + 1 WideCharToMultiByte 0, 0, pWStr, -1, varptr(dst), stat, 0, 0 return 1 #deffunc WebView2WtoS int pWStr, var dst WebView2CWtoS pWStr, dst p1 = stat CoTaskMemFree pWStr return p1 *WM_WEBVIEW2 if ( wparam == 0 ){ return } dupptr dpHdl, wparam, 44, 4 if ( dpHdl(4) >= WebView2_MAXHDL || dpHdl(10) == 0 ){ return } lpoke lbTmp, 0, dpHdl(10) gosub lbTmp return #defcfunc WebView2HdlEvent array hdl CreateEventEx 0, 0, 0, 0x1F0003 if ( stat == 0 ){ return 0 } dim hdl, 11 hdl(0) = vtHdl(3) hdl(5) = stat return 1 #deffunc WebView2EnvInit var env dimtype env, 6, 1 if ( WebView2HdlEvent(hdlTmp) == 0 ){ return 0 } CreateWebView2Environment varptr(hdlTmp) if ( stat ){ dialog strf("%#x", stat) : return 0 } WebView2Wait hdlTmp(5) if ( hdlTmp(1) != 0 || hdlTmp(2) == 0 ){ return 0 } newcom env, IWebView2Environment3, -1, hdlTmp(2) return 1 #deffunc WebView2New2 var env, var cWeb dimtype cWeb, 6, 1 if ( WebView2HdlEvent(hdlTmp) == 0 ){ return 0 } IWebView2Environment_CreateWebView env, hwnd, varptr(hdlTmp) if ( stat == 0 ){ WebView2Wait hdlTmp(5) if ( hdlTmp(1) == 0 && hdlTmp(2) != 0 ){ newcom cWeb, IWebView2WebView, -1, hdlTmp(2) } } return 1 #deffunc WebView2New var cWeb WebView2EnvInit envTmp if ( stat == 0 ){ return 0 } WebView2New2 envTmp, cWeb envTmp = 0 return stat #deffunc WebView2Setting var cWeb, var cSetting IWebView2WebView_get_Settings cWeb, p1 if ( stat ){ return 0 } newcom cSetting, IWebView2Settings2, -1, p1 return 1 #deffunc WebView2Size var cWeb, int x, int y, int w, int h if ( varuse(cWeb) == 0 ){ return 0 } IWebView2WebView_put_Bounds cWeb, x, y, x + w, y + h if ( stat ){ return 0 } return 1 #deffunc WebView2Navigate var cWeb, str sUrl if ( varuse(cWeb) == 0 ){ return 0 } IWebView2WebView_Navigate cWeb, sUrl if ( stat ){ return 0 } return 1 #deffunc WebView2Write var cWeb, str sSrc if ( varuse(cWeb) == 0 ){ return 0 } IWebView2WebView_NavigateToString cWeb, sSrc if ( stat ){ return 0 } return 1 #deffunc WebView2Script var cWeb, str sSrc IWebView2WebView_ExecuteScript cWeb, sSrc, 0 return #deffunc WebView2EventInit array hdl, int idWebView2 dim hdl, 11, WEBVIEW2_MAXHDL repeat WEBVIEW2_MAXHDL hdl(0, cnt) = vtHdl(eVt(cnt)) hdl(4, cnt) = cnt, 0, hwnd, idWebView2 loop oncmd gosub *WM_WEBVIEW2, idWebView2 return #deffunc WebView2EventSetBegin array hdl, int idEvent, label lbEvent if ( hdl(8, idEvent) != 0 || hdl(9, idEvent) != 0 || hdl(10, idEvent) != 0 ){ return 0 } lbTmp = lbEvent : hdl(10, idEvent) = lpeek(lbTmp, 0) return varptr(hdl(0, idEvent)) #deffunc WebView2EventSetEnd array hdl, int idEvent, array aToken hdl(8, idEvent) = aToken(0), aToken(1) return 1 #deffunc WebView2EventDelBegin array hdl, int idEvent, array aToken dim aToken, 2 aToken = hdl(8, idEvent), hdl(9, idEvent) return 1 #deffunc WebView2EventDelEnd array hdl, int idEvent if ( stat ){ return 0 } hdl(8, idEvent) = 0, 0, 0 return 1 #deffunc WebView2EventGet array eventInfo dupptr dp, wparam, 44, 4 // InvokeArg1, InvokeArg2, IWebView2WebView*, ENUM_WEBVIEW2 eventInfo = dp(1), dp(2), dp(3), dp(4) return #global WevView2Init #endif // MOD_WEBVIEW2_HSP_
コメント ( 0 ) | Trackback ( 0 )
« 前ページ | 次ページ » |