Skip to content

Commit 2a95d49

Browse files
authored
Merge pull request #60 from mlipok/patch-1
Examples CleanUp
2 parents 8c20556 + aff5c6c commit 2a95d49

6 files changed

Lines changed: 188 additions & 54 deletions

File tree

examples/1-BasicDemo.au3

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,25 +43,25 @@ Func Main()
4343

4444
; navigate to HTML string - full fill the object with your own offline content - without downloading any content
4545
_NetWebView2_NavigateToString($_g_oWeb, __GetDemoHTML())
46-
47-
MsgBox($MB_TOPMOST, "TEST #" & @ScriptLineNumber, 'Watch Point')
46+
MsgBox($MB_TOPMOST, "TEST #" & @ScriptLineNumber, 'Watch Point - AFTER:' & @CRLF & 'navigate to string')
4847

4948
GUISetState(@SW_HIDE, $hGUI)
5049
WinMove($hGUI, '', Default, Default, 1100, 800)
5150

5251
; navigate to a given URL - online content
5352
_NetWebView2_Navigate($_g_oWeb, 'https://www.microsoft.com', $NETWEBVIEW2_MESSAGE__TITLE_CHANGED, 5 * 1000)
5453
GUISetState(@SW_SHOW, $hGUI)
55-
MsgBox($MB_TOPMOST, "TEST #" & @ScriptLineNumber, 'Watch Point')
54+
MsgBox($MB_TOPMOST, "TEST #" & @ScriptLineNumber, 'Watch Point - AFTER:' & @CRLF & 'navigate to a given URL - online content')
5655

5756
; navigate to fake/broken url
58-
;~ _NetWebView2_Navigate($oWebV2M, 'htpppps://www.microsoft.com', $NETWEBVIEW2_MESSAGE__TITLE_CHANGED)
59-
;~ MsgBox($MB_TOPMOST, "TEST #" & @ScriptLineNumber, 'Watch Point')
57+
_NetWebView2_Navigate($oWebV2M, 'htpppps://www.microsoft.com', $NETWEBVIEW2_MESSAGE__TITLE_CHANGED, 5 * 1000)
58+
MsgBox($MB_TOPMOST, "TEST #" & @ScriptLineNumber, 'Watch Point - AFTER:' & @CRLF & 'navigate to fake/broken url')
6059

61-
; navigate to fake/broken url
62-
;~ _NetWebView2_Navigate($oWebV2M, 'https://w2ww.microsoft.com', $NETWEBVIEW2_MESSAGE__TITLE_CHANGED, 100)
63-
;~ __NetWebView2_Log(@ScriptLineNumber, "After: https://w2ww.microsoft.com", 1)
64-
;~ MsgBox($MB_TOPMOST, "TEST #" & @ScriptLineNumber, 'Watch Point')
60+
; navigate to fake not ex url
61+
__NetWebView2_Log(@ScriptLineNumber, "Before: https://w2ww.microsoft.com", 1)
62+
_NetWebView2_Navigate($oWebV2M, 'https://w2ww.microsoft.com', $NETWEBVIEW2_MESSAGE__TITLE_CHANGED, 5 * 1000)
63+
__NetWebView2_Log(@ScriptLineNumber, "After: https://w2ww.microsoft.com", 1)
64+
MsgBox($MB_TOPMOST, "TEST #" & @ScriptLineNumber, 'Watch Point - AFTER:' & @CRLF & 'navigate to fake/broken url' & @CRLF & 'HostNameNotResolved')
6565

6666
; Main Loop
6767
While 1
@@ -111,7 +111,8 @@ EndFunc ;==>_BridgeMyEventsHandler_OnMessageReceived
111111
; HELPER: Demo HTML Content
112112
; ==============================================================================
113113
Func __GetDemoHTML()
114-
Local $sH = '<html><head><style>' & _
114+
Local $sH = _
115+
'<html><head><style>' & _
115116
'body { font-family: "Segoe UI", sans-serif; background: #202020; color: white; padding: 40px; text-align: center; }' & _
116117
'.card { background: #2d2d2d; padding: 20px; border-radius: 8px; border: 1px solid #444; }' & _
117118
'button { padding: 12px 24px; cursor: pointer; background: #0078d4; color: white; border: none; border-radius: 4px; font-size: 16px; margin: 5px; }' & _

examples/4-FileViewerDemo.au3

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ Func Main()
5656
Local $oJSBridge = _NetWebView2_GetBridge($oWebV2M)
5757
If @error Then Return SetError(@error, @extended, $oWebV2M)
5858

59-
Local $sProfileDirectory = @TempDir & "\NetWebView2Lib-UserDataFolder"
59+
Local $sProfileDirectory = @TempDir & "\..\UserDataFolder"
6060
_NetWebView2_Initialize($oWebV2M, ($hGUI), $sProfileDirectory, 0, 0, 0, 0, True, True, True, 1.2, "0x2B2B2B")
6161

6262
GUISetState(@SW_SHOW, $hGUI)

examples/4-FileViewerDemo_Loop.au3

Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
#AutoIt3Wrapper_UseX64=y
2+
#include <File.au3>
3+
#include <GUIConstantsEx.au3>
4+
#include <SendMessage.au3>
5+
#include <StaticConstants.au3>
6+
#include <WinAPIGdi.au3>
7+
#include <WinAPIGdiDC.au3>
8+
#include <WinAPIHObj.au3>
9+
#include <WinAPISysWin.au3>
10+
#include <WindowsConstants.au3>
11+
12+
13+
#SciTE4AutoIt3_Dynamic_Include_Path=;..\NetWebView2Lib.au3
14+
#SciTE4AutoIt3_Dynamic_Include=y ;dynamic.include=y/n
15+
#SciTE4AutoIt3_Dynamic_Include_whiletyping=y ;dynamic.include.whiletyping=y/n
16+
#SciTE4AutoIt3_Dynamic_Include_recursive_check=y ;dynamic.include.recursive.check=n/y
17+
#SciTE4AutoIt3_Dynamic_Include_use_local_cache=y ;dynamic.include.use.local.cache=n/y
18+
#SciTE4AutoIt3_Dynamic_Include_version=prod ;dynamic.include.version=prod/beta
19+
#SciTE4AutoIt3_Dynamic_Include_verboselevel=0 ;dynamic.include.verbose.level=0/1/2 ; 0=disabled; 1=Timing per Function; 2=1+Total timing
20+
#SciTE4AutoIt3_Dynamic_Include_Always_Update_Local_File=n ;dynamic.include.always.update.local.file=n/y
21+
#SciTE4AutoIt3_AutoItTools_debug=n ;debug.autoIttools=n/y
22+
#SciTE4AutoIt3_AutoItDynamicIncludes_debug=n ;debug.AutoItDynamicIncludes=n/y
23+
#SciTE4AutoIt3_AutoItAutocomplete_debug=n ;debug.autoitautocomplet=n/y
24+
#SciTE4AutoIt3_AutoItGotoDefinition_debug=n ;debug.autoitgotodefinition=n/y
25+
#SciTE4AutoIt3_AutoItIndentFix_debug=n ;debug.autoitindentfix=n/y
26+
27+
#include "..\NetWebView2Lib.au3"
28+
29+
Main()
30+
31+
Func Main()
32+
Local $oMyError = ObjEvent("AutoIt.Error", __NetWebView2_COMErrFunc)
33+
#forceref $oMyError
34+
35+
; Create the UI
36+
Local $iHeight = 800
37+
Local $hGUI = GUICreate("WebView2 .NET Manager - Demo: " & @ScriptName, 1100, $iHeight, -1, -1, BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPCHILDREN))
38+
Local $idLabelStatus = GUICtrlCreateLabel("Status: Initializing Engine...", 10, $iHeight - 20, 880, 20)
39+
#forceref $idLabelStatus
40+
GUICtrlSetFont(-1, 9, 400, 0, "Segoe UI")
41+
42+
; Initialize WebView2 Manager and register events
43+
Local $oWebV2M = _NetWebView2_CreateManager("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0", "", "--mute-audio")
44+
$_g_oWeb = $oWebV2M
45+
If @error Then Return SetError(@error, @extended, $oWebV2M)
46+
47+
; Initialize JavaScript Bridge
48+
Local $oJSBridge = _NetWebView2_GetBridge($oWebV2M, "_BridgeMyEventsHandler_")
49+
If @error Then Return SetError(@error, @extended, $oWebV2M)
50+
51+
Local $sProfileDirectory = @TempDir & "\..\UserDataFolder"
52+
_NetWebView2_Initialize($oWebV2M, $hGUI, $sProfileDirectory, 0, 0, 0, 0, True, True, True, 1.2, "0x2B2B2B")
53+
Local $i_ProcessID = @extended
54+
#forceref $i_ProcessID
55+
56+
GUISetState(@SW_SHOW, $hGUI)
57+
ConsoleWrite("! ===" & @ScriptLineNumber & @CRLF)
58+
;~ MsgBox($MB_TOPMOST, "TEST #" & @ScriptLineNumber, 0)
59+
Local $s_PDF_FileFullPath
60+
61+
Local $s_PDF_Directory = FileSelectFolder('Choose folder with PDF','')
62+
63+
Local $a_Files = _FileListToArrayRec($s_PDF_Directory, '*.pdf', $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_NOSORT, $FLTAR_FULLPATH)
64+
Local Static $hWebView2_Window = _WinAPI_GetWindow($hGUI, $GW_CHILD)
65+
For $IDX_File = 1 To $a_Files[0]
66+
$s_PDF_FileFullPath = $a_Files[$IDX_File]
67+
_NetWebView2_NavigateToPDF($oWebV2M, $s_PDF_FileFullPath, $hWebView2_Window, '#view=FitH', 1000)
68+
ConsoleWrite("! === @SLN=" & @ScriptLineNumber & ' ' & $s_PDF_FileFullPath & @CRLF)
69+
Next
70+
71+
; Main Loop
72+
While 1
73+
Switch GUIGetMsg()
74+
Case $GUI_EVENT_CLOSE
75+
ExitLoop
76+
EndSwitch
77+
WEnd
78+
79+
GUIDelete($hGUI)
80+
81+
_NetWebView2_CleanUp($oWebV2M, $oJSBridge)
82+
EndFunc ;==>Main
83+
84+
Func _EnumWindow($hWnd)
85+
Local $aData = _WinAPI_EnumChildWindows($hWnd)
86+
ConsoleWrite("! $aData[1][0] = " & $aData[1][0] & @CRLF)
87+
;~ _ArrayDisplay($aData, '_WinAPI_EnumChildWindows')
88+
89+
If Not @error And UBound($aData) Then Return $aData[1][0]
90+
91+
Return SetError(1, @extended, False)
92+
EndFunc ;==>Example
93+
94+
Func __NetWebView2_freezer($hWebView2_Window, $idPic = 0)
95+
#Region ; if $idPic is given then it means you already have it and want to delete it - unfreeze - show WebView2 content
96+
If $idPic Then
97+
_SendMessage($hWebView2_Window, $WM_SETREDRAW, True, 0) ; Enables
98+
_WinAPI_RedrawWindow($hWebView2_Window, 0, 0, BitOR($RDW_FRAME, $RDW_INVALIDATE, $RDW_ALLCHILDREN)) ; Repaints
99+
GUICtrlDelete($idPic)
100+
Return
101+
EndIf
102+
#EndRegion ; if $idPic is given then it means you already have it and want to delete it - unfreeze - show WebView2 content
103+
104+
#Region ; freeze $hWebView2_Window
105+
106+
#Region ; add PIC to parent window
107+
Local $hMainGUI_Window = _WinAPI_GetWindow($hWebView2_Window, $GW_HWNDPREV)
108+
Local $aPos = WinGetPos($hWebView2_Window)
109+
Local $hPrev = GUISwitch($hMainGUI_Window)
110+
$idPic = GUICtrlCreatePic('', 0, 0, $aPos[2], $aPos[3])
111+
Local $hPic = GUICtrlGetHandle($idPic)
112+
GUISwitch($hPrev)
113+
#EndRegion ; add PIC to parent window
114+
115+
; Create bitmap
116+
Local $hDC = _WinAPI_GetDC($hPic)
117+
Local $hDestDC = _WinAPI_CreateCompatibleDC($hDC)
118+
Local $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $aPos[2], $aPos[3])
119+
Local $hDestSv = _WinAPI_SelectObject($hDestDC, $hBitmap)
120+
Local $hSrcDC = _WinAPI_CreateCompatibleDC($hDC)
121+
Local $hBmp = _WinAPI_CreateCompatibleBitmap($hDC, $aPos[2], $aPos[3])
122+
Local $hSrcSv = _WinAPI_SelectObject($hSrcDC, $hBmp)
123+
_WinAPI_PrintWindow($hWebView2_Window, $hSrcDC, 2)
124+
_WinAPI_BitBlt($hDestDC, 0, 0, $aPos[2], $aPos[3], $hSrcDC, 0, 0, $MERGECOPY)
125+
126+
_WinAPI_ReleaseDC($hPic, $hDC)
127+
_WinAPI_SelectObject($hDestDC, $hDestSv)
128+
_WinAPI_SelectObject($hSrcDC, $hSrcSv)
129+
_WinAPI_DeleteDC($hDestDC)
130+
_WinAPI_DeleteDC($hSrcDC)
131+
_WinAPI_DeleteObject($hBmp)
132+
133+
; Set bitmap to control
134+
_SendMessage($hPic, $STM_SETIMAGE, 0, $hBitmap)
135+
Local $hObj = _SendMessage($hPic, $STM_GETIMAGE)
136+
If $hObj <> $hBitmap Then
137+
_WinAPI_DeleteObject($hBitmap)
138+
EndIf
139+
140+
_SendMessage($hWebView2_Window, $WM_SETREDRAW, False, 0) ; Disables ; https://www.autoitscript.com/forum/topic/199172-disable-gui-updating-repainting/
141+
Return $idPic
142+
#EndRegion ; freeze $hWebView2_Window
143+
EndFunc ;==>__NetWebView2_freezer
144+
145+
Func _NetWebView2_NavigateToPDF(ByRef $oWebV2M, $s_URL_or_FileFullPath, $hWebView2_Window = 0, $s_Parameters = '', $iSleep_ms = 1000)
146+
Local $idPic
147+
If FileExists($s_URL_or_FileFullPath) Then
148+
$s_URL_or_FileFullPath = StringReplace($s_URL_or_FileFullPath, ' ', '%20')
149+
$s_URL_or_FileFullPath = "file:///" & $s_URL_or_FileFullPath
150+
If $iSleep_ms Then
151+
$iSleep_ms -= 400
152+
If $iSleep_ms < 600 Then $iSleep_ms = 600
153+
EndIf
154+
EndIf
155+
156+
If $s_Parameters Then
157+
$s_URL_or_FileFullPath &= $s_Parameters
158+
#TIP: FitToPage: https://stackoverflow.com/questions/78820187/how-to-change-webview2-fit-to-page-button-on-pdf-toolbar-default-to-fit-to-width#comment138971950_78821231
159+
#TIP: Open desired PAGE: https://stackoverflow.com/questions/68500164/cycle-pdf-pages-in-wpf-webview2#comment135402565_68566860
160+
EndIf
161+
162+
If $hWebView2_Window Then $idPic = __NetWebView2_freezer($hWebView2_Window)
163+
164+
_NetWebView2_Navigate($oWebV2M, $s_URL_or_FileFullPath)
165+
Sleep($iSleep_ms)
166+
If $hWebView2_Window Then
167+
__NetWebView2_freezer($hWebView2_Window, $idPic)
168+
EndIf
169+
EndFunc ;==>_NetWebView2_NavigateToPDF

examples/v1.5.0_Examples/DownloadDemo.au3

Lines changed: 3 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Func _Example()
2121

2222
#Region ; GUI CREATION
2323

24-
HotKeySet("{ESC}", "_DownloadCancel")
24+
HotKeySet("{ESC}", _DownloadCancel)
2525

2626
; Create the GUI
2727
$hGUI = GUICreate("WebView2 .NET Manager - [ Press ESC to cancell the download ]", 1000, 800)
@@ -36,7 +36,7 @@ Func _Example()
3636
If @error Then Return SetError(@error, @extended, $oWebV2M)
3737

3838
; initialize browser - put it on the GUI
39-
Local $sProfileDirectory = @TempDir & "\NetWebView2Lib-UserDataFolder"
39+
Local $sProfileDirectory = @TempDir & "\..\NetWebView2Lib-UserDataFolder"
4040
_NetWebView2_Initialize($oWebV2M, $hGUI, $sProfileDirectory, 0, 0, 0, 0, True, True, True, 1.2, "0x2B2B2B")
4141

4242
; show the GUI after browser was fully initialized
@@ -73,43 +73,7 @@ EndFunc ;==>_Example
7373
; EVENT HANDLERS (CALLBACKS)
7474
; =======================================================================================
7575

76-
; Listen for Manager OnDownloadStarting Events
77-
Func __NetWebView2_WebViewEvents__OnDownloadStarting($sUri, $sDefaultPath)
78-
ConsoleWrite("-> [OnDownloadStarting]:: $sUri: " & $sUri & ", $sDefaultPath: " & $sDefaultPath & @CRLF)
79-
80-
; --- STANDARD MODE (EDGE) ---
81-
; If you do nothing, Edge will download to the $sDefaultPath.
82-
; If you previously set $oWeb.SetDownloadPath("C:\MyFolder"), it will go there.
83-
84-
; --- MANUAL MODE (BYPASS EDGE) ---
85-
; If you want to handle the download yourself with InetGet:
86-
; $oWeb.IsDownloadHandled = True
87-
; InetGet($sUri, @ScriptDir & "\Manual_Download.zip", 1, 1) ; 1 = wait for completion, 1 = force reload
88-
; ConsoleWrite("--> Edge download CANCELLED. AutoIt is handling it via InetGet." & @CRLF)
89-
90-
ConsoleWrite("<- OnDownloadStarting event finished. Standard Edge download proceeds unless IsDownloadHandled=True." & @CRLF)
91-
EndFunc
92-
93-
; Listen for Manager OnDownloadStateChanged Events
94-
Func __NetWebView2_WebViewEvents__OnDownloadStateChanged($sState, $sUri, $iTotalBytes, $iReceivedBytes)
95-
Local $iPercent = 0
96-
If $iTotalBytes > 0 Then $iPercent = Round(($iReceivedBytes / $iTotalBytes) * 100)
97-
98-
; Convert to MB for easy-to-read log
99-
Local $fReceivedMB = Round($iReceivedBytes / 1024 / 1024)
100-
Local $fTotalMB = Round($iTotalBytes / 1024 / 1024)
101-
102-
Switch $sState
103-
Case "InProgress"
104-
ConsoleWrite("++> Downloading: " & $iPercent & "% (" & $fReceivedMB & " / " & $fTotalMB & " MB)" & @CRLF)
105-
Case "Interrupted"
106-
ConsoleWrite("!!!> DOWNLOAD STOPPED/INTERRUPTED: " & $sUri & @CRLF)
107-
Case "Completed"
108-
ConsoleWrite("--> DOWNLOAD FINISHED: " & $sUri & @CRLF)
109-
EndSwitch
110-
EndFunc
111-
11276
Func _DownloadCancel()
11377
ConsoleWrite("HotKeyPress: _DownloadCancel" & @CRLF)
11478
$_g_oWeb.CancelDownloads("https://fosszone.csd.auth.gr/tdf/libreoffice/stable/25.8.4/win/x86_64/LibreOffice_25.8.4_Win_x86-64.msi")
115-
EndFunc
79+
EndFunc ;==>_DownloadCancel

examples/v1.5.0_Examples/HTTP_StatusCodeTracking.au3

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@
1111
#include "..\..\NetWebView2Lib.au3"
1212

1313
; Register exit function to ensure clean WebView2 shutdown
14-
OnAutoItExitRegister("_ExitApp")
14+
OnAutoItExitRegister(_ExitApp)
1515

1616
; Global objects
1717
Global $oWeb, $oJS
18-
Global $oMyError = ObjEvent("AutoIt.Error", "_ErrFunc") ; COM Error Handler
18+
Global $oMyError = ObjEvent("AutoIt.Error", _ErrFunc) ; COM Error Handler
1919
Global $g_DebugInfo = True
20-
Global $g_sProfilePath = @ScriptDir & "\UserDataFolder"
20+
Global $g_sProfilePath = @ScriptDir & "\..\UserDataFolder"
2121
Global $hGUI
2222

2323
_Example_HTTP_Tracking()

examples/v1.5.0_Examples/SaveDemo.au3

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ Func _Example()
3434
If @error Then Return SetError(@error, @extended, $oWebV2M)
3535

3636
; initialize browser - put it on the GUI
37-
Local $sProfileDirectory = @TempDir & "\NetWebView2Lib-UserDataFolder"
37+
Local $sProfileDirectory = @TempDir & "\..\UserDataFolder"
3838
_NetWebView2_Initialize($oWebV2M, $hGUI, $sProfileDirectory, 0, 0, 0, 0, True, True, True, 1.2, "0x2B2B2B")
3939

4040
; show the GUI after browser was fully initialized

0 commit comments

Comments
 (0)