全然更新しないブログ
HSPメモ帳
mod_MSZip - 3 / 3
mod_MSZip - 1 / 3 - 2 / 3 - 3 / 3
mod_wv2.hsp
#ifndef MOD_WV2_HSP #define global MOD_WV2_HSP #uselib "wv2.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 #func global WV2HdlNew "WV2HdlNew" int,int,int // type(0:II 1:HI 2:HW 3:HB 4:H), hWnd, msg #func global WV2HdlDel "WV2HdlDel" int #func global WV2HdlWait "WV2HdlWait" int,int #func global WV2HdlGet "WV2HdlGet" int,int #func global WV2Env "WV2Env" int,int #func global WV2Ctrl "WV2Ctrl" int,int #func global WV2GetVisible "WV2GetVisible" int #func global WV2SetVisible "WV2SetVisible" int,int #func global WV2GetSize "WV2GetSize" int,var #func global WV2SetSize "WV2SetSize" int,int,int,int,int #func global WV2Navigate "WV2Navigate" int,wstr #func global WV2Write "WV2Write" int,wstr #endif // MOD_WV2_HSP
mod_ComCall.hsp
#ifndef MOD_COMCALL_HSP #define global MOD_COMCALL_HSP #uselib "ComCall.dll" #func global ComCall "ComCall" int,int,var,int #func global ComNew "ComNew" wstr,wstr #func global ComDel "ComDel" int #func global ComQuery "ComQuery" int,wstr #func global ComAdd "ComAdd" int #func global ComRelease "ComRelease" int #func global ComAlloc "ComAlloc" int #func global ComFree "ComFree" int #func global ConvIID "ConvIID" wstr,var #endif // MOD_COMCALL_HSP
WebView2.hから、メソッドIndex値を取得
#uselib "winmm.dll" #cfunc timeGetTime "timeGetTime" #module #defcfunc WV2GetText var src, var dst, int idx, str s1, str s2 dst = "" p1 = instr(src, idx, s1) if ( p1 == -1 ){ return -1 } p1 += idx p2 = p1 + strlen(s1) p3 = instr(src, p2, s2) if ( p3 == -1 ){ return -1 } p3 += p2 + strlen(s2) dst = strmid(src, p1, p3 - p1 + 1) return p3 #defcfunc WV2GetText2 var src, var dst, int idx, str s1 dst = "" p1 = idx if ( s1 != "" ){ p1 = instr(src, idx, s1) if ( p1 == -1 ){ return -1 } p1 += idx + strlen(s1) } repeat c1 = peek(src, p1) if ( c1 == 32 || c1 == 9 || c1 == 13 || c1 == 10 ){ p1++ : continue } break loop if ( c1 == 0 ){ return -1 } p2 = p1 repeat c1 = peek(src, p2) if ( c1 == 0 || c1 == 32 || c1 == 9 || c1 == 13 || c1 == 10 ){ break } p2++ loop dst = strmid(src, p1, p2 - p1) return p2 #global dialog "概要:WebView2.hからメソッドIndex値を取得\nファイルを選択してください", 2, "確認" if ( stat != 6 ){ end } dialog "h", 16, "Header File" if ( stat == 0 ){ end } filename = refstr exist filename if ( strsize == -1 ){ end } sdim src, strsize + 1 bload filename, src, strsize dst = "----------------\nFile\n----------------\n" dst += filename + "\n\n" time = timeGetTime() dst += "----------------\nFunction\n----------------\n" p1 = 0 sdim tmp, 1024 repeat p2 = WV2GetText(src, tmp, p1, "STDAPI", ";") if ( p2 == -1 ){ break } dst += tmp + "\n" p1 = p2 await loop dst += "\n----------------\nInterface\n----------------\n" aCnt = 0 dim aIdx, 166 sdim aIid, 64, 166 sdim aIFace1, 256, 166 sdim aIFace2, 256, 166 repeat p2 = WV2GetText(src, tmp, p1, "MIDL_INTERFACE(\"", ")") if ( p2 == -1 ){ break } tmp = "\"{" + strmid(tmp, 16, strlen(tmp) - 19) + "}\"" aIid(aCnt) = tmp p2 = WV2GetText2(src, tmp, p2, "") if ( p2 == -1 ){ break } aIFace1(aCnt) = tmp p2 = WV2GetText2(src, tmp, p2, "public") if ( p2 == -1 ){ break } aIFace2(aCnt) = tmp aIdx(aCnt) = p2 aCnt++ p1 = p2 await loop repeat aCnt idx = 0 cnt1 = cnt repeat aCnt if ( aIFace1(cnt1) == aIFace2(cnt) ){ idx++ } loop if ( idx == 0 ){ idx = aIdx(cnt) } else { idx = 0 } dst += strf("%s : %s\n\t%s\n", aIFace1(cnt), aIFace2(cnt), aIid(cnt)) if ( idx ){ p1 = instr(src, idx, "BEGIN_INTERFACE") if ( p1 == -1 ){ break } p1 += idx + 15 p2 = instr(src, p1, "END_INTERFACE") p2 += p1 repeat p1 = WV2GetText(src, tmp, p1, "DECLSPEC_XFGVIRT", ")") if ( p1 == -1 || p1 > p2 ){ break } tmp = strmid(tmp, 17, strlen(tmp) - 19) dst += strf("\t%d\t%s\n", cnt, tmp) await loop } dst += "\n" await loop time = timeGetTime() - time title strf("time: %dms", time) objmode 2 : font "consolas", 15 mesbox dst, ginfo_winx, ginfo_winy, 5 dialog "結果を保存しますか?", 2, "確認" if ( stat == 6 ){ dialog "txt", 17, "テキストファイル" if ( stat == 1 ){ bsave refstr, dst, strlen(dst) } } stop
コメント ( 14 ) | Trackback ( 0 )
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 = {"ClHlwBgAqgIAIgAAAAAAAAAiAAAAAAAAbxAAAENL7ThtcFNXdldftgDZEsTeGEKC CDIxTeyRLBnbSEpMbIGd2ERgY2yCLYz1sGRkyZXe4yO1N6ayulYfLrQhO+kOdKEk UzLNpiRhE8POgkAsxqkJZoamZGC2bEM2j9rpehIDzq6b13Puk/wRstnMND92O3kz 5557zz333HPPOffc+27Vxn1EQQhRAogiIX1E+krIH/7GAdIXnUwnx2ddXNwnq7y4 uMbjDenbg4GWYFObvrnJ7w+w+i2MPsj59V6/vuyZan1bwM3kpaXNNiRkrBw48k+q oxfHkqAZahxLBfzUlcHbEr5wO53igdtait+7rQS8ZmjwNqFjBseWAj555Ryln7xy MYEvUbzO2+xBuV/W3ekgpFKmJBr7NneSdoPIF8+RpT9MdNDQSbTOjERdT5s6WpcT kpIYkzIpMGFE2l0io4N00pCkLERDsPCrgI9mE+L+OuOCA5wgZediQoq+hq1P/yVf Qbvja/jzWGYnC/jp9IRCuim9p4nYnBd0N7FNhOTMSqx9NkDGPSqW5ElsZB8GkVGy DXnoHr5YXpDxBZqlNVGF5ZM2nc735DcIu+++b/Fbz4/wDh1flRGJsd8bVoiWnorO 3/JV6rW8jF+v4ZX7xKGB+ODUB/zhm+PhEUNtb5khq7/MQGPHKXLqU+hZMdOjJ7pI jHsMutVA1kxSFgBF6YRC46xtJYBznGJmO/Txo+ZY5E6jtkxp4D9qOKsmgzPn4x1q Xh11qBvEJjWdfySj1zHS75hIzJyYAth610+s610/so6HmeeaByIxbVnVBH9mutSZ 8pTYbhCzWRgv9YvZvsn6JL8GjDM76tAAJ87UhytFkVJnWCCsOSzIWD0Wc7FQmWMl w0ZBrSJkWCX8J9hI+3ZseJHI6cBQQhYMrx/WhTt1RPtiDHqcggZE1jec1ZBWnafc QHSCW01IKxEKQUJ9d0zbfRnGCHkgqMfx4VuynoaPw8wECdtLjLCBtZFfQG+/Chuo mtAMfN0xtko4mQqtEGxN4e+g8OwD5T17oBCOzgG59eCVZcIciVnv6cHebuztpr2S QNyn+ddgQjD4F6IoCnYgdF/jSgUL5D5+NPw4YRfVCmskRdkM8EerHFbJL+ffEzM7 QJz4vqjSgyS0ifavGz4WuQ+Ft5A9bo7xVaPuaBo6st7V+OxAvDVV+BC6BsEMHjRD AyzgMA6OxJ5XmmPD3vIjVJS4Otp5E00gLFCgTW5EOycka8i5bcJlXHEPaC58BDqG s6mVKHcxQbOiE6jC9dq3R+/+8oE7S+5GuZvJBT4MPPz5L2vGd94UuRvCb5WoOM/d FPbCJKivmeqr8exDfX+CNunUREROW2xHTZ9PNcdufQBSqL9EGTs7LMpZFd+gGzZB Ub0BdRnAGUdBhcgdbfcRaEjkg/8jipPkPZPk3bIEN4jjHonc4ZZU4/4TvECPXEtG 1ElYS311LXa0wtCIyKrCooIrl2Q8OSWaLZBIZVSJYQNfNcLL1opGj30u+A4jVoPd FWDO8LmsOM8I5jtT1rrXULApavmCo7jp73B0I9wHUiAYqJxkSDRisONm7tTIOJWw BXPH5Fyvg+TwOU2SZSQjzIyRXsdYmBmHDZ+pp7t93OwYizomxEwDNE1YyZEqkByA 6THKNNpbNWF2jJgdE+Yz4MM0HbikdsPpNb8u+dkpvPBYL7HKyHvcUmE/ruWC9RKX euIZ6BxOB+rstLmrCTlzQzfnQpSOvHvZFU3LgEpjPKn6vLAdl0q4WXRxC/U0zlFz Tw4wiplZQInTuvCAGmOnzwj1eF8RlsJvcNpyZVhtiJYrhY+TLTm04lKqquXLbYoL 2ndWZvSuzVIMQSVl22iO4lPr++x8vkpjfUoTnM0/qVY8qbFeCGrCZ3Os73P/ZY41 NsT5s8Of1wqtEJGQvvTuw5h2TpXBtLxTOay0DrGgKf/uqPaNdMgDo/mxxvgxWWNc KJYGpAp1EOrDWUI2tJ1CGDYi5AtWkR+LCx3QOCaLQ34awmQQq4egiwvfT8U6RzmC Uj1V8EJl+BNgFlyYizZKI2FpwmUVzsPNp2akIVKV4ZyKkPWQSRaKXJagwJnrG+LC ITqA1Xgq0ZhKJMcFTSoStd2/S8HdSITPAdff+iyFSMGlJlzqeVU5JkahB7PCBylU MWV+DCQOSo3ZMO4Mjhu+dUzWgMp12SswZbBKbNfynBq2iSr8hYzbIiyQtFgKwf2w pAmbQk3DaT112GSkJvtofmzYGB4Qo2nIFU1z0rKGlnW03ETLzVCeV+F8MrB/Q7xV JdwgmFLUnmOYUjbKpeTRV7WRkK3FKryzcQ2HbYB2421dh1dZrvLEHBl292Rh9+MQ OCew79EzzrXCW7DZMdmzj4R3GkjH4sTWPSYbXsQ7RnhiHthdBGJj2v1n+DO4wRMM +bGv2NvCfCU1gLYLjTvLHDuBIfWDpN3Kqd1Sujo1hJuHe9mjIjTfbqb5Fu3Zt8cM oQ/cu0cM4JLq1vvFTA29I0BerFJfXNaqED7HA01pGIS190auT4hiK8Tgr5SYgjTR yB5YULS3B8sXu7E82IXlTzuw/PlOKLfuefFlinpfouggS1GknaJXfBT9xAPowN7I AUyGDmU0sh8qvVg5BJV+Oq+MyAhfMtHqjEb20d6jqMkG0ARGgDL9jqOZcHPtd7yG J2/UcVzMzIC1wAWnTrx7DdijjnFpBQuuQbb6Ii5mwrVX1+sYhxylk25GGjhO1bBo vErVg5XD2W60Yry69pQNIuBnWFg/C83fwD8OaXw2fymxRf49fF5p/Sx4C1yDvGXI W/YNeKffrzyOBUTnFgvQx3yZQRf1GXS9AI/eqK7dcBiTHmRU8y+cUUYQuXHeMZGI DVyWY9SNhxWRUj7s3OVClwK9nRFNkZJ5refZhXCpQDHCMgV6byFE+Flpc2Z76LE8 YginZWH0t85OxoG2G60ZZkaJOQZqmAd6O69Xa/+R/+zZfdHU6A5l9Bm1eSC6QcM7 rvOdN6KOsd13VzN+jncIBV4/UwF25h03C/ws4wM1IR0nxvY2XI8qYAlzHONz+qMh ZfRpdbRaw5WCmOzRJ0StPZYiI+wS++YUOWEX2tsRZdqdKQrCpgMRUCoQFYSby9t9 oHH4kixKK8MpEoGvutmaWhetmih2jHUYzQPT55Xm46smYEq+4cbdOP4BsenhS/KE DAXfMHoYDRG+IO9XeRJ3uSNIuXsG/9O03S/gPeKCUuqVT+8lanYXxTr2z80DWtlQ 1DESXT+K27tqtDWlccl563luQ0K8WhKgSAq4E9ez1vAFvURWJcmQXBRDS65ar3IP gZyTmJRA2JKz1rNcmuSykmgBjoCYMscG4DZXAlCsWggkPBCs9MzkZPFbOdKPBly8 aPDTJI+x75mlJDExUw1V2A1KQA1TeWF6WmiV119cdqTdhPnSh2WmB8sH3VgWbMbS vgnKrXsyeyhK66DowTqKVDUUZTspyq0EdGCvqsuENwRyhKVYeWSnCfel+kg3tumW 7VfFqBtk5DB2HumAVr+qHUpUvF/FJpzUr+pK1FqVddtipL+rO+EgqS3dO6KVqnFo n7kB7YxE2/Ma3rdvwI4aiIvZFjROdhEtbbQsp2UZLetoWUPLTbTcTEsnLSuhhJPV HEMLrg3baQB1bN3dqT4uJzF2FlR+ChWuRvt6A2yPifDoE0d3s0+8qgQ1udS+v4H8 PxB/VQ6LYP/sVbWSEv9WIurUtPWC1NLroJXet5e2+vZRBMfNQPy7n+k/wa8P9mbK MkI+Bfw+wAGAHoAgQC2ADWApgA7gziPSmKtLCRkHkCfaKwDnAbwL8CbARoByABbg hwmeU8D/OsCPAHqWSjR2QfJl7Jt9uPFwQ2I99n9YM27G2GJpw+LhOKNT9u3Y9dzi r15b17T5km+PeMHKgm2ohz9P/fdm9qX/gXng+CZ4sZd3ybuuLybkMTwLHpZo/wJ9 wwDND4DPAK4B/BLgVwBLF4LPALY9SMhfAMDPHomrJXmrIPteBNr3Qcbq0ppK1Bjf C+nboaHNP/2dMc+LD4AGen8AWxI10ozG5q0tcLXWS0+LeaXragx1pSuRp2cmbSPS 9sygVVC+fTNplG//DJqT8r00k0b5Dsyg1VC+Q0ndJBrlgx83kgX+Tr51QkxI42jb ENqZeNsEX5JNU/TtAR/bhs5Bf6HfEvTnnnvOvQWWTYoMSTlss6FiJZ3fNoO2kc5f Mp1WI/GVzaBJfOVA60EaVciwk0x7R85jJCXxPdk55Y98+j6fLT3ZJmhmGldLZ/jN Qn0CtEPySdpy6l+j9DybfN/VQ7sd4iJvSyj0VXGId0KqVwIn2+3zpHj/ff3L75va D8ugnqRfmcY3LwNuoRkz5Vyd1i/eT3TzsqbkiIm+ddnSdp6VgHGw2UKglQCMIvdc 6f37ED7RQ90I+FiirYd2I/AxAH6A7QCdABGAPQAvAhzKlhKGnCjAZyqSQlIhxkoD baVNPl+e2+fD+kq3myIfPn8n+hCXMRStCjIM4jXMDkRrOSa4CyvrGB/TFMIu//aK ijLCLp2y9XtQ9+C7/zTaQsizcH0gzmm0K0CDqwP1efJbsOzed/c/hrOgB1Za0xTa VsUkTEVygFIaZJpYpsIfYpv8zQz8X01xUcMpZGCbVcFAWzUb9PpbSMDHmPOp5bOJ yxVi3S52Vzvj8vq3BlxuJsQGA7tcPm+IBZ1IG9MWYqBWQFzMzmamnXV5mvxuHxO0 uJoDbW0BP6ktXbd+TU1FlcNkMVKhpIiALC/LMsE2UjxVdzFkJXGFGI9rq9cHBBcy zycgx7/V28IFGZe/KRgM7HA1BVu20xlxpLfJ531usovxb/cGA/42xg86LZ/BEfAz O72si23a4gMbGFBfppljv9RxP8yHTUKa2r25baHcHV5/bnOQzQ1yftbbxuT6TLmm XGkhbUoaaE4muDUQbEPblgaAiwmSXPlqhi3lgkHQwxkMNDOhUIWbmKZRazzgFDcQ iUIB1OpdIZZpq4EJVoZWeX0M1ohRVuYNoVYSc6V3S7ApuAtDP0R2Kyoml1ZdCc4o Bw5yUFERKmO2cC0tTNAZZEJohn9TrfdLPnE7qIe8Af8qamA4C1TVDPt7u18BaQnt A8FVEEPgg6TUx+5dITmuqgE3ev0QbEkSedqxbo2jMhFO/2+/ZK5Mfvgy+sb802Wy b+8q9N33x/zBWZcDjl5rbDY+bzxvTDHNMxlNL5hOmwZNn5g+Nc3J1+U/mO/Kb8n/ Uf7L+W/mX8z/KP8p8ybzA5Y6S9By3BK3DFo+sPzGsqwgv6C04JmCZwuaCloKQgW7 CkYL9i8/vvyj5VmFjxdWFboLWwvbC7cXdhT+ZWFP4cHCNwtPFJ4uvFx4rbC0yFnE Fv2gqLo4VNxZ/MPiHxe/XPxO8b8WDxV/WCxb8dCKzSuYFR0r/mrF3hVF1pXWCmvE utf6kvWw9W3raet/W+9aiS3ddr+t2FZiq7Y12Nptu2zdNt72D7bXbG/a+mynbOds 79ou267a/sP2a9sntjHb72wK+xz7ffZF9hx7rt1st9tX2zfYW+w77F32XvsL9r+3 /9j+iv2f7W/Y37H/3B63D9g/sEtnJj5jdBhfMx4zjhnHjcRUZ2o3bbZ0WfZYXrYc 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 )