-
Posts
2,678 -
Joined
-
Last visited
-
Days Won
39
Gianni last won the day on April 26
Gianni had the most liked content!
About Gianni

- Birthday 05/02/1962
Profile Information
-
Location
Italy
Gianni's Achievements
-
Gianni reacted to a post in a topic: WinRT Object Libraries
-
Gianni reacted to a post in a topic: WinRT Object Libraries
-
Thanks @MattyD for the new "XamlLibs" I've been trying to create a WebView using what you said in your previous post, but I'm also getting the error -2147467259 Unspecified Error (E_FAIL) right after this line of code: Local $pControl = IWebViewFactory4_CreateInstanceWithExecutionMode($pCtrl_Fact, $mWebViewExecutionMode["SameThread"]) Since I'm in the dark on this, ... I can only stay tuned ... 🙂
-
#include "Include\Classes\Windows.UI.Xaml.Controls.Webview.au3" I can't find this file to try
-
Gianni reacted to a post in a topic: WinRT Object Libraries
-
MattyD reacted to a post in a topic: WinRT Object Libraries
-
argumentum reacted to a post in a topic: WinRT Object Libraries
-
Well said! I agree with you... ColorPicker works well (manifest patch needed) and callback function works great! P.S. peeking at ClassExplorer I see that there is a "Windows.UI.Xaml.Controls.IWebView2" what is this for? can you embed a browser with this?!?
-
Gianni reacted to a post in a topic: WinRT Object Libraries
-
MattyD reacted to a post in a topic: MediaPlayerElement - WinRT Xaml Island
-
I applied the patch to the compiled executable file instead of AutoIt3.exe and that worked. Thanks
-
Gianni reacted to a post in a topic: MediaPlayerElement - WinRT Xaml Island
-
Gianni reacted to a post in a topic: MediaPlayerElement - WinRT Xaml Island
-
Gianni reacted to a post in a topic: MediaPlayerElement - WinRT Xaml Island
-
Hi @MattyD I replaced the original autoit3.exe file with the modified version generated by your script (..?! you know things that I obviously don't know) and in this way MediaPlayer.au3 works. Then I tried to compile MediaPlayer.au3 but the generated executable does not work (the autoit3.exe file after compilation is still the modified one). Is there any trick to be able to compile MediaPlayer.au3 into a working executable and then restore the original autoit3.exe file in the AutoIt folder? Bye and thanks
-
Danyfirex reacted to a post in a topic: "OrdoWebView2.ocx" WebView2 made simple
-
Danyfirex reacted to a post in a topic: "OrdoWebView2.ocx" WebView2 made simple
-
Danyfirex reacted to a post in a topic: "OrdoWebView2.ocx" WebView2 made simple
-
A first attempt at interaction between AutoIt and OrdoWebView2 it seems to me that some small anomalies occur (but maybe it's me who doesn't use them correctly), such as: the value of an AutoIt variable set by reading the value of a property of a browser object is not immediately available in AutoIt, but delays must be inserted before reading its value. However, I have set 3 callback functions related to the following events: "navigation completed"; "zoom change" and "asynchronous JS result". In particular, this last event should be executed only if you use the execution of a javascript script using the RunJsAsync() method. well, although I have not used that method in the AutoIt script but have only used the RunJs() method, I see that the JSAsyncResult callback function is occasionally executed anyway (?). Well, this test script uses a web page that contains a "label" where the text changes to "I'm not a robot" only when the three red cubes have been clicked. (You could use this as a sort of graphical "CAPTCHA"). You can rotate the cube by dragging with the mouse so that any red cubes that are "on the back" come to the forefront so that you can click them. The interaction with AutoIt consists of reading the value of that JS field to check when it changes to "I'm not a robot" and acting accordingly in AutoIt. It seems to work, but I think I still need to dig deeper into this functionality. The zoom change event is executed when the browser zoom is changed. To change the zoom you can hold down the "ctrl" key on the keyboard and simultaneously rotate the mouse wheel up or down. To reset the zoom to 100% press "ctrl" and zero on the numpad. Here is the "experiment". #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include "OrdoWebView2.au3" Global $bReloaded = False ; to be used in NavigationCompleted callback function _TestOrdoWebView() Func _TestOrdoWebView() Local $hMain_GUI = GUICreate("Main GUI", 500, 520, -1, -1, BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS, $WS_CLIPCHILDREN)) Local $hButton1 = GUICtrlCreateButton("I give up", 10, 495, 480, 20) GUISetState(@SW_SHOW, $hMain_GUI) Local $aEBWebView1 = webview2_GUI_Create(480, 480, 10, 10, $hMain_GUI, "_OrdoWebView_") ; 6° parameter: Events Callback funcion name prefix ; a javascript function to be injected in Document for a later use from AutoIt via .RunJs or .RunJsAsync $aEBWebView1[0].AddScriptToExecuteOnDocumentCreated("function getQSValue(qsExpr){return document.getElementById((qsExpr)).innerHTML}") ; Load web page $aEBWebView1[0].Navigate("https://shzlw.github.io/design/I-am-not-a-robot.html") While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $hButton1 MsgBox(0, 'AutoIt', "Test failed. Goodbye") ExitLoop EndSwitch If $aEBWebView1[0].RunJs("getQSValue", "label") = "I'm not a robot" Then MsgBox(0, 'AutoIt', "Great! You are not a robot. Welcome human!") $aEBWebView1[0].Reload Do ConsoleWrite('.') Until $bReloaded $bReloaded = False ; if there is not this MsgBox to produce a long delay sometimes the reload is executed twice MsgBox(0, 'AutoIt', "Play again") EndIf WEnd _SysFreeString($pProgID) GUIDelete($aEBWebView1[1]) GUIDelete($hMain_GUI) EndFunc ;==>_TestOrdoWebView ; --- CallBack functions --- Volatile Func _OrdoWebView_NavigationCompleted($IsSuccess, $WebErrorStatus) ConsoleWrite("_OrdoWebView_NavigationCompleted" & @CRLF) $bReloaded = True EndFunc ;==>_OrdoWebView_NavigationCompleted Volatile Func _OrdoWebView_ZoomChanged($iValue) ConsoleWrite("New Zoom Value is : " & $iValue & @CRLF) TrayTip("Zoom changed", "New zoom value is: " & $iValue, 3, 17) EndFunc ;==>_OrdoWebView_ZoomChanged Volatile Func _OrdoWebView_JSAsyncResult($vResult, $vToken, $sErrString) ConsoleWrite("Javascript result: " & $vResult & @CRLF & $vToken & @CRLF & $sErrString & @CRLF) EndFunc ;==>_OrdoWebView_JSAsyncResult
-
Werty reacted to a post in a topic: "OrdoWebView2.ocx" WebView2 made simple
-
Gianni reacted to a post in a topic: "OrdoWebView2.ocx" WebView2 made simple
-
SOLVE-SMART reacted to a post in a topic: "OrdoWebView2.ocx" WebView2 made simple
-
Indeed, no need to register anything other than OrdoWebView2.ocx You just need a folder containing the files as shown in the figure below \MYFOLDER | OrdoWebView2.ocx | OrdoWebView2.au3 | OrdoWebView2_Demo.au3 | \---OrdoRC6 cairo_sqlite.dll DirectCOM.dll RC6.dll RC6Widgets.dll RegisterRC6inPlace.vbs RegisterRC6WidgetsInPlace.vbs WebView2Loader.dll _Library-Licenses.txt _Version-History.txt (You can find the necessary files in the 7z file in @Danyfirex's post as indicated in first post above) As @Ninedid, I also did the following: created a folder containing necessary files as above opened a DOS prompt with administrative rights; placed the current directory where the OrdoWebView2.ocx file is located I typed the following command: regsvr32 .\OrdoWebView2.ocx I received the popup message with the message "DllRegisterServer in .\OrdoWebView2.ocx succeeded" That's it, then running the OrdoWebView2_Demo.au3 file everything worked fine thanks all for the feedbacks
-
ptrex reacted to a post in a topic: "OrdoWebView2.ocx" WebView2 made simple
-
Nine reacted to a post in a topic: "OrdoWebView2.ocx" WebView2 made simple
-
You can start the OrdoWebView2 control in "incognito" mode by setting the .IsPrivateNavigation parameter to True in the InitEx method, as described in the OrdoWebView2.ocx control help (https://freeware.ordoconcept.net/Help/OrdoWebView2/topics/InitEx.htm). This way the user data folder should be automatically and silently created in a temporary location and is not stored permanently, but only exists during the session and is deleted when it ends. P.S. In order not to hijack this topic too much, I created a new Topic specifically related to the OrdoWebView2.ocx control
-
Although I think the best way to use WebView2 in AutoIt would be to complete and use the work started by @LarsJ in this other @mLipok's topic, now it is possible to use WebView2 in AutoIt in a much simpler way. This is possible thanks to this ocx control and thanks to @Danyfirex for his decisive contribution. Now we can easily start embedding one or more WebView2 controls in our GUI in AutoIt. What we need is: the OrdoWebView2.ocx control and the \OrdoRC6 folder. These two are installed together with other programs (in the C:\Program Files (x86)\OrdoWebView2Control folder) by running the OrdoWebView2ActiveXControl.2.0.9.exe program downloadable from this link: https://freeware.ordoconcept.net/OrdoWebview2.php by clicking on "Download OrdoWebView2 SDK" at the bottom of the screen. Or, more simply, you can find them directly attached to this post by @Danyfirex. As explained in this post on VBForums (https://www.vbforums.com/showthread.php?899415-OrdoWebview2-ActiveX-WebView2-Browser-Control-(Replacement-of-the-MS-browser-control)&p=5651133&viewfull=1#post5651133): "On the latest versions of Windows 10 and Windows 11, only the following components are needed: OrdoWebView2.ocx OrdoRC6 folder and its contents, in the same directory as OrdoWebView2.ocx Finally, you need to register OrdoWebView2.ocx with regsvr32.exe OrdoWebView2.ocx". Also: Our AutoIt script and the OrdoWebView2.au3 must also be in the same directory along with the above. I have extracted the essential parts needed to create the WebView2 object from the DanyFirex's original example and grouped them into the OrdoWebView2.au3 UDF so that it can be easily included into a program. This is just a quick draft to get you started, but it can definitely be improved. Suggestions are welcome. Here are the basic UDF and a very basic example script: Embed 4 WebView2 controls in an AutoIt GUI More scripts to follow to test the functionality and interaction between OrdoWebView2 and AutoIt. See you later. P.S. Here is a reference link to the OrdoWebView2.ocx help (https://freeware.ordoconcept.net/Help/OrdoWebView2/) OrdoWebView2.au3 ; From the following POST By DanyFirex: ; https://www.autoitscript.com/forum/topic/204362-microsoft-edge-webview2-embed-web-code-in-your-native-application/page/9/#findComment-1542694 ; ... first draft to be continue ... #include <WinAPI.au3> Global Const $gATL = DllOpen("ATL.DLL") Global Const $gOleaut32 = DllOpen("oleaut32.dll") _WinAPI_CoInitialize($COINIT_APARTMENTTHREADED) AtlAxWinInit() Global $pProgID = SysAllocString('OrdoWebView2.OrdoWebView') Func webview2_GUI_Create($w, $h, $x, $y, $hMain, _ $sEventsPrefix = '', _ ; ......................... The prefix of the functions you define to handle receiving events. The prefix is appended by the Objects event name. $sLang = "", _ ; ................................. Language defined by the 2-letter code from ISO 639. If omitted, the chosen language will be that of the user's system. $bIsPrivateNavigation = False, _ ; ............... if TRUE the browser goes into private browsing mode. Default value is False $sBrowserInstallPath = "", _ ; ................... sets the installation directory of the WebView2 fixed version. Only considered if UseEdgeFixedVersion is TRUE. $sUserDataFolder = "", _ ; ....................... defines the user's browsing data directory. If empty, use default user assignment directory. Ignored if IsPrivateNavigation is true $sAdditionalBrowserArguments = "", _ ; ........... Allows passing parameters to the Chromium WebView2 browser through command line switches. You can find a list of Chromium Command Line Switches here $iAllowSingleSignOnUsingOSPrimaryAccount = 0) ; .. Determines whether to enable single sign on with Azure Active Directory Local $hGUI_1 = GUICreate('', $w, $h, $x, $y, $WS_POPUPWINDOW) ; BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS, $WS_CLIPCHILDREN)) Local $hResult = AtlAxCreateControl($pProgID, $hGUI_1) ; _SysFreeString($pProgID) Local $pIUnkown = AtlAxGetControl($hGUI_1) ; ConsoleWrite("AtlAxGetControl: " & $pIUnkown & @CRLF) _WinAPI_SetParent($hGUI_1, $hMain) ; trap this child gui within the main gu GUISetState(@SW_SHOW, $hGUI_1) Local $oOrdoWebView2 = ObjCreateInterface($pIUnkown, "{E54909AA-1705-44A9-8235-B24F74366B3F}") Local $oOrdoWebViewEvents = ObjEvent($oOrdoWebView2, $sEventsPrefix, "__OrdoWebView") ; ConsoleWrite("$oOrdoWebView2: " & IsObj($oOrdoWebView2) & @CRLF) ; ConsoleWrite($oOrdoWebView2.GetWebView2Version() & @CRLF) ; ConsoleWrite($oOrdoWebView2.GetMostRecentInstallPath() & @CRLF) #cs $oOrdoWebView2.Anchor = True $oOrdoWebView2.Search_URL = "https://search.yahoo.com/search?p=%1" $oOrdoWebView2.HomeURL = "http://www.google.com" $oOrdoWebView2.SearchEngine = 2 $oOrdoWebView2.SearchAuto = True #ce $oOrdoWebView2.UseEdgeFixedVersion = False $oOrdoWebView2.InitEx($sLang, $bIsPrivateNavigation, $sBrowserInstallPath, $sUserDataFolder, $sAdditionalBrowserArguments, $iAllowSingleSignOnUsingOSPrimaryAccount) While Not $oOrdoWebView2.IsWebViewInit() ;wait initialization otherwise Navigate will fail Sleep(100) WEnd Local $aReturn = [$oOrdoWebView2, $hGUI_1] Return $aReturn ; $oOrdoWebView2 EndFunc ;==>webview2_GUI_Create Func AtlAxCreateControl($pProgID, $HWND) Local $aCall = DllCall($gATL, "long", "AtlAxCreateControl", "ptr", $pProgID, "handle", $HWND, "ptr", 0, "ptr", 0) If @error Then Return SetError(1, 0, -1) Return $aCall[0] EndFunc ;==>AtlAxCreateControl Func AtlAxGetControl($HWND) Local $aCall = DllCall($gATL, "long", "AtlAxGetControl", "handle", $HWND, "ptr*", 0) If @error Then Return SetError(1, 0, -1) Return $aCall[2] EndFunc ;==>AtlAxGetControl Func AtlAxWinInit() Local $aCall = DllCall($gATL, "bool", "AtlAxWinInit") If @error Then Return SetError(1, 0, -1) Return $aCall[0] EndFunc ;==>AtlAxWinInit Func _SysFreeString($pBSTR) ; Author: Prog@ndy If Not $pBSTR Then Return SetError(2, 0, 0) DllCall($gOleaut32, "none", "SysFreeString", "ptr", $pBSTR) If @error Then Return SetError(1, 0, 0) EndFunc ;==>_SysFreeString Func SysAllocString($str) ; Author: monoceres Local $aCall = DllCall($gOleaut32, "ptr", "SysAllocString", "wstr", $str) If @error Then Return SetError(1, 0, 0) Return $aCall[0] EndFunc ;==>SysAllocString OrdoWebView2_Demo.au3 #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include "OrdoWebView2.au3" Global $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc") _TestOrdoWebView() Func _TestOrdoWebView() Local $hMain_GUI = GUICreate("Main GUI", 990, 810, -1, -1, BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS, $WS_CLIPCHILDREN)) GUISetState(@SW_SHOW, $hMain_GUI) Local $hAutoIt_Button_1 = GUICtrlCreateButton("test", 10, 785) ; Create 4 controls Local $aWebView1 = webview2_GUI_Create(480, 380, 10, 10, $hMain_GUI) Local $aWebView2 = webview2_GUI_Create(480, 380, 500, 10, $hMain_GUI) Local $aWebView3 = webview2_GUI_Create(480, 380, 10, 400, $hMain_GUI) Local $aWebView4 = webview2_GUI_Create(480, 380, 500, 400, $hMain_GUI) ; Navigate to web pages $aWebView1[0].Navigate("https://www.kevs3d.co.uk/dev/js1kdragons/") ; "http://www.3quarks.com/en/SegmentDisplay/" $aWebView2[0].Navigate("https://gridstackjs.com/demo/anijs.html") ; "https://retejs.org/") $aWebView3[0].Navigate("https://www.youtube.com/watch?v=ojBYW3ycVTE") $aWebView4[0].Navigate("https://freeware.ordoconcept.net/OrdoWebview2.php") ; "https://freeware.ordoconcept.net/Help/OrdoWebView2/" While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $hAutoIt_Button_1 MsgBox(0, 'AutoIt', 'Hi') EndSwitch WEnd _SysFreeString($pProgID) GUIDelete($aWebView1[1]) GUIDelete($aWebView2[1]) GUIDelete($aWebView3[1]) GUIDelete($aWebView4[1]) GUIDelete($hMain_GUI) EndFunc ;==>_TestOrdoWebView ; User's COM error function. Will be called if COM error occurs Func _ErrFunc($oError) ; Do anything here. ConsoleWrite(@ScriptName & " (" & $oError.scriptline & ") : ==> COM Error intercepted !" & @CRLF & _ @TAB & "err.number is: " & @TAB & @TAB & "0x" & Hex($oError.number) & @CRLF & _ @TAB & "err.windescription:" & @TAB & $oError.windescription & @CRLF & _ @TAB & "err.description is: " & @TAB & $oError.description & @CRLF & _ @TAB & "err.source is: " & @TAB & @TAB & $oError.source & @CRLF & _ @TAB & "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _ @TAB & "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _ @TAB & "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _ @TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _ @TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF) EndFunc ;==>_ErrFunc
-
Hi @Danyfirex, thank you so much for this script! Now I have put in the same directory as your script the folder \OrdoRC6 and the file OrdoWebView2.ocx (I also registered OrdoWebView2.ocx with the command "regsvr32 OrdoWebView2.ocx" from an admin prompt) and everything works like a charm. Thanks again for this "Easter gift" I will play with it in the next days. You are great!
-
Gianni reacted to a post in a topic: Microsoft Edge - WebView2, embed web code in your native application
-
Gianni reacted to a post in a topic: Microsoft Edge - WebView2, embed web code in your native application
-
Hi Ptrex, thanks for this post, by installing the material you posted I was only able to run the examples contained in it, but unfortunately OrdoWebView2.ocx continues not to work. Although the variable $oWebView2 in my script above is an object, it seems not to "contain" the reference to the Webview2 control. Probably the instantiation of WebView2 by the OCX fails ...(?) What is strange is that the example program Test.exe included in the directory \OrdoWebView2Control\ which also contains OrdoWebView2.ocx works regularly, therefore all the "dependencies" that are needed should already be present. In addition, in this post (https://www.vbforums.com/showthread.php?899415-OrdoWebview2-ActiveX-WebView2-Browser-Control-(Replacement-of-the-MS-browser-control)&p=5651133&viewfull=1#post5651133) on the site "vbforums", it is written which are the essential files for the OrdoWebView2.ocx control to work. What a pity that there are always problems in getting something to work.
-
Thanks @ptrex ...from what you can read on the OrdoWebView2's control description page it seems that all the necessary dependencies should be installed by OrdoWebView2ControlRedistributable.exe. literally: "In the "Redistributable" folder, OrdoWebView2ControlRedistributable.exe is used to install the control and its dependencies on a client machine. Launched with the /verysilent option, this program can be integrated into the installer of your own solution." in truth at first glance I couldn't find that executable on the HD, but then I saw that it is present with a slightly different name and that is OrdoWebView2ControlRedistribuable.exe, the name ends with "...Redistribuable.exe" instead of "...Redistributable.exe", a "t" is missing in the file name. however even manually running that file doesn't seem to solve the problem...
-
... a little digression from the OP Browsing the internet I came across this interesting page (https://freeware.ordoconcept.net/OrdoWebview2.php) where there is an ocx through which it should be possible to use WebView2. Actually it refers to VB6, but maybe it can be adapted here too? To test it I installed OrdoWebView2 SDK (https://freeware.ordoconcept.net/download.php?file=OrdoWebView2ActiveXControl.2.0.9.exe). I then tried to use it through this simple script which is an adaptation of a similar script by @ptrex taken from this link, but I receive an error from the ocx: "Run-time error '0'"; the methods are not executed and not even the browser is incorporated into the GUI. Does anyone know how and if it is possible to make it work here? thanks. #AutoIt3Wrapper_UseX64=N #include <GUIConstantsEx.au3> ; Initialize COM error handler $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc") ; Load ActiveX module $hActiveX = DllOpen("C:\Windows\SysWOW64\OrdoWebView2.ocx") ; Object identifiers Global Const $sCLSID = "{56335193-C129-41AC-B94A-B26B9B7469CF}" ; retrieved from the registry Global Const $sIID = Default ; Create a simple GUI for our output Local $hWebView2 = GUICreate("WebView2 ocx test", 1000, 580, (@DesktopWidth - 1000) / 2, (@DesktopHeight - 580) / 2) GUISetState(@SW_SHOW) ;Show GUI ; Create Com Object ; Local $oWebView2 = ObjCreate("OrdoWebView2.OrdoWebView") ; HEXEDIT.HexEditCtrl.1") Local $oWebView2 = ObjCreate($sCLSID, $sIID, $hActiveX) If IsObj($oWebView2) Then MsgBox(64, "Object's info", _ "Name of Object is:...." & ObjName($oWebView2, 1) & @CRLF & _ "Description string is:.........." & ObjName($oWebView2, 2) & @CRLF & _ "ProgID is:......................" & ObjName($oWebView2, 3) & @CRLF & _ "File associated in Registry is:." & ObjName($oWebView2, 4) & @CRLF & _ "Module name in which runs is:..." & ObjName($oWebView2, 5) & @CRLF & _ "CLSID of object's coclass is:..." & ObjName($oWebView2, 6) & @CRLF & _ "IID of object's interface is:..." & ObjName($oWebView2, 7)) Else Exit MsgBox(16, '', "Error occurred") EndIf ; https://freeware.ordoconcept.net/Help/OrdoWebView2/ $oWebView2.Anchor = True $oWebView2.HomeURL = "https://www.google.com/" $oWebView2.SearchEngine = 'Google' $oWebView2.Init $GUIActiveX = GUICtrlCreateObj($oWebView2, 10, 10, ((@DesktopWidth - 1000) / 2) - 20, ((@DesktopHeight - 580) / 2)) - 20) ; GUICtrlSetResizing($GUIActiveX, $GUI_DOCKAUTO) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd ; COM Error Handler Func MyErrFunc() $HexNumber = Hex($oMyError.number, 8) MsgBox(0, "AutoItCOM", "We intercepted a COM Error !" & @CRLF & @CRLF & _ "err.description is: " & @TAB & $oMyError.description & @CRLF & _ "err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _ "err.number is: " & @TAB & $HexNumber & @CRLF & _ "err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _ "err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _ "err.source is: " & @TAB & $oMyError.source & @CRLF & _ "err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _ "err.helpcontext is: " & @TAB & $oMyError.helpcontext) SetError(1) EndFunc ;==>MyErrFunc
-
If you want the text scrolling to continue even when you drag the GUI or even when an MsgBox() is in action, you can use _WinAPI_SetTimer instead of AdlibRegister, as in this slightly modified version of your script. ... But if you don't care, then forget it ... #include <GUIConstants.au3> #include <WinAPISysWin.au3> $guiWidth = 300 $hGUI = GUICreate("Main GUI", $guiWidth, 70) $sString = "This is a long string that scrolls smoothly and infinitely in a short label control." ; Create a child GUI for scrolling label $iMargin = 10 $sGap = " " $iLabelWidth = $guiWidth - $iMargin * 2 $hChildGUI = GUICreate("", $iLabelWidth, 20, 10, 10, $WS_CHILD, -1, $hGUI) GUISetFont(12, 400, 0, "Arial") ; Create a label wide enough to hold a long string without truncation $idLabel = GUICtrlCreateLabel($sString, 0, 0, 2000, 20, BitOR($SS_NOPREFIX, $SS_LEFTNOWORDWRAP)) ; Get the string width $tmpLabel = GUICtrlCreateLabel($sString, 0, 0, -1, 20, BitOR($SS_NOPREFIX, $SS_LEFTNOWORDWRAP)) $iStringWidth = ControlGetPos($hChildGUI, "", $tmpLabel)[2] - 9 ; Label is wider than the string width by 9 pixels GUICtrlDelete($tmpLabel) GUISetState(@SW_SHOW, $hGUI) GUISetState(@SW_SHOW, $hChildGUI) ; Update the label data if the string width is larger than the label width If $iStringWidth > $iLabelWidth Then GUICtrlSetData($idLabel, $sString & $sGap & $sString) $iScrollPos = 0 $iMarquee = 0 $iScrollDelay = 40 ; AdlibRegister("_Marquee", $iScrollDelay) ; -- setup timer-- Local $hTimerProc = DllCallbackRegister('_Marquee', 'none', 'hwnd;uint;uint_ptr;dword') Local $iTimerID = _WinAPI_SetTimer(0, 0, $iScrollDelay, DllCallbackGetPtr($hTimerProc)) ; ---------------- EndIf MsgBox(64, "Info", "text scrolls") Do Until GUIGetMsg() = $GUI_EVENT_CLOSE ; -- clean timer-- _WinAPI_KillTimer(0, $iTimerID) DllCallbackFree($hTimerProc) ; ---------------- Func _Marquee($hWnd, $iMsg, $iTimerID, $iTime) #forceref $hWnd, $iMsg, $iTimerID, $iTime $iMarquee += 1 If $iMarquee < 3000 / $iScrollDelay Then Return ; 3 seconds of halt when $sString comes to the initial position $iScrollPos -= 1 If - $iScrollPos = $iStringWidth + StringLen($sGap) * 4 Then ; Initialize the $idLabel's position $iMarquee = 0 $iScrollPos = 0 EndIf GUICtrlSetPos($idLabel, $iScrollPos, 0) EndFunc ;==>_Marquee
-
_ArrayUnique on multiple columns
Gianni replied to Jewtus's topic in AutoIt General Help and Support
Hi @WildByDesign Thanks for the kind words, ... glad I could help ..