<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>VBForums - CodeBank - Visual Basic 6 and earlier</title>
		<link>https://www.vbforums.com/</link>
		<description>Find cool or practical code examples using Visual Basic.</description>
		<language>en</language>
		<lastBuildDate>Sun, 19 Jul 2026 03:32:00 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>60</ttl>
		<image>
			<url>https://www.vbforums.com/images/misc/rss.png</url>
			<title>VBForums - CodeBank - Visual Basic 6 and earlier</title>
			<link>https://www.vbforums.com/</link>
		</image>
		<item>
			<title><![CDATA[[VB6/TB] TC6 (TwinClient 6) — SQLite for VB6 and TwinBasic]]></title>
			<link>https://www.vbforums.com/showthread.php?912145-VB6-TB-TC6-(TwinClient-6)-—-SQLite-for-VB6-and-TwinBasic&amp;goto=newpost</link>
			<pubDate>Wed, 15 Jul 2026 16:40:29 GMT</pubDate>
			<description><![CDATA[*TC6SQLite* (https://github.com/wqweto/TC6/releases) is another "em dash repo" namely Claude's reimplementation of the SQLite subsystem of RC6 as a single Ax-DLL.

Note that TB's x64 port is not ready i.e. still uses winsqlite3.dll and does not embed sqlite in final Ax-DLL.

cheers,
</wqw>]]></description>
			<content:encoded><![CDATA[<div><a rel="nofollow" href="https://github.com/wqweto/TC6/releases" target="_blank" rel="nofollow"><b>TC6SQLite</b></a> is another &quot;em dash repo&quot; namely Claude's reimplementation of the SQLite subsystem of RC6 as a single Ax-DLL.<br />
<br />
Note that TB's x64 port is not ready i.e. still uses winsqlite3.dll and does not embed sqlite in final Ax-DLL.<br />
<br />
cheers,<br />
&lt;/wqw&gt;</div>

]]></content:encoded>
			<category domain="https://www.vbforums.com/forumdisplay.php?43-CodeBank-Visual-Basic-6-and-earlier">CodeBank - Visual Basic 6 and earlier</category>
			<dc:creator>wqweto</dc:creator>
			<guid isPermaLink="true">https://www.vbforums.com/showthread.php?912145-VB6-TB-TC6-(TwinClient-6)-—-SQLite-for-VB6-and-TwinBasic</guid>
		</item>
		<item>
			<title><![CDATA[[VB6] FlexGrid to XLSX (and CSV/PDF) Exporter — no Excel installation required]]></title>
			<link>https://www.vbforums.com/showthread.php?912140-VB6-FlexGrid-to-XLSX-(and-CSV-PDF)-Exporter-—-no-Excel-installation-required&amp;goto=newpost</link>
			<pubDate>Sat, 11 Jul 2026 22:13:00 GMT</pubDate>
			<description><![CDATA[Download from GitHub (https://github.com/EduardoVB/FlexGrid-Exporter).

This code was made mainly by Claude Sonnet v4.6 and v5.0, but also with some collaboration from Gemini, ChatGPT, DeepSeek and off course from me.
It exports any FlexGrid-family control directly to a real .xlsx file**, without going through Excel automation and without any third-party XLSX library. It writes the OOXML (zip + XML) format directly.
For the zip compression it uses wqweto's cZipArchive.cls class (https://github.com/wqweto/ZipArchive/).
Optionally, it can also output PDF files. For that feature to work, it needs BSPrinter ocx accessible for the project (whether registered or through SxS). When it is available the user will see the PDF option in th save dialog.

*Supported grids*


*     MSFlexGrid
*     MSHFlexGrid
*     VSFlexGrid
*     VBFlexGrid
*     (should work with any other API-compatible FlexGrid variant — it only relies on the standard TextMatrix/CellFontAttributes-style properties that all of these share)


*What gets exported to XLSX*


*     Cell values with correct types (text, numbers, dates/times using Excel's native date system)
*     Fonts, colors, bold/italic/underline, per-cell alignment (including vertical)
*     Cell borders (from the grid's own GridLines/GridLinesFixed settings)
*     WrapText (from the grid's WordWrap property or embedded line breaks)
*     Row heights / column widths matched from the grid
*     Frozen panes (matching the grid's fixed rows/columns), optional.
*     AutoFilter, optional.
*     Merged cells — detected from the grid's own MergeCells/MergeRow/MergeCol state,


including simultaneous row+column merging
    Embedded pictures (CellPicture), with correct anchoring for every CellPictureAlignment value (Stretch, and all 9 combinations of Left/Center/Right × Top/Center/Bottom), so images resize/reposition correctly if the user later resizes rows or columns in Excel

*Optional extras*


*     CSV export, with proper UTF-8 + BOM handling and locale-aware separators
*     PDF export, but only if the optional BSPrinter30.ocx (BSPrinter component) is registered on the machine — the exporter detects this at runtime and only offers the PDF option if it's available. No PDF dependency is required otherwise.


*Under the hood*


*     No dependency on Microsoft Excel being installed — it writes the .xlsx zip/XML structure directly.
*     No typelib required.
*     Pure VB6, no ActiveX Data Objects required for the export itself.



Actual grid:

Attachment 196259 (https://www.vbforums.com/attachment.php?attachmentid=196259)


Excel export:

Attachment 196260 (https://www.vbforums.com/attachment.php?attachmentid=196260)


PDF export:

Attachment 196261 (https://www.vbforums.com/attachment.php?attachmentid=196261)

Download from GitHub (https://github.com/EduardoVB/FlexGrid-Exporter).]]></description>
			<content:encoded><![CDATA[<div><a rel="nofollow" href="https://github.com/EduardoVB/FlexGrid-Exporter" target="_blank" rel="nofollow">Download from GitHub</a>.<br />
<br />
This code was made mainly by Claude Sonnet v4.6 and v5.0, but also with some collaboration from Gemini, ChatGPT, DeepSeek and off course from me.<br />
It exports any FlexGrid-family control directly to a real .xlsx file**, without going through Excel automation and without any third-party XLSX library. It writes the OOXML (zip + XML) format directly.<br />
For the zip compression it uses <a rel="nofollow" href="https://github.com/wqweto/ZipArchive/" target="_blank" rel="nofollow">wqweto's cZipArchive.cls class</a>.<br />
Optionally, it can also output PDF files. For that feature to work, it needs BSPrinter ocx accessible for the project (whether registered or through SxS). When it is available the user will see the PDF option in th save dialog.<br />
<br />
<b>Supported grids</b><br />
<br />
<ul><li style="">    MSFlexGrid</li><li style="">    MSHFlexGrid</li><li style="">    VSFlexGrid</li><li style="">    VBFlexGrid</li><li style="">    (should work with any other API-compatible FlexGrid variant — it only relies on the standard TextMatrix/CellFontAttributes-style properties that all of these share)</li></ul><br />
<b>What gets exported to XLSX</b><br />
<br />
<ul><li style="">    Cell values with correct types (text, numbers, dates/times using Excel's native date system)</li><li style="">    Fonts, colors, bold/italic/underline, per-cell alignment (including vertical)</li><li style="">    Cell borders (from the grid's own GridLines/GridLinesFixed settings)</li><li style="">    WrapText (from the grid's WordWrap property or embedded line breaks)</li><li style="">    Row heights / column widths matched from the grid</li><li style="">    Frozen panes (matching the grid's fixed rows/columns), optional.</li><li style="">    AutoFilter, optional.</li><li style="">    Merged cells — detected from the grid's own MergeCells/MergeRow/MergeCol state, </li></ul><br />
including simultaneous row+column merging<br />
    Embedded pictures (CellPicture), with correct anchoring for every CellPictureAlignment value (Stretch, and all 9 combinations of Left/Center/Right × Top/Center/Bottom), so images resize/reposition correctly if the user later resizes rows or columns in Excel<br />
<br />
<b>Optional extras</b><br />
<br />
<ul><li style="">    CSV export, with proper UTF-8 + BOM handling and locale-aware separators</li><li style="">    PDF export, but only if the optional BSPrinter30.ocx (BSPrinter component) is registered on the machine — the exporter detects this at runtime and only offers the PDF option if it's available. No PDF dependency is required otherwise.</li></ul><br />
<b>Under the hood</b><br />
<br />
<ul><li style="">    No dependency on Microsoft Excel being installed — it writes the .xlsx zip/XML structure directly.</li><li style="">    No typelib required.</li><li style="">    Pure VB6, no ActiveX Data Objects required for the export itself.</li></ul><br />
<br />
Actual grid:<br />
<br />
<img src="https://www.vbforums.com/attachment.php?attachmentid=196259&amp;d=1783807776" border="0" alt="Name:  Original-Flex-Grid.jpg
Views: 122
Size:  56.7 KB"  style="float: CONFIG" /><br />
<br />
<br />
Excel export:<br />
<br />
<img src="https://www.vbforums.com/attachment.php?attachmentid=196260&amp;d=1783807848" border="0" alt="Name:  Excel-export.jpg
Views: 98
Size:  44.2 KB"  style="float: CONFIG" /><br />
<br />
<br />
PDF export:<br />
<br />
<img src="https://www.vbforums.com/attachment.php?attachmentid=196261&amp;d=1783807906" border="0" alt="Name:  PDF-Export.jpg
Views: 94
Size:  28.7 KB"  style="float: CONFIG" /><br />
<br />
<a rel="nofollow" href="https://github.com/EduardoVB/FlexGrid-Exporter" target="_blank" rel="nofollow">Download from GitHub</a>.</div>


	<div style="padding:10px">

	

	
		<fieldset class="fieldset">
			<legend>Attached Images</legend>
				<div style="padding:10px">
				<img class="attach" src="https://www.vbforums.com/attachment.php?attachmentid=196259&amp;stc=1&amp;d=1783807776" alt="" />&nbsp;<img class="attach" src="https://www.vbforums.com/attachment.php?attachmentid=196260&amp;stc=1&amp;d=1783807848" alt="" />&nbsp;<img class="attach" src="https://www.vbforums.com/attachment.php?attachmentid=196261&amp;stc=1&amp;d=1783807906" alt="" />&nbsp;
			</div>
		</fieldset>
	

	

	

	</div>
]]></content:encoded>
			<category domain="https://www.vbforums.com/forumdisplay.php?43-CodeBank-Visual-Basic-6-and-earlier">CodeBank - Visual Basic 6 and earlier</category>
			<dc:creator>Eduardo-</dc:creator>
			<guid isPermaLink="true">https://www.vbforums.com/showthread.php?912140-VB6-FlexGrid-to-XLSX-(and-CSV-PDF)-Exporter-—-no-Excel-installation-required</guid>
		</item>
		<item>
			<title><![CDATA[[VB6] czWebview — Full-Featured WebView2 UserControl (No OCX, No Registration)]]></title>
			<link>https://www.vbforums.com/showthread.php?912139-VB6-czWebview-—-Full-Featured-WebView2-UserControl-(No-OCX-No-Registration)&amp;goto=newpost</link>
			<pubDate>Sat, 11 Jul 2026 09:06:55 GMT</pubDate>
			<description><![CDATA[*czWebview — Full-Featured WebView2 UserControl for VB6*

Embed modern web content (HTML5, CSS3, ES6+) in your VB6 applications using the Microsoft Edge WebView2 Runtime. Zero external dependencies beyond a single DLL, no OCX registration required — just add the source files to your project and go.

GitHub Repository (https://github.com/cyberzilla/czWebview)  •  MIT License

*Why another WebView2 control?*

Existing solutions for embedding a modern browser in VB6 are either commercial, require OCX registration, or don't expose enough of the WebView2 API. czWebview takes a different approach:


*  *Pure source-code embed* — just add one .ctl, one .cls, and one .tlb to your project. No registration, no installer headaches.
*  *Complete API surface* — 44 callback interfaces, 29 events, 34 public methods, and 48 properties. This matches (and is inspired by) wqweto's excellent cWebView2 class.
*  *Synchronous & Asynchronous* — Execute JavaScript and get results synchronously via a message pump, or go fully async with event-based callbacks.
*  *Bidirectional JavaScript Bridge* — PostWebMessage / chrome.webview.postMessage for clean VB6 ? JS communication.
*  *Host Objects* — Expose your VB6 COM objects directly to JavaScript.



*Feature Highlights*


*  *Navigation* — Navigate, GoBack, GoForward, Reload, Stop, NavigateToString (render HTML directly), synchronous NavigateSync
*  *JavaScript Execution* — ExecuteScript (sync with JSON result), ExecuteScriptAsync, AddScriptToExecuteOnDocumentCreated
*  *Print & Capture* — PrintToPdf, ShowPrintUI (browser or system dialog), CapturePreview (screenshot as PNG/JPG byte array)
*  *Cookie Management* — GetCookies, AddOrUpdateCookie, DeleteCookies, DeleteAllCookies
*  *Downloads* — DownloadStarting event with custom file path support
*  *DevTools Protocol* — CallDevToolsProtocolMethod for direct CDP calls (device emulation, network throttling, etc.)
*  *Resource Filtering* — AddWebResourceRequestedFilter + WebResourceRequested event for ad-blocking, request interception, etc.
*  *Virtual Host Mapping* — Serve local files via SetVirtualHostNameToFolderMapping (e.g., map "app.local" ? App.Path & "\www")
*  *Authentication* — BasicAuthenticationRequested event
*  *Permissions* — PermissionRequested event (camera, mic, geolocation, etc.)
*  *Script Dialogs* — ScriptDialogOpening event (intercept alert/confirm/prompt)
*  *Memory Management* — TrySuspend / ResumeFromSuspend for background tabs
*  *Browsing Data* — ClearBrowsingData (cache, cookies, history, passwords, and more)
*  *UI Control* — Mute/unmute audio, zoom control, user agent customization, status bar, full-screen detection, context menu events



*Requirements*


*  VB6 IDE (SP6 recommended)
*  WebView2 Runtime — pre-installed on Windows 10 (1803+) and Windows 11
*  WebView2Loader.dll — included in the repository (~115 KB, x86)
*  czWebview.tlb — pre-compiled and included, or rebuild with the included compile_tlb.bat (requires Windows SDK / MIDL)



*Quick Start*

*1. Add to your project:*

Code:
---------
Project ? Add User Control ? Existing ? select src\czWebview.ctl
Project ? Add Class Module ? Existing ? select src\czWebviewCallback.cls
Project ? References ? Browse ? select typelib\czWebview.tlb
Place WebView2Loader.dll next to your .exe (or in App.Path)
---------
*2. Handle events:*
[CODE=vb6]
Private Sub czWebview1_InitComplete(ByVal Success As Boolean, ByVal ErrorCode As Long)
    If Success Then
        czWebview1.Navigate "https://www.google.com"
    Else
        MsgBox "WebView2 init failed: &H" & Hex$(ErrorCode), vbCritical
    End If
End Sub

Private Sub czWebview1_TitleChanged(ByVal Title As String)
    Me.Caption = Title
End Sub

Private Sub czWebview1_NavigationCompleted(ByVal IsSuccess As Boolean, ByVal WebErrorStatus As Long)
    lblStatus.Caption = IIf(IsSuccess, "Done", "Error: " & WebErrorStatus)
End Sub

Private Sub czWebview1_WebMessageReceived(ByVal Message As String, ByVal IsJSON As Boolean)
    Debug.Print "From JS: " & Message
End Sub
[/CODE]

*3. JavaScript Bridge:*
[CODE=vb6]
' VB6 ? JavaScript
Dim result As String
result = czWebview1.ExecuteScript("document.title")
' result = """My Page Title"""

' Send message to page
czWebview1.PostWebMessageAsString "Hello from VB6!"
czWebview1.PostWebMessageAsJSON "{""action"":""update"",""value"":42}"
[/CODE]

[CODE=javascript]
// JavaScript ? VB6
chrome.webview.postMessage("Hello from JavaScript!");

// Listen for messages from VB6
chrome.webview.addEventListener('message', function(e) {
    console.log('From VB6:', e.data);
});
[/CODE]

*More Examples*

*Screenshot to file:*
[CODE=vb6]
Dim baPng() As Byte
baPng = czWebview1.CapturePreview(czCaptureAs_PNG)
Open "screenshot.png" For Binary As #1
Put #1, , baPng
Close #1
[/CODE]

*Save page as PDF:*
[CODE=vb6]
If czWebview1.PrintToPdf("C:\output\page.pdf") Then
    MsgBox "PDF saved!"
End If
[/CODE]

*Cookie management:*
[CODE=vb6]
' Add a cookie
czWebview1.AddOrUpdateCookie "session", "abc123", ".example.com", "/", , True, True

' Get all cookies for a URL
Dim cCookies As Collection
Set cCookies = czWebview1.GetCookies("https://example.com")
Dim cItem As Collection
For Each cItem In cCookies
    Debug.Print cItem("Name") & " = " & cItem("Value")
Next

' Clear all cookies
czWebview1.DeleteAllCookies
[/CODE]

*Block specific URLs (ad-blocking, etc.):*
[CODE=vb6]
Private Sub Form_Load()
    czWebview1.AddWebResourceRequestedFilter "*.ads.example.com/*"
End Sub

Private Sub czWebview1_WebResourceRequested(ByVal URI As String, _
    ByVal ResourceContext As czWebView2ResourceFilter, _
    Permit As czWebView2PermissionState)
    Permit = czPERMISSION_STATE_DENY
End Sub
[/CODE]

*Serve local files via virtual hostname:*
[CODE=vb6]
czWebview1.SetVirtualHostNameToFolderMapping "app.local", App.Path & "\www", czHostResourceAccess_ALLOW
czWebview1.Navigate "https://app.local/index.html"
[/CODE]

*DevTools Protocol — Emulate mobile device:*
[CODE=vb6]
Dim sResult As String
sResult = czWebview1.CallDevToolsProtocolMethod("Emulation.setDeviceMetricsOverride", _
    "{""width"":375,""height"":812,""deviceScaleFactor"":3,""mobile"":true}")
[/CODE]

*Project Structure*


Code:
---------
czWebview/
??? src/
?   ??? czWebview.ctl               ' Main UserControl — public API
?   ??? czWebviewCallback.cls       ' Internal callback handler (44 interfaces)
??? typelib/
?   ??? czWebview.odl               ' Interface definitions (ODL source)
?   ??? czWebview.tlb               ' Compiled type library
?   ??? compile_tlb.bat             ' Auto-compile script (uses MIDL)
??? External/
?   ??? WebView2Loader.dll          ' Microsoft x86 loader (~115 KB)
??? demo/
?   ??? SimpleTest/                 ' Simple browser demo
?   ??? WhatsappBot/                ' WhatsApp Web bot demo
??? README.md
---------
*Included Demos*


1.  *SimpleTest* — A minimal browser with navigation (back, forward, reload, address bar). Good starting point to see how the control works.
2.  *WhatsappBot* — A practical demo showing WhatsApp Web automation via JavaScript bridge. Demonstrates real-world usage of ExecuteScript, WebMessageReceived, and DOM interaction.



*Architecture Notes*

The control is split into two files for clean separation of concerns:


*  *czWebview.ctl* (~1,650 lines) — The public-facing UserControl. Contains all properties, methods, events, and the synchronous message pump (SpinThreadMessagePump) that enables blocking calls while still allowing COM callbacks to arrive.
*  *czWebviewCallback.cls* — Implements all 44 COM callback interfaces required by the WebView2 API. Events are forwarded to the UserControl via Friend subs.



This design keeps the callback plumbing out of your face — you only interact with the clean .ctl API surface.

*Credits*


*  Interface patterns inspired by cWebView2 (https://github.com/wqweto/cWebView2) by wqweto
*  WebView2 Runtime by Microsoft



*License*

MIT — use it, modify it, ship it. No restrictions.

Source code and full documentation on GitHub: https://github.com/cyberzilla/czWebview

Feedback, bug reports, and contributions are welcome! :cool:]]></description>
			<content:encoded><![CDATA[<div><b><font size="4">czWebview — Full-Featured WebView2 UserControl for VB6</font></b><br />
<br />
Embed modern web content (HTML5, CSS3, ES6+) in your VB6 applications using the Microsoft Edge WebView2 Runtime. Zero external dependencies beyond a single DLL, no OCX registration required — just add the source files to your project and go.<br />
<br />
<a rel="nofollow" href="https://github.com/cyberzilla/czWebview" target="_blank" rel="nofollow">GitHub Repository</a>  •  MIT License<br />
<br />
<b><font size="3">Why another WebView2 control?</font></b><br />
<br />
Existing solutions for embedding a modern browser in VB6 are either commercial, require OCX registration, or don't expose enough of the WebView2 API. czWebview takes a different approach:<br />
<br />
<ul><li style=""> <b>Pure source-code embed</b> — just add one .ctl, one .cls, and one .tlb to your project. No registration, no installer headaches.</li><li style=""> <b>Complete API surface</b> — 44 callback interfaces, 29 events, 34 public methods, and 48 properties. This matches (and is inspired by) wqweto's excellent cWebView2 class.</li><li style=""> <b>Synchronous &amp; Asynchronous</b> — Execute JavaScript and get results synchronously via a message pump, or go fully async with event-based callbacks.</li><li style=""> <b>Bidirectional JavaScript Bridge</b> — PostWebMessage / chrome.webview.postMessage for clean VB6 ? JS communication.</li><li style=""> <b>Host Objects</b> — Expose your VB6 COM objects directly to JavaScript.</li></ul><br />
<br />
<b><font size="3">Feature Highlights</font></b><br />
<br />
<ul><li style=""> <b>Navigation</b> — Navigate, GoBack, GoForward, Reload, Stop, NavigateToString (render HTML directly), synchronous NavigateSync</li><li style=""> <b>JavaScript Execution</b> — ExecuteScript (sync with JSON result), ExecuteScriptAsync, AddScriptToExecuteOnDocumentCreated</li><li style=""> <b>Print &amp; Capture</b> — PrintToPdf, ShowPrintUI (browser or system dialog), CapturePreview (screenshot as PNG/JPG byte array)</li><li style=""> <b>Cookie Management</b> — GetCookies, AddOrUpdateCookie, DeleteCookies, DeleteAllCookies</li><li style=""> <b>Downloads</b> — DownloadStarting event with custom file path support</li><li style=""> <b>DevTools Protocol</b> — CallDevToolsProtocolMethod for direct CDP calls (device emulation, network throttling, etc.)</li><li style=""> <b>Resource Filtering</b> — AddWebResourceRequestedFilter + WebResourceRequested event for ad-blocking, request interception, etc.</li><li style=""> <b>Virtual Host Mapping</b> — Serve local files via SetVirtualHostNameToFolderMapping (e.g., map &quot;app.local&quot; ? App.Path &amp; &quot;\www&quot;)</li><li style=""> <b>Authentication</b> — BasicAuthenticationRequested event</li><li style=""> <b>Permissions</b> — PermissionRequested event (camera, mic, geolocation, etc.)</li><li style=""> <b>Script Dialogs</b> — ScriptDialogOpening event (intercept alert/confirm/prompt)</li><li style=""> <b>Memory Management</b> — TrySuspend / ResumeFromSuspend for background tabs</li><li style=""> <b>Browsing Data</b> — ClearBrowsingData (cache, cookies, history, passwords, and more)</li><li style=""> <b>UI Control</b> — Mute/unmute audio, zoom control, user agent customization, status bar, full-screen detection, context menu events</li></ul><br />
<br />
<b><font size="3">Requirements</font></b><br />
<br />
<ul><li style=""> VB6 IDE (SP6 recommended)</li><li style=""> WebView2 Runtime — pre-installed on Windows 10 (1803+) and Windows 11</li><li style=""> WebView2Loader.dll — included in the repository (~115 KB, x86)</li><li style=""> czWebview.tlb — pre-compiled and included, or rebuild with the included compile_tlb.bat (requires Windows SDK / MIDL)</li></ul><br />
<br />
<b><font size="3">Quick Start</font></b><br />
<br />
<b>1. Add to your project:</b><br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">Project ? Add User Control ? Existing ? select src\czWebview.ctl<br />
Project ? Add Class Module ? Existing ? select src\czWebviewCallback.cls<br />
Project ? References ? Browse ? select typelib\czWebview.tlb<br />
Place WebView2Loader.dll next to your .exe (or in App.Path)</code><hr />
</div><b>2. Handle events:</b><br />
[CODE=vb6]<br />
Private Sub czWebview1_InitComplete(ByVal Success As Boolean, ByVal ErrorCode As Long)<br />
    If Success Then<br />
        czWebview1.Navigate &quot;https://www.google.com&quot;<br />
    Else<br />
        MsgBox &quot;WebView2 init failed: &amp;H&quot; &amp; Hex$(ErrorCode), vbCritical<br />
    End If<br />
End Sub<br />
<br />
Private Sub czWebview1_TitleChanged(ByVal Title As String)<br />
    Me.Caption = Title<br />
End Sub<br />
<br />
Private Sub czWebview1_NavigationCompleted(ByVal IsSuccess As Boolean, ByVal WebErrorStatus As Long)<br />
    lblStatus.Caption = IIf(IsSuccess, &quot;Done&quot;, &quot;Error: &quot; &amp; WebErrorStatus)<br />
End Sub<br />
<br />
Private Sub czWebview1_WebMessageReceived(ByVal Message As String, ByVal IsJSON As Boolean)<br />
    Debug.Print &quot;From JS: &quot; &amp; Message<br />
End Sub<br />
[/CODE]<br />
<br />
<b>3. JavaScript Bridge:</b><br />
[CODE=vb6]<br />
' VB6 ? JavaScript<br />
Dim result As String<br />
result = czWebview1.ExecuteScript(&quot;document.title&quot;)<br />
' result = &quot;&quot;&quot;My Page Title&quot;&quot;&quot;<br />
<br />
' Send message to page<br />
czWebview1.PostWebMessageAsString &quot;Hello from VB6!&quot;<br />
czWebview1.PostWebMessageAsJSON &quot;{&quot;&quot;action&quot;&quot;:&quot;&quot;update&quot;&quot;,&quot;&quot;value&quot;&quot;:42}&quot;<br />
[/CODE]<br />
<br />
[CODE=javascript]<br />
// JavaScript ? VB6<br />
chrome.webview.postMessage(&quot;Hello from JavaScript!&quot;);<br />
<br />
// Listen for messages from VB6<br />
chrome.webview.addEventListener('message', function(e) {<br />
    console.log('From VB6:', e.data);<br />
});<br />
[/CODE]<br />
<br />
<b><font size="3">More Examples</font></b><br />
<br />
<b>Screenshot to file:</b><br />
[CODE=vb6]<br />
Dim baPng() As Byte<br />
baPng = czWebview1.CapturePreview(czCaptureAs_PNG)<br />
Open &quot;screenshot.png&quot; For Binary As #1<br />
Put #1, , baPng<br />
Close #1<br />
[/CODE]<br />
<br />
<b>Save page as PDF:</b><br />
[CODE=vb6]<br />
If czWebview1.PrintToPdf(&quot;C:\output\page.pdf&quot;) Then<br />
    MsgBox &quot;PDF saved!&quot;<br />
End If<br />
[/CODE]<br />
<br />
<b>Cookie management:</b><br />
[CODE=vb6]<br />
' Add a cookie<br />
czWebview1.AddOrUpdateCookie &quot;session&quot;, &quot;abc123&quot;, &quot;.example.com&quot;, &quot;/&quot;, , True, True<br />
<br />
' Get all cookies for a URL<br />
Dim cCookies As Collection<br />
Set cCookies = czWebview1.GetCookies(&quot;https://example.com&quot;)<br />
Dim cItem As Collection<br />
For Each cItem In cCookies<br />
    Debug.Print cItem(&quot;Name&quot;) &amp; &quot; = &quot; &amp; cItem(&quot;Value&quot;)<br />
Next<br />
<br />
' Clear all cookies<br />
czWebview1.DeleteAllCookies<br />
[/CODE]<br />
<br />
<b>Block specific URLs (ad-blocking, etc.):</b><br />
[CODE=vb6]<br />
Private Sub Form_Load()<br />
    czWebview1.AddWebResourceRequestedFilter &quot;*.ads.example.com/*&quot;<br />
End Sub<br />
<br />
Private Sub czWebview1_WebResourceRequested(ByVal URI As String, _<br />
    ByVal ResourceContext As czWebView2ResourceFilter, _<br />
    Permit As czWebView2PermissionState)<br />
    Permit = czPERMISSION_STATE_DENY<br />
End Sub<br />
[/CODE]<br />
<br />
<b>Serve local files via virtual hostname:</b><br />
[CODE=vb6]<br />
czWebview1.SetVirtualHostNameToFolderMapping &quot;app.local&quot;, App.Path &amp; &quot;\www&quot;, czHostResourceAccess_ALLOW<br />
czWebview1.Navigate &quot;https://app.local/index.html&quot;<br />
[/CODE]<br />
<br />
<b>DevTools Protocol — Emulate mobile device:</b><br />
[CODE=vb6]<br />
Dim sResult As String<br />
sResult = czWebview1.CallDevToolsProtocolMethod(&quot;Emulation.setDeviceMetricsOverride&quot;, _<br />
    &quot;{&quot;&quot;width&quot;&quot;:375,&quot;&quot;height&quot;&quot;:812,&quot;&quot;deviceScaleFactor&quot;&quot;:3,&quot;&quot;mobile&quot;&quot;:true}&quot;)<br />
[/CODE]<br />
<br />
<b><font size="3">Project Structure</font></b><br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">czWebview/<br />
??? src/<br />
?&nbsp;  ??? czWebview.ctl&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  ' Main UserControl — public API<br />
?&nbsp;  ??? czWebviewCallback.cls&nbsp; &nbsp; &nbsp;  ' Internal callback handler (44 interfaces)<br />
??? typelib/<br />
?&nbsp;  ??? czWebview.odl&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  ' Interface definitions (ODL source)<br />
?&nbsp;  ??? czWebview.tlb&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  ' Compiled type library<br />
?&nbsp;  ??? compile_tlb.bat&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  ' Auto-compile script (uses MIDL)<br />
??? External/<br />
?&nbsp;  ??? WebView2Loader.dll&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ' Microsoft x86 loader (~115 KB)<br />
??? demo/<br />
?&nbsp;  ??? SimpleTest/&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  ' Simple browser demo<br />
?&nbsp;  ??? WhatsappBot/&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ' WhatsApp Web bot demo<br />
??? README.md</code><hr />
</div><b><font size="3">Included Demos</font></b><br />
<br />
<ol class="decimal"><li style=""> <b>SimpleTest</b> — A minimal browser with navigation (back, forward, reload, address bar). Good starting point to see how the control works.</li><li style=""> <b>WhatsappBot</b> — A practical demo showing WhatsApp Web automation via JavaScript bridge. Demonstrates real-world usage of ExecuteScript, WebMessageReceived, and DOM interaction.</li></ol><br />
<br />
<b><font size="3">Architecture Notes</font></b><br />
<br />
The control is split into two files for clean separation of concerns:<br />
<br />
<ul><li style=""> <b>czWebview.ctl</b> (~1,650 lines) — The public-facing UserControl. Contains all properties, methods, events, and the synchronous message pump (SpinThreadMessagePump) that enables blocking calls while still allowing COM callbacks to arrive.</li><li style=""> <b>czWebviewCallback.cls</b> — Implements all 44 COM callback interfaces required by the WebView2 API. Events are forwarded to the UserControl via Friend subs.</li></ul><br />
<br />
This design keeps the callback plumbing out of your face — you only interact with the clean .ctl API surface.<br />
<br />
<b><font size="3">Credits</font></b><br />
<br />
<ul><li style=""> Interface patterns inspired by <a rel="nofollow" href="https://github.com/wqweto/cWebView2" target="_blank" rel="nofollow">cWebView2</a> by wqweto</li><li style=""> WebView2 Runtime by Microsoft</li></ul><br />
<br />
<b><font size="3">License</font></b><br />
<br />
MIT — use it, modify it, ship it. No restrictions.<br />
<br />
Source code and full documentation on GitHub: <a rel="nofollow" href="https://github.com/cyberzilla/czWebview" target="_blank" rel="nofollow">https://github.com/cyberzilla/czWebview</a><br />
<br />
Feedback, bug reports, and contributions are welcome! :cool:</div>

]]></content:encoded>
			<category domain="https://www.vbforums.com/forumdisplay.php?43-CodeBank-Visual-Basic-6-and-earlier">CodeBank - Visual Basic 6 and earlier</category>
			<dc:creator>cyberzilla</dc:creator>
			<guid isPermaLink="true">https://www.vbforums.com/showthread.php?912139-VB6-czWebview-—-Full-Featured-WebView2-UserControl-(No-OCX-No-Registration)</guid>
		</item>
		<item>
			<title><![CDATA[[VB6] cWebView2 — RC6-compatible WebView2 wrapper]]></title>
			<link>https://www.vbforums.com/showthread.php?912128-VB6-cWebView2-—-RC6-compatible-WebView2-wrapper&amp;goto=newpost</link>
			<pubDate>Tue, 07 Jul 2026 11:40:58 GMT</pubDate>
			<description><![CDATA[*This* (https://github.com/wqweto/cWebView2/releases) is a drop-in replacement of vbRichClient6's *cWebView2* class, implemented in pure VB6 directly against the official Microsoft WebView2 COM API.

No *RC6.dll* dependency, no dependency on the WebView2 SDK typelib — the only redistributable is *WebView2Loader.dll* authored by Microsoft deployed next to your exe, targeting the Evergreen WebView2 Runtime (https://developer.microsoft.com/en-US/microsoft-edge/webview2) installed on the client machine.

*Additions beyond RC6 parity*

Methods with no RC6 counterpart, exposed because the native plumbing is cheap and the features are frequently requested:


* *PrintToPdf(ResultFilePath, [SecondsToWaitForPrintComplete], [Landscape], [ScaleFactor], [PageWidth/PageHeight], [margins], [ShouldPrintBackgrounds], [ShouldPrintSelectionOnly], [ShouldPrintHeaderAndFooter], [HeaderTitle], [FooterUri])* - blocking (or fire-and-forget at 0 seconds), returns *True*/*False*, *Empty* on timeout.
* *AddBrowserExtension(ExtensionFolderPath)* - installs an unpacked extension into the profile, returns the extension Id (empty string on failure). Requires *BindTo*'s *AreBrowserExtensionsEnabled:=True* optional parameter - must be decided before environment creation, and all instances sharing a user data folder must agree on it.
* *GetBrowserExtensions()* - returns a *Collection* of per-extension *Collection*s (*Id*, *Name*, *IsEnabled* keys), keyed by extension Id. Extension APIs need a recent Evergreen runtime; on older runtimes these return empty results.
* *SetVirtualHostNameToFolderMapping(HostName, FolderPath, [AccessKind])* / *ClearVirtualHostNameToFolderMapping(HostName)* - serve a local folder as https://<HostName>/... *AccessKind* defaults to *HostResourceAccess_DENY* (the mapped origin still serves its own content; other origins can't read it - Microsoft's recommended default). Mappings persist for the browser instance's lifetime: set once after *BindTo*, then navigate. The host name must be a bare name - no scheme or slashes.
* *Stop_* - cancels in-flight navigation/loading, *WebBrowser.Stop* style (trailing underscore because *Stop* is a VB6 keyword).
* *PostWebMessageAsString*/*PostWebMessageAsJson* - host-to-page messaging; page script receives via *chrome.webview.addEventListener('message', ...)*.
* *ContainsFullScreenElement* - detect HTML fullscreen (resize/borderless the host form).
* *IsBuiltInErrorPageEnabled* - the one base setting RC6 didn't surface.
* *IsMuted* (get/let), *IsDocumentPlayingAudio* - tab audio control.
* Default download dialog control - *OpenDefaultDownloadDialog*/*CloseDefaultDownloadDialog*/*IsDefaultDownloadDialogOpen*, *DefaultDownloadDialogCornerAlignment* and *DefaultDownloadDialogMargin*.
* Profile properties - *PreferredColorScheme* (dark mode), *DefaultDownloadFolderPath*, *PreferredTrackingPreventionLevel*, *ProfileName*, *ProfilePath*, *IsInPrivateModeEnabled*.
* *StatusBarText*, *BrowserVersion* - runtime/status introspection; *OpenTaskManagerWindow* - browser diagnostics.
* *CallDevToolsProtocolMethodForSession* - CDP against a specific target session, same blocking semantics as *CallDevToolsProtocolMethod*.
* *SetBoundsAndZoomFactor*, *NotifyParentWindowPositionChanged* (also called internally on resize/move), *HosthWnd* is now writable (re-hosting).
* *TrySuspend*/*ResumeFromSuspend*/*IsSuspended* - release memory while in the background; *TrySuspend* hides the webview first (a native precondition), *ResumeFromSuspend* makes it visible again.
* *ClearBrowsingData(DataKinds)*, *ClearBrowsingDataInTimeRange(DataKinds, StartTime, EndTime)*, *ClearBrowsingDataAll* - clear cache/cookies/history etc per *eWebView2BrowsingDataKinds* flags; blocking with the usual fire-and-forget at 0 seconds.
* Cookie management - *GetCookies([URI])* returns a *Collection* of per-cookie *Collection*s (*Name*, *Value*, *Domain*, *Path*, *IsSession*, *Expires*, *IsSecure*, *IsHttpOnly*, *SameSite* keys); *AddOrUpdateCookie(Name, Value, Domain, [Path], [Expires], ...)* (zero *Expires* = session cookie); *DeleteCookies(Name, URI)* (both required - cookies are matched by name and URI natively); *DeleteAllCookies*.
* *PrintToPdfStream([settings...])* - same settings as *PrintToPdf* but returns the PDF as a *Byte()* array, no file involved. *ShowPrintUI* opens the browser or system print dialog.



A handful of native WebView2/WebBrowser-style events with no RC6 counterpart are also exposed, since the native plumbing is either free (already needed for something else) or fills a gap the JS-bridge-based events can't:


* *ContentLoading(IsErrorPage)* - fires before *NavigationCompleted*, akin to WebBrowser's early loading moment.
* *HistoryChanged()* - back/forward stack changed; pair with *CanGoBack*/*CanGoForward*.
* *WindowCloseRequested()* - page called *window.close()*.
* *ZoomFactorChanged()* - native counterpart to the *ZoomFactor* property.
* *MoveFocusRequested(Reason, Handled)* - Tab/Shift+Tab reached the edge of the web content; *Reason* reuses *eWebView2FocusReason*.
* *DOMContentLoaded()* - the classic DOM-ready moment, between *ContentLoading* and *DocumentComplete*.
* *StatusBarTextChanged(Text)* - hover-link/status text, pairs with the *StatusBarText* property.
* *ContainsFullScreenElementChanged()* - page entered/left HTML fullscreen; read *ContainsFullScreenElement* to react.
* *BasicAuthenticationRequested(URI, Challenge, UserName, Password, Cancel)* - supply credentials for HTTP basic/proxy auth via the *ByRef* params. Note Chromium's flow: the challenged navigation first completes with *WebErrorStatus* 17 (*VALID_AUTHENTICATION_CREDENTIALS_REQUIRED*), then the authenticated retry loads.
* *ContextMenuRequested(PageURI, LinkURI, SelectionText, ScreenX, ScreenY, Handled)* - the native context-menu event, richer than the JS-injected *UserContextMenu* (which only reports coordinates): carries link/selection info and can actually suppress the browser's context menu via *Handled*. Deliberately simplified - no custom menu item injection/*CustomItemSelected*. *UserContextMenu* is unchanged and still fires alongside it.


cheers,
</wqw>]]></description>
			<content:encoded><![CDATA[<div><a rel="nofollow" href="https://github.com/wqweto/cWebView2/releases" target="_blank" rel="nofollow"><b>This</b></a> is a drop-in replacement of vbRichClient6's <b>cWebView2</b> class, implemented in pure VB6 directly against the official Microsoft WebView2 COM API.<br />
<br />
No <b>RC6.dll</b> dependency, no dependency on the WebView2 SDK typelib — the only redistributable is <b>WebView2Loader.dll</b> authored by Microsoft deployed next to your exe, targeting the <a rel="nofollow" href="https://developer.microsoft.com/en-US/microsoft-edge/webview2" target="_blank" rel="nofollow">Evergreen WebView2 Runtime</a> installed on the client machine.<br />
<br />
<b>Additions beyond RC6 parity</b><br />
<br />
Methods with no RC6 counterpart, exposed because the native plumbing is cheap and the features are frequently requested:<br />
<br />
<ul><li style=""><span style="font-family: Courier New"><b>PrintToPdf(ResultFilePath, [SecondsToWaitForPrintComplete], [Landscape], [ScaleFactor], [PageWidth/PageHeight], [margins], [ShouldPrintBackgrounds], [ShouldPrintSelectionOnly], [ShouldPrintHeaderAndFooter], [HeaderTitle], [FooterUri])</b></span> - blocking (or fire-and-forget at 0 seconds), returns <span style="font-family: Courier New"><b>True</b></span>/<span style="font-family: Courier New"><b>False</b></span>, <span style="font-family: Courier New"><b>Empty</b></span> on timeout.</li><li style=""><span style="font-family: Courier New"><b>AddBrowserExtension(ExtensionFolderPath)</b></span> - installs an unpacked extension into the profile, returns the extension Id (empty string on failure). Requires <span style="font-family: Courier New"><b>BindTo</b></span>'s <span style="font-family: Courier New"><b>AreBrowserExtensionsEnabled:=True</b></span> optional parameter - must be decided before environment creation, and all instances sharing a user data folder must agree on it.</li><li style=""><span style="font-family: Courier New"><b>GetBrowserExtensions()</b></span> - returns a <span style="font-family: Courier New"><b>Collection</b></span> of per-extension <span style="font-family: Courier New"><b>Collection</b></span>s (<span style="font-family: Courier New"><b>Id</b></span>, <span style="font-family: Courier New"><b>Name</b></span>, <span style="font-family: Courier New"><b>IsEnabled</b></span> keys), keyed by extension Id. Extension APIs need a recent Evergreen runtime; on older runtimes these return empty results.</li><li style=""><span style="font-family: Courier New"><b>SetVirtualHostNameToFolderMapping(HostName, FolderPath, [AccessKind])</b></span> / <span style="font-family: Courier New"><b>ClearVirtualHostNameToFolderMapping(HostName)</b></span> - serve a local folder as https://&lt;HostName&gt;/... <span style="font-family: Courier New"><b>AccessKind</b></span> defaults to <span style="font-family: Courier New"><b>HostResourceAccess_DENY</b></span> (the mapped origin still serves its own content; other origins can't read it - Microsoft's recommended default). Mappings persist for the browser instance's lifetime: set once after <span style="font-family: Courier New"><b>BindTo</b></span>, then navigate. The host name must be a bare name - no scheme or slashes.</li><li style=""><span style="font-family: Courier New"><b>Stop_</b></span> - cancels in-flight navigation/loading, <span style="font-family: Courier New"><b>WebBrowser.Stop</b></span> style (trailing underscore because <span style="font-family: Courier New"><b>Stop</b></span> is a VB6 keyword).</li><li style=""><span style="font-family: Courier New"><b>PostWebMessageAsString</b></span>/<span style="font-family: Courier New"><b>PostWebMessageAsJson</b></span> - host-to-page messaging; page script receives via <span style="font-family: Courier New"><b>chrome.webview.addEventListener('message', ...)</b></span>.</li><li style=""><span style="font-family: Courier New"><b>ContainsFullScreenElement</b></span> - detect HTML fullscreen (resize/borderless the host form).</li><li style=""><span style="font-family: Courier New"><b>IsBuiltInErrorPageEnabled</b></span> - the one base setting RC6 didn't surface.</li><li style=""><span style="font-family: Courier New"><b>IsMuted</b></span> (get/let), <span style="font-family: Courier New"><b>IsDocumentPlayingAudio</b></span> - tab audio control.</li><li style="">Default download dialog control - <span style="font-family: Courier New"><b>OpenDefaultDownloadDialog</b></span>/<span style="font-family: Courier New"><b>CloseDefaultDownloadDialog</b></span>/<span style="font-family: Courier New"><b>IsDefaultDownloadDialogOpen</b></span>, <span style="font-family: Courier New"><b>DefaultDownloadDialogCornerAlignment</b></span> and <span style="font-family: Courier New"><b>DefaultDownloadDialogMargin</b></span>.</li><li style="">Profile properties - <span style="font-family: Courier New"><b>PreferredColorScheme</b></span> (dark mode), <span style="font-family: Courier New"><b>DefaultDownloadFolderPath</b></span>, <span style="font-family: Courier New"><b>PreferredTrackingPreventionLevel</b></span>, <span style="font-family: Courier New"><b>ProfileName</b></span>, <span style="font-family: Courier New"><b>ProfilePath</b></span>, <span style="font-family: Courier New"><b>IsInPrivateModeEnabled</b></span>.</li><li style=""><span style="font-family: Courier New"><b>StatusBarText</b></span>, <span style="font-family: Courier New"><b>BrowserVersion</b></span> - runtime/status introspection; <span style="font-family: Courier New"><b>OpenTaskManagerWindow</b></span> - browser diagnostics.</li><li style=""><span style="font-family: Courier New"><b>CallDevToolsProtocolMethodForSession</b></span> - CDP against a specific target session, same blocking semantics as <span style="font-family: Courier New"><b>CallDevToolsProtocolMethod</b></span>.</li><li style=""><span style="font-family: Courier New"><b>SetBoundsAndZoomFactor</b></span>, <span style="font-family: Courier New"><b>NotifyParentWindowPositionChanged</b></span> (also called internally on resize/move), <span style="font-family: Courier New"><b>HosthWnd</b></span> is now writable (re-hosting).</li><li style=""><span style="font-family: Courier New"><b>TrySuspend</b></span>/<span style="font-family: Courier New"><b>ResumeFromSuspend</b></span>/<span style="font-family: Courier New"><b>IsSuspended</b></span> - release memory while in the background; <span style="font-family: Courier New"><b>TrySuspend</b></span> hides the webview first (a native precondition), <span style="font-family: Courier New"><b>ResumeFromSuspend</b></span> makes it visible again.</li><li style=""><span style="font-family: Courier New"><b>ClearBrowsingData(DataKinds)</b></span>, <span style="font-family: Courier New"><b>ClearBrowsingDataInTimeRange(DataKinds, StartTime, EndTime)</b></span>, <span style="font-family: Courier New"><b>ClearBrowsingDataAll</b></span> - clear cache/cookies/history etc per <span style="font-family: Courier New"><b>eWebView2BrowsingDataKinds</b></span> flags; blocking with the usual fire-and-forget at 0 seconds.</li><li style="">Cookie management - <span style="font-family: Courier New"><b>GetCookies([URI])</b></span> returns a <span style="font-family: Courier New"><b>Collection</b></span> of per-cookie <span style="font-family: Courier New"><b>Collection</b></span>s (<span style="font-family: Courier New"><b>Name</b></span>, <span style="font-family: Courier New"><b>Value</b></span>, <span style="font-family: Courier New"><b>Domain</b></span>, <span style="font-family: Courier New"><b>Path</b></span>, <span style="font-family: Courier New"><b>IsSession</b></span>, <span style="font-family: Courier New"><b>Expires</b></span>, <span style="font-family: Courier New"><b>IsSecure</b></span>, <span style="font-family: Courier New"><b>IsHttpOnly</b></span>, <span style="font-family: Courier New"><b>SameSite</b></span> keys); <span style="font-family: Courier New"><b>AddOrUpdateCookie(Name, Value, Domain, [Path], [Expires], ...)</b></span> (zero <span style="font-family: Courier New"><b>Expires</b></span> = session cookie); <span style="font-family: Courier New"><b>DeleteCookies(Name, URI)</b></span> (both required - cookies are matched by name <i>and</i> URI natively); <span style="font-family: Courier New"><b>DeleteAllCookies</b></span>.</li><li style=""><span style="font-family: Courier New"><b>PrintToPdfStream([settings...])</b></span> - same settings as <span style="font-family: Courier New"><b>PrintToPdf</b></span> but returns the PDF as a <span style="font-family: Courier New"><b>Byte()</b></span> array, no file involved. <span style="font-family: Courier New"><b>ShowPrintUI</b></span> opens the browser or system print dialog.</li></ul><br />
<br />
A handful of native WebView2/WebBrowser-style events with no RC6 counterpart are also exposed, since the native plumbing is either free (already needed for something else) or fills a gap the JS-bridge-based events can't:<br />
<br />
<ul><li style=""><span style="font-family: Courier New"><b>ContentLoading(IsErrorPage)</b></span> - fires before <span style="font-family: Courier New"><b>NavigationCompleted</b></span>, akin to WebBrowser's early loading moment.</li><li style=""><span style="font-family: Courier New"><b>HistoryChanged()</b></span> - back/forward stack changed; pair with <span style="font-family: Courier New"><b>CanGoBack</b></span>/<span style="font-family: Courier New"><b>CanGoForward</b></span>.</li><li style=""><span style="font-family: Courier New"><b>WindowCloseRequested()</b></span> - page called <span style="font-family: Courier New"><b>window.close()</b></span>.</li><li style=""><span style="font-family: Courier New"><b>ZoomFactorChanged()</b></span> - native counterpart to the <span style="font-family: Courier New"><b>ZoomFactor</b></span> property.</li><li style=""><span style="font-family: Courier New"><b>MoveFocusRequested(Reason, Handled)</b></span> - Tab/Shift+Tab reached the edge of the web content; <span style="font-family: Courier New"><b>Reason</b></span> reuses <span style="font-family: Courier New"><b>eWebView2FocusReason</b></span>.</li><li style=""><span style="font-family: Courier New"><b>DOMContentLoaded()</b></span> - the classic DOM-ready moment, between <span style="font-family: Courier New"><b>ContentLoading</b></span> and <span style="font-family: Courier New"><b>DocumentComplete</b></span>.</li><li style=""><span style="font-family: Courier New"><b>StatusBarTextChanged(Text)</b></span> - hover-link/status text, pairs with the <span style="font-family: Courier New"><b>StatusBarText</b></span> property.</li><li style=""><span style="font-family: Courier New"><b>ContainsFullScreenElementChanged()</b></span> - page entered/left HTML fullscreen; read <span style="font-family: Courier New"><b>ContainsFullScreenElement</b></span> to react.</li><li style=""><span style="font-family: Courier New"><b>BasicAuthenticationRequested(URI, Challenge, UserName, Password, Cancel)</b></span> - supply credentials for HTTP basic/proxy auth via the <span style="font-family: Courier New"><b>ByRef</b></span> params. Note Chromium's flow: the challenged navigation first completes with <span style="font-family: Courier New"><b>WebErrorStatus</b></span> 17 (<span style="font-family: Courier New"><b>VALID_AUTHENTICATION_CREDENTIALS_REQUIRED</b></span>), then the authenticated retry loads.</li><li style=""><span style="font-family: Courier New"><b>ContextMenuRequested(PageURI, LinkURI, SelectionText, ScreenX, ScreenY, Handled)</b></span> - the <i>native</i> context-menu event, richer than the JS-injected <span style="font-family: Courier New"><b>UserContextMenu</b></span> (which only reports coordinates): carries link/selection info and can actually suppress the browser's context menu via <span style="font-family: Courier New"><b>Handled</b></span>. Deliberately simplified - no custom menu item injection/<span style="font-family: Courier New"><b>CustomItemSelected</b></span>. <span style="font-family: Courier New"><b>UserContextMenu</b></span> is unchanged and still fires alongside it.</li></ul><br />
cheers,<br />
&lt;/wqw&gt;</div>

]]></content:encoded>
			<category domain="https://www.vbforums.com/forumdisplay.php?43-CodeBank-Visual-Basic-6-and-earlier">CodeBank - Visual Basic 6 and earlier</category>
			<dc:creator>wqweto</dc:creator>
			<guid isPermaLink="true">https://www.vbforums.com/showthread.php?912128-VB6-cWebView2-—-RC6-compatible-WebView2-wrapper</guid>
		</item>
		<item>
			<title>How to use pixel-art upscaler for app icons on High DPI monitors</title>
			<link>https://www.vbforums.com/showthread.php?912109-How-to-use-pixel-art-upscaler-for-app-icons-on-High-DPI-monitors&amp;goto=newpost</link>
			<pubDate>Sun, 28 Jun 2026 21:07:29 GMT</pubDate>
			<description><![CDATA[Thanks to Claude this (https://github.com/wqweto/xbrz) project has been ported to pure VB6 implementation and it works!


Code:
---------
'=========================================================================
'
' xBRZ 1.8 VB6 translation
'
'=========================================================================
Option Explicit
DefObj A-Z

. . . source too long so rest at https://github.com/wqweto/Xbrz/blob/master/test/mdXbrz.bas
---------
Source code here (https://github.com/wqweto/Xbrz/blob/master/test/mdXbrz.bas).

cheers,
</wqw>]]></description>
			<content:encoded><![CDATA[<div>Thanks to Claude <a rel="nofollow" href="https://github.com/wqweto/xbrz" target="_blank" rel="nofollow">this</a> project has been ported to pure VB6 implementation and it works!<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code">'=========================================================================<br />
'<br />
' xBRZ 1.8 VB6 translation<br />
'<br />
'=========================================================================<br />
Option Explicit<br />
DefObj A-Z<br />
<br />
. . . source too long so rest at https://github.com/wqweto/Xbrz/blob/master/test/mdXbrz.bas</code><hr />
</div>Source code <a rel="nofollow" href="https://github.com/wqweto/Xbrz/blob/master/test/mdXbrz.bas" target="_blank" rel="nofollow">here</a>.<br />
<br />
cheers,<br />
&lt;/wqw&gt;</div>

]]></content:encoded>
			<category domain="https://www.vbforums.com/forumdisplay.php?43-CodeBank-Visual-Basic-6-and-earlier">CodeBank - Visual Basic 6 and earlier</category>
			<dc:creator>wqweto</dc:creator>
			<guid isPermaLink="true">https://www.vbforums.com/showthread.php?912109-How-to-use-pixel-art-upscaler-for-app-icons-on-High-DPI-monitors</guid>
		</item>
	</channel>
</rss>
