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


HSPTV!掲示板


未解決 解決 停止 削除要請

2023
1227
ABATBelieverWebView2におけるUserAgent変更コードのC#からの翻訳6解決


ABATBeliever

リンク

2023/12/27(Wed) 21:37:09|NO.100931

WebView2コンポーネントのUserAgentを変えたいと思っています。
ここにC#の内容はあるのですが、いったいどうやったらHSPに翻訳できるのかわかりません。
C#のコード:https://web.biz-prog.net/praxis/webview/useragent.html
「mod_WebView2_10115038.hsp」:https://blog.goo.ne.jp/hiro239415/e/5041aec497e02427c2b123aef07977e3
を利用しているのですが、UAについては定義されていないようです。
コード直接でなくてもいいので、だれかお願いします



この記事に返信する


TOMATO

リンク

2023/12/28(Thu) 10:51:21|NO.100937

正攻法だと ICoreWebView2EnvironmentOptions インタフェースを定義して、
CreateCoreWebView2EnvironmentWithOptions でWebView2のインスタンス作成時に指定するのですが、
HSPの場合、実装が困難ですね。
(COMの形式(vtable)に沿った関数の実装が必要。これは外部から呼び出されるため、いわゆるコールバック関数の処理が必要。)
https://learn.microsoft.com/en-us/microsoft-edge/webview2/reference/win32/icorewebview2environmentoptions?view=webview2-1.0.2210.55

とまぁ面倒くささの極みなので、以下の環境変数の方法でお茶を濁します。


#include "mod_WebView2_10115038.hsp" SetEnvironmentVariable "WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS", "--user-agent=Test" 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://www.cman.jp/network/support/go_access.cgi" onexit *ONEXIT_ stop *ONEXIT_ WebView2_Release pView WebView2_Release pCtrl WebView2_Release pEnv end



ABATBeliever

リンク

2023/12/28(Thu) 17:43:45|NO.100940

無知ですいません
これはMicrosoftEdgeや、他のWebView2アプリに影響してしまいますか?



TOMATO

リンク

2023/12/28(Thu) 19:00:59|NO.100941

>これはMicrosoftEdgeや、他のWebView2アプリに影響してしまいますか?
SetEnvironmentVariable関数は、自身のプロセスの環境変数にしか影響を与えないので
問題ないかと。
https://learn.microsoft.com/ja-jp/windows/win32/api/winbase/nf-winbase-setenvironmentvariable



ABATBeliever

リンク

2023/12/28(Thu) 20:06:31|NO.100943

いけました
本当にありがとうございます
同名プロセスやMicrosoftEdgeには影響しないことを確認しました。



MIZUSHIKI

リンク

2023/12/28(Thu) 20:42:27|NO.100944

解決済みなのに横からすみません。

リンク先にあるC#のコードに習うとこんな感じになるのかなと思います。
注意点としては、TOMATOさんのと違いタブブラウザの場合タブ毎に設定してあげる必要がありそうです。

// 要WebView2Loader.dll #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) sdim ua, 256 cnvstow ua, "yu-za-e-jento" ; Unicode文字列に変換 ret = CCall2(pView, 3, 1, varptr(pSettings)) ; 3=get_Settings (IWebView2Settings取得) ret = CCall2(pSettings, 22, 1, varptr(ua)) ; 22=put_UserAgent WebView2_Release pSettings ; 取得したCOMが使い終わったのでreleaseしてしまう WebView2_Navigate pView, "https://www.baka-ke.com/lab/useragent.php" // タブブラウザの場合、ユーザーエージェントはタブ毎。(面倒くさいので2窓) /* screen 1, 640,480 pCtrl2 = WebView2_CreateCtrl(pEnv, hwnd) WebView2_Size pCtrl2, 0, 0, ginfo_winx, ginfo_winy pView2 = WebView2_GetView(pCtrl2) WebView2_Navigate pView2, "https://www.baka-ke.com/lab/useragent.php" */ onexit *ONEXIT_ stop *ONEXIT_ WebView2_Release pView WebView2_Release pCtrl /* WebView2_Release pView2 WebView2_Release pCtrl2 */ WebView2_Release pEnv end
「webView2.CoreWebView2.Settings.UserAgent = 」のイメージとしては、
WebView2_CreateCtrl で webView2 が出来て、
WebView2_GetView(内部でget_CoreWebView2[=25]) が .CoreWebView2
get_Settings[=3] が .Settings
put_UserAgent[=22] が .UserAgent =
みたいな感じかと思います。

それぞれ数値(メソッドIndex値)で指定してあげないといけないのですが、WebView2.hを見て出てくる順番を数える必要があります。
この数値はHiroさんが作ってくださった「WebView2.hから、メソッドIndex値を取得」スクリプトで調べることが出来ます。
https://blog.goo.ne.jp/hiro239415/e/aea2df33cd810488bbe7ca48d84656d1

また、以下の「mod_wv2s.hspのComCallが少し使いやすくなる(?)」モジュールからも簡易的に見つけられるかもしれません。
57行目 #deffunc init@plus_wv2ccall 下の配列群のインデックスに +3 したものがメソッドIndex値になります。
(必ず先頭にQueryInterface,AddRef,Releaseの3つが付くのですが省いてあります。)
https://github.com/MIZUSHIKI/HSP-Module/blob/master/plus_wv2ccall.hsp



ABATBeliever

リンク

2023/12/28(Thu) 21:12:23|NO.100945

解決後なのに有難うございます
systabcontrolを活用したタブブラウザなのですが、タブごとに変更できました!



記事削除

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

NO.100931への返信

マスコット

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

名前

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

削除用パスワード

解決したら質問者本人がここをチェックしてください。

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

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