Leaderboard
Popular Content
Showing content with the highest reputation on 12/01/2018 in all areas
-
The GUI looks like shown in the picture: It contains a main menu, a treeview in left pane that lists UI Automation elements, a listview in right pane that displays detail information for the selected element, and a splitterbar to adjust the width of the two panes. Detect element The "Detect element" main menu is used to detect elements under the mouse with function keys F1 - F4. See How to topics number 2. Left pane The left pane is a treeview that initially lists open programs and windows. Generally, the left pane shows UI Automation elements represented as treeview items. Right pane The right pane is a listview that displays detail information for the selected treeview element. The information is grouped into different types of information. Only the relevant information for each type is displayed. Invalid elements When a window is closed the elements in UIASpy becomes invalid. But the elements are not deleted in UIASpy and can still be handled and selected in the treeview. Detail information for an element that was calculated before the window was closed can still be seen in the listview. In this way it's possible for UIASpy to show information for eg. a context menu that is closed as soon as it loses focus. Listview features Listview features Help system With completion of the Help system, a lot of information has been moved from this post and other posts into the Help system. Sample code creation Sample code creation is implemented through the UI element Detail info listview page and through the Sample code main menu. Sample code creates code snippets based on data in one or more selected rows in the Detail info listview page or based on the clicked Sample code menu item. UI Automation code is largely based on COM interface objects and thus on the function ObjCreateInterface(), which is one of the advanced functions in AutoIt. The main purpose of Sample code functionality is to eliminate the complexity of ObjCreateInterface(). Sample code creation either through the Detail info listview page or through the Sample code main menu can create all the interface objects required in UI Automation code. Another purpose is of course to make it easier and faster to implement code for simple automation tasks. Through Sample code creation, you can more or less create all code in a simple automation task: Create UI Automation initial code Create condition and find application window Create condition and find control in window Get information about windows and controls Create pattern objects to perform actions Get information related to pattern objects Perform actions with pattern object methods Add a Sleep() statement if necessary Note that the UI element used in sample code is named after the selected element in the treeview. Also note that both the Sample code menu items and the sections in the Detail info listview page are placed in approximately the order they are used in a simple automation task. Sample code creation through Detail info listview page Sample code creation through Sample code main menu Supported applications Most browsers including Google Chrome To be able to spy on web content in Google Chrome it's necessary to enable accessibility by entering chrome://accessibility/ in the address bar of a new tab item, and then check the five check boxes that are located in a column in upper left corner down along the left edge. Then the accessibility tab can be closed again. It's a global setting that applies to all open and new tabs until Chrome is closed. Without accessibility enabled you are only able to investigate the outer elements of Chrome but not web content. Internet Explorer Microsoft Edge Mozilla Firefox Most Microsoft applications and applications developed with Microsoft software including Classic Windows applications based on the standard control library Modern Universal Windows Platform apps like the Windows 10 Calculator Programs implemented through .NET Framework eg. Windows Forms applications Most applications provided by major development companies Automation issues Automation issues How to topics If UI Automation or the UIASpy tool is new to you, then you should read the How to topics. Examples Examples that demonstrates the features of UIASpy: Automating Notepad. Very detailed example. Automating Notepad - Windows XP Examples about Sample code creation: Automating Notepad with Sample code - step by step Automating Notepad with Sample code - all at once Chrome - Clicking an extension. Compact summary example. Click Save As... issue in Notepad examples: Using Expand() instead of Invoke() Updates Windows 8, Windows 8.1 and Windows 10 updates Threads UI Automation UDFs contains all include files. In Using UI Automation Code in AutoIt you can find and download examples and read information about using UIA code. UI Automation Events is about implementing event handlers and includes GUIs to detect events. IUIAutomation MS framework automate chrome, FF, IE, .... created by junkew August 2013 is the first AutoIt thread on UIA code. Zip-file The zip contains source files for UIASpy GUI. Note that UI Automation UDFs must be installed in the Includes folder. You need AutoIt 3.3.12 or later. Tested on Windows XP, Windows 7 and Windows 10. Comments are welcome. Let me know if there are any issues. UIASpy.7z6 points
-
Try this: #include <ButtonConstants.au3> #include <MsgBoxConstants.au3> #include <StructureConstants.au3> #include <WinAPIConstants.au3> #include <GDIPlus.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <WinAPISysWin.au3> _GDIPlus_Startup() Global Const $SC_DRAGMOVE = 0xF012 Global $iW, $iH, $hImage, $hBitmap, $hGUI $hImage = _GDIPlus_BitmapCreateFromMemory(_Image()) _AddText2Img($hImage, @UserName) $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage) $iW = _GDIPlus_ImageGetWidth($hImage) $iH = _GDIPlus_ImageGetHeight($hImage) $hGUI = GUICreate("", $iW, $iH, -1, -1, $WS_POPUP, BitOR($WS_EX_LAYERED,$WS_EX_TOPMOST)) GUISetState() _WinAPI_BitmapDisplayTransparentInGUI($hBitmap, $hGUI) GUIRegisterMsg($WM_LBUTTONDOWN, "_WM_LBUTTONDOWN") Do Until GUIGetMsg() = $GUI_EVENT_CLOSE _WinAPI_DeleteObject($hBitmap) _GDIPlus_BitmapDispose($hImage) _GDIPlus_Shutdown() GUIDelete() Func _AddText2Img($hImage, $sText, $iX = 5, $iY = 70, $sFontName = "Comic Sans MS", $fSize = 22, $iColor = 0xF00F5000) Local Const $hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage) _GDIPlus_GraphicsSetSmoothingMode($hGraphic, 4) _GDIPlus_GraphicsSetTextRenderingHint($hGraphic, 3) Local Const $hBrush = _GDIPlus_BrushCreateSolid($iColor) Local Const $hFormat = _GDIPlus_StringFormatCreate() _GDIPlus_StringFormatSetAlign($hFormat, 1) ;center text horizontally Local Const $hFamily = _GDIPlus_FontFamilyCreate($sFontName) Local Const $hFont = _GDIPlus_FontCreate($hFamily, $fSize) Local Const $aDim = _GDIPlus_ImageGetDimension($hImage) Local Const $tLayout = _GDIPlus_RectFCreate($iX, $iY, $aDim[0], $aDim[1]) _GDIPlus_GraphicsDrawStringEx($hGraphic, $sText, $hFont, $tLayout, $hFormat, $hBrush) _GDIPlus_FontDispose($hFont) _GDIPlus_FontFamilyDispose($hFamily) _GDIPlus_StringFormatDispose($hFormat) _GDIPlus_BrushDispose($hBrush) _GDIPlus_GraphicsDispose($hGraphic) EndFunc Func _WinAPI_BitmapDisplayTransparentInGUI(ByRef $hHBitmap, ByRef $hGUI, $iOpacity = 0xFF, $bReleaseGDI = True) If Not BitAND(GUIGetStyle($hGUI)[1], $WS_EX_LAYERED) = $WS_EX_LAYERED Then Return SetError(1, 0, 0) Local $tDim = DllStructCreate($tagBITMAP) If Not _WinAPI_GetObject($hHBitmap, DllStructGetSize($tDim), DllStructGetPtr($tDim)) Then Return SetError(2, 0, 0) Local $tSize = DllStructCreate($tagSIZE), $tSource = DllStructCreate($tagPOINT), $tBlend = DllStructCreate($tagBLENDFUNCTION) Local Const $hScrDC = _WinAPI_GetDC(0), $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC), $hOld = _WinAPI_SelectObject($hMemDC, $hHBitmap) $tSize.X = $tDim.bmWidth $tSize.Y = $tDim.bmHeight $tBlend.Alpha = $iOpacity $tBlend.Format = 1 _WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, DllStructGetPtr($tSize), $hMemDC, DllStructGetPtr($tSource), 0, DllStructGetPtr($tBlend), $ULW_ALPHA) _WinAPI_ReleaseDC(0, $hScrDC) _WinAPI_SelectObject($hMemDC, $hOld) _WinAPI_DeleteDC($hMemDC) If $bReleaseGDI Then _WinAPI_DeleteObject($hHBitmap) Return True EndFunc Func _WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam) _SendMessage($hGUI, $WM_SYSCOMMAND, $SC_DRAGMOVE, 0) EndFunc ;==>_WM_LBUTTONDOWN ;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2018-02-02 Func _Image($bSaveBinary = False, $sSavePath = @ScriptDir) Local $Image $Image &= 'iVBORw0KGgoAAAANSUhEUgAAAQQAAAEVCAMAAAAxXGsGAAACE1BMVEVHcEwCAgEIBgUEAACcLi4EAwMGAwOHAQ2qARCTAQyRAQmkAQt8CA47LiibARCzAQzAAQ3LAg7WAg/gAhAIBgbrAQ95AAMEAQEZFxIGAwN8AAIEBATl3rUMBgVnY1Lp37XZzqLm26/Mw5rv5bnx6bve1am6sI3r477CHib07MLp3rLVypvXz6zWzKDw5LP37LnZz6XXzaPSyKHg1KTTyJrb0ano3KrZ0Kff7LioWUrfLTzmQVDYzqPHfmnbFya6a1jKn4CTLinl3LTd1K7c06zr4LPe1rDQr43f17Lb0qoFBQXQxJMHAQHtZXPf1rHNxJ3Vyp0DAwMFAgLGvpjCupW+tpLJyqYDAwPIwZy6sY6apX6QnHfZ1bIEAgKmrYi1rYsEAgJziFwEAwNkfk8DAwOBkmgDAwMDAwMDAgIDAwMEAgIDAgIDAgIjIBoEAwMFBATg2LQ2Myzk3Lvn4MFGQzjd063Zz6bx68/j3Lrf1rJeWkv89NPh2bZwbFvi2rj/+9t6dmdUcz8PUAIsXRyytpHh2LWVjnTm379CaS8sXRuNm3EDAgKspYoDAgIDAgIDAgIEAwMKCQjCvKLd2LkDAgIEAwPp48UDAgLt583l3b1VdUHo4cQEAgL999Lr5ckEAwPs5svr48Q5NiwEAgIDAQFfW07q5MfRxphuaVjl3r5NSkHo4cL//+YEAgIDAgIEAgIEAgLeQ1HhAAAAsXRSTlMAAQQQRzYaarjj//+7XJD//////yv//wwISPAlGxcmvKyEbW5ZTFQw/53Q3/P////////+///////////////////////v/////yH/FP////8oQP////8v//////88//9F/1v/S/9OU2hXX2VzhWsd/43//4r//////5P//53//rX//////9b/////b+SAi4+Wn+r/enf/ff////+D4P+T/+WnmYe/' $Image &= '///H/6f//0JiMzp0cOCKAAAkbUlEQVR42uSWh5bjIAxFfVNtyBo8TGv//50bSBUeZM85ZutzpaMryUmzpFBK2gBGVav1Zru61XFu4Vwk74+4CSEWqa98ZxoOKBWa3b7tOmO7w484FPK+RXNAsRWlckmhAEFanIm7ht5e1e5GQxBwmUSBuj+qkJiP++ZiRNfWRrl0N3aTTzEdFNyBQwH/S/MClTVZ8vTWOefT6SKG/Uykks4NgjKIpdGg7xAKRmT1bCIC7wd/VMJgNgtGILKeOqkAk7GJ2r93RwJnRQzWtgpdPaWZ9EMFCMVFQCEkmw4RwcNJCYN1G4FSW5U5ScndpmjqCR0zV2sY2df7aH4IIWFIFPpC2s8OSpSd1BRoZQobgmbvQkSQlCg4257Howyc4RakE35XDOjIIJ6PJpr/lI4QEoW2BPZWL9uY/DxSyXQEgvw+Xwf3dFGCMLj9d8MPaaX+RaapKr4IRFkGwS6pf/ZXCE8xI7oXxb26AG0o1SDwnT6M4vO1M+ZGITw9mLevpmVk0AJ7rSEotpQzfGOsNXYIZwr+eS+a/wutemPT32Xnh/jL8P6xrFtYrV6P+ozXT8rLasFBGIii+7yueasFl2kJmbr+/1ftDQx1PRD3U6X1+Bun3emeodftCVp7ALH2fO1r7YPAD0JcQtRkUR2EvmSR85tM+P4KB+78sRPx/KxeIzSgMUSCCbUfortbx9P1gj3dA4iSHgLobukAF6cgw71PnlNf/oQ9YrA9KA6hGpcKxpTWkiFjqcJaNjQcFWxt0x3tDrYjHo+G5ECNQQeajKZKKUjA/+bv2Xw+gwg1HRTssENmImTMiBhYYqkYEeCLXGgrmSHhgecHKLhPAlgsqphuUjIdYCZLBeo3wvfKSfj6eHleTkjOIueRE0ueb0KXW6KnBxAJ/fsl0MMSzGStRAIcVBJWn5CwmfB5CfwwJR8R/TNrFzpuxEAYxwPFtaSFY2Zm9jEzUfD9X6T+PN7E' $Image &= 'Bw7uSP2L2yP/NHbAaXw7pKmUG8Fd4wgw8JBPCGoQNMLp0hkbwiAQGjbgR5AnZGAGoWMvRug+Pd9ZQg0jNN4gra8xAn6EnYtTGAhBCOZI0Ajdu5IJYaG3wTFgQvicPNQGyA/DqAMIRwah+0SyICw1iJC2EYYud9gQrtQgAEB4tBuO9mMEpXB6xoMwn6ms839AOL/2tIEv7CMhhAEUrs94ELD6xgzcCGtUAgjyhAwC3zoSIgyCAMKxZDkTFALVKEEmk+FEOPS0QRAAwT4SBBROb3gQ6r/F9Ikg456EteZyIGiD0BfxswQgeIIQVnc4EEbqHwm2AEong+DYDkJogyj08ehgniXQKeF1e5ssCKON7wUA4NWnmoTbrWqJIlxd60EIQ1IwzxIAAwTPuz7nnAT3PYURIAKUZkS4vZ0VZBB1REEwqxBmfcwGEAQrgjtLAASoJ/WLD2FVHmsEunGI1HbYmw2C+Aaq+3RniwFhY7TmefBVQJW6Y0JAN/e+TwgdSGNEkUHwdlkeIleB4L4R+0yAsnwISB77xiDu6OgoDAnhOhmEddWm1Zz7Xjo26DUCRJB9SN9dXvAhXK3O6kmIL17Mc0YcCt4xDFDCCGOOy6K0ZQAAElAED0OZzstzJgQkrwN7Eo72Hx/3CUHsXC1ZJYng7BMBBBTB0K8eXoRVeWJPQhchwACbgQfBef+SBgEyAhgCRfDrV5YJIf4pW/LaGoWj+Elj1eBTTa8f2QjL486PlFUJssgI3N0NPPx8+oRgahGh8g/rqmckn/cIwTDAYPZeri4l2Eu1bSBYDJ8M7H3wCwQDA6+dv94WnxJAsDjU0t9RTpVHhcLJkVaIOswnNI7P5VJC2ZNATdhHoW1QnQIFQAKaoFh8fVs8u1XFCO2lBEpYfp4q6/K5QulwNlKBIJw9XJIXSwkjrFfanHTcgWU+EZCAIvhH3l0wtw0EUQDupbUHO1hSmRlUdJkpMMnYYXaZmbk/ve9WL7Iu8smRpXM8' $Image &= '6paJvlnS1ZLHS+NeTggkmNA5wH8/Y3R0ZHhsavqSxNX+mbO9RxhOEPY0fcWrCg0aBIFAabZWWm0gVNJHaKB7gBiECHPzCEGYnJ4a88dmZs7ePY2/qGuEeGgCRESgWl0gqNVnc0MAAQ2IAAKEZEL/3L2pUxNDOmjgDOHInua1IFkAAgQJaFD3vNr9fBCYB9FEmLvayITpB/MBAgncIRzbGmuMyjBAGoCAaTBb8zzvoecOYV4MiPBodGiYBm4Rjm61JAJrIcyDEtPg4eMnj5/mg3BEtgITATGnEaCAwA9pBdcIR/bZJgPGQlODx8+e5IRAA0SkJUhBcEBohAmmgnsEZZaEAsLKCMJCS5Q8eHb/WX4IZjkwEQwEpkJnENTigtALAldEGtTF4PmL5y/zQqCBgYAwMiFIheNpIh0CYnPsDIEjUhqj7AdMBBg8fPLs2fOnL/JDoIIVAZEaYanXDhGVzbHXCTMTglQggjZgMQDhVY6ZEENgSUQRoJAzghn8n/kVMQbpCiYCmuITGLx++spdJnBGhggI9wiHNluvHYggS0KpFiA8u/8iQLiJ6G0VrUdkDIERzYQJ5wi3NtheCI5UiCBgTRKE57kjoCCSEYY6gqD40nojVI+uh7IohAhP0iGcTgyNcMKK4LYxmnFQMoEIRvRga9QDYhHC06evX+eJgFywI7AahtwinASCUQbmlWSQCgFCPX8ENgUgCIEFwXkm+Ad7rK8Q72l0BewJ4aqUG0IFr3oNTpVEwESIrs3uEWwGSgYEVgUgjAcI3sOFTKjkhTBEgjAWI6BlwMA1gu22Xe7OKzVCWA/MhJwQkAYshEYYBiNGIrhFaISK7QrIhEBBI4TLUm92hN7TJ4KOOGlHoAERXAWmg/XWLXaFLeU3fdWqRqjh2iENQrIPKkEMYghGR6CB7zIuHtlmVoJ5oxxbY5n1gM5IhJtAyBQwmLAihMXAyXDkuFuEM9sbBgZCEHIZVZZVgQjP7muEG9czG9gR' $Image &= '4rXgu0U43cgEy6kzUiFEgIJGeJEV4bSfhECDiQkS0MBhOWyP3csdP1yRAVGCgiC8wKX020wIvf4JGwL++cGOqAGEoNJGpESobCeAJRQRwlQQhHfXsyNMxBBGUQEyDiscLW1HSgR/e/I9fEpfUUcQ0BRePH0OhBstIrkajpuZQALkgEbwlwtB2e71lXoAQlXPh7oni3MOCEwFIjTqABWAAug0wgHbjbyKXQEXk7o14iqKCPdzQjALAq2QibA8CMkPAEIqDAwAoSoIUg/3MyL0VoBgdoXREAEGHUfYYV0SlGIqNOZDrU6E91kRQgUDQR8c+MuEwLBkQ1APfWyN+SDI0dpYmAuNlgCDjiP4N4jAZIg/X4S7c/kN6oGbwvP77z5kQ8A/UF9GIxcChlEmgtRC5xFu7kh+pATrAZdREYRnH7Mi9J72g+YoDHpF5mxkdBYhVg6K2WD+RwwRSrMWhHTx6dMn/Bs/674wBoYgBXpjVKmjXYRKi56guDBhPnBTeEiEbMH2CAeET4DU4RDBtFA8VpB9SRDuP/l4LDsCQp8u4a9wk7F8CLtsT+RiVRBBDpjkeAlHbHkhMPJGSP+/gzuM1/Tazp0xHwShNFtIhEYmqFgWGFsjTtnWEOFx8RAQyvaUQFIE8wEIemcsIMJOY1GyBeaDLI3BzviwgJmASDZgKkQQvlwfdBydRPB3MeXjTywzd2dBqGJdKhwCyyE5GTgl5XxpvJsQkk0YSzE4SoRkCM6HPkF4+BgIX7+liu5GuLnLuiiaJDIfqsHpkgeEt6nibpPoHgR/t0lgeV6jkn2pvEkPSSB8/1EohOt7LWUQO2riRVQREQZ3tmgHTAk9HwqLcBSZoCwAxsNQOR8KiXAMCC2f8BnWA16+pMdDvQMI7ayd9oOW5BjcbTxS1V4QQT30AaHuFQeBAQQVe2qyDUGGZM2rdTVC+rhJBIbt8eZsCgVFQCYkbozmocIWNIXiIqgmD1uPQUhTqBYQIWE60MOo' $Image &= 'B3RGIvxsFS1hviVEGoTsgT3B/rD/+P/CbMHp0qw3WzSEPSRQKvkxrayHvmq3IOSodJ0IXBUs1w3h3TBE+FUsBPSEFG87sGFAz8g6EYqWCclv1BKOC2wKmJH1Ui4IydPkdqvIs2lwbbaEMg8W0BQ2jRcP4fSeFG9aJE0BM7JoCIN7mu6Jtjd+0J0xQPjdVhhIXYMQW5aUpUsyFVaiM3YCoXUMLiE+2WNxY1S2AaGMciDCJo3wp1AIP1ZZXslqW5e2bBqf7X6E1hGtGB6vqaTLB7MpuEZgpFszsiEM7iZAQhj1MLBpzX+HoEwFNAWN8LdYCAmX0kqpZrfNvqmWColgv2JQsXcTW0BoK9LQdRrBtixxRDIjgs82lKul8YIh/OPuTpvaNsI4gFdkmnd9xwxJ7/uG0MFN3ze8cEp65BLuyrgxinNP6so9PFOPUz1SY4cUA3VDKA5HTnp/xu6za/FY8lq2ZMKY/HOAe2Z/s/vsIckuvtHb529qLZUxEkLGTpViZbcQMK8HhgO9VC6hsTJGGg42OHo5TvIyk9nc7iCoo7V/gwgj0RDSzOgLwQXIPR4ESrMn0Jaxa0Y+mY6CUC6Vi7Hys0j+iGuweKfZ4WndgFFh7Hx9PrBm3D89cz0CQrk/BMrjQ6i8QQOflkadp0xEGD7BEaxeo7NyH8NhVxCSr0f9ZPShF46fuX7N6jlVcMuUFGNR11VMz+94/Aj5JoKmeCZOU32kISKcjYCQBMiUmzmZqwJAuhwe4pIGYO8Sgo8gPEPHjs9GQzDKIgwFbphu2Z8ky5Sa0atOSeaU5MJvjVaElOu6eV8mM4aR2lGEwCShttn33IWICEWepA0AWRQIhIFdbsYFcEs8HldJIkAyz2PP5XUT8G/MtRDkHPwrfSBQTdC6zwr0euS5m79EQsgiggkAblkRAxw/guQSAh4CwkD1tAM3bLvasnBIoZadZTuD0PHzpmmmoAclj89HQ7ARAVs2WlQEG+lDQC4kIARc' $Image &= 'eJtg25A9yhvAHJhrGjgA5ul8jPQ4O4Scsk3XYiBkAMDJuekwhIyomsil+xCQpIrdQ24qTgOIlk9WAagT9IPwGrWZekT4R+HPLMRAKOti+ILJOiMYcENQSC4fQhKHvveX5sDM82TJoD+EwqvRPwL44GIEhKIDkBQKvDeYgiHdCcGWNTLlcXkIGYkwV2omhS74+5zoEC7P0aN9IHz8eugEqfyb5yIh2E0E2R0MHMY+BLaN4AKYZRmPS1REMCQC7clNHBk5OSswkKlmo60wP6PQFKkFDQJjhLZZF5ciIFgCgZLOAmRaEVyAk2UMzgo5WisJLqTxEKpUJxhWDRts/N4GLywuwsdYEzqHJkuC0S5HRrAo2GijFUEHYNsLCbtMEVwSgQsB2IRwGoCVHLDF96l0enJSd7NgxETIH3o1ZCSo/87IhUgIcwIhqVsyui0bTXGgyqsEc0SfLlNk8wlhrkS5AWbJxmJByYER86A2X6RHAns9Yzt2MwaCC1VbBJqzBSULULXFDJjB8ZBMeQMCuXiH2EYoU0wAfQ6rRgYn02TSZTkAI+aZHSJQ85RnasHxMLQ/DoJVhWaqc5Y/ow5gTLdYzHEFH1fZQyjP2W6ZwrAXzDkAgItIwPSBUH5NdSFSC6mWBz65svTrj70j1N1T+GXcldGtYMq6adtZV1RNG8xiC1eZEPxJiZVTmtlA6R+BHAKdoU1h3/HfOEKl53SfRFvDJ5JRV8YbFqdcxebbBNxwipEgwrJ9IHxGCFT+FccI9DdfmL4VDSFSer1WkZ5j/hOokh0fYfnV9jMkehXkkUeMt3cVgRIuk4FUXIQVjqApTxNUd3dqeNj89GAilNKluAgfv+K1ure7e7V9z52Yf5wIEbCCJ7NRESivhD8SqAXehWvoheH+EPoPIUSPGqb0CjWSmt5xN4kl4eAeRlDD5N9RNJhUAjyiJJydX3p/9xHUEP0HLYvv9LhloGvS555AhNBTpOCkceCF4zMCodBzfu8v' $Image &= 'u4TgU6BCqMzI/ukT5wlhF1Lh2SWEwGqp07VZbd/X02cuPnEI1jvRrj49N31m9olDKLyjKAS0Vgzg4A1LBy/1j5CxWpNZ1a1uOckMHnYqDCFpxEP4uPByhINWbWT/8ZmzlxGhET+FwkkwrZasgpMOFUgatL3O6UGE5EnXddPifO4UvjRZxHVCufySj4D2jKoM8ZIwc+5CTISMka7IMFj1nTgwIxQh4wDYcxlmGDZi5NItCEnvSMHBv+eKI/y5iD2hKBHCmq75nnaYPhEbYRVONhFykIuwksgBZPXtYZFzoKpTF3GAIhFy8RD8V6I19XsOyVUCfwAqLkIdnEozq2D0jvAhmL6SMW6DM06HtqKTuC4zPQQ7OkLpXfV1N/U5M6+LZ85fuBMLwYVspZlqACHJwhRkMaTgGZw0cIA6SdHFw9fYCOF3brWOhn38AaiD56/eWUrHQDC2W14HYEQgUNwuI4LVLUoGAGGS3MBhLVVSZ0VCiJQ2BE1x2YVKwszBixyhfm05YrAkGC4zsqtZRHBJQKBkKhSdtXWMVZ+SC+KlyQ18A6VcLHIaiIGwRm3tdk8nPvVy4uzs1drC9WvL6166AyRF46EZu6K3IdDwkLc11f0GqGZRsgC88YwMKHERhqilIQdLmobPPwmEm7WNxa/GPitsbvaEkFmF7di2wdIVtyMCQwHHdK0wBAZgygsZzOqIYEXK3QOdHn7S2kYD1sVzl67Ulmr3JiYSk5WeEHK4xLFzWLbqBUxDgZAVX5Er61bakmxBQCdHdgTb6oAQeUd+9/kezxI0LAl8crh8pXZ/8cHDQ6NTiaPFR5ubj1qiQkhVmc6bbgDUC4RQZ4aRIYRV/GoC6ijiegi6UQU0kBWB7TSCpnUkoJLAEQ6ev4AIG7XrhxKJqcRovrDeEnVJFPEjmPLyq+tDwI6Q7oygMzmwsqJicA19xxDWEKHrPTqafCQSJweOsLS4uLBxaiyxlZia2jpqrW9udkdghJCR5cHG' $Image &= 'Ud2K0LxPp65CYIYUcJrrgjqVz0Ds6AjWjy8+1UM0+YQwr4sXL9ziPWFxsXbv8EQisbW1NZUYLzW6I7gAdeoUTkp0CQcYsjgA2PLG9m1N7QhSwMT1QleE1cgIPzxPB+sUxeHKCD4rTgiLD/44lMBgd0gcLS9vbkZAYIUGRpcKdhMBe4MpGPAlRXYd46RF6YyQi4Gw8rxscrflwhB/5zXcOcx6CKIsbPEktrjD1ugRa12MikeBNGTSAHprefAGiZOWCNgzBIS8rcmHYABkBAvlTweAUFrDqiwyQuGt0JvWvE6CJQHr4rnZq7c5AmZhcetwAiMceHUYz1dotiCEZqpgNGRy4DSIhhFCE6KO9+kEEJoGhGACGFZ/IQSLEDpqaHKVgHURERY4AuaBKAsSgQer5AdHLO6w3poGNT3N95JJ/M6mrSUYOH0SQnP6MLohMPCtoOp6xjBXT+4cgnqCPPb18DR/G8JLV+c9BCwLowkKVkkxLpZpviCEtANVLPEo0VAh1PUmgr4KwEIRMGJlldHrdddluebUUX8cCNQf5FssnTh7/jIhyLJAPWELk0CHj45YDQ6x2YqwzABjSgEql8wrEr77dAqtUSHg+tIfk1mxwg1WOIKm2EXSFNGsi+LdVDjCTUJYXFg4PRZAwFcIkfgobzUe0ajgxUFnRkYPHjI4HKXupvDskQ4SjYIvjBBaFXIObUpymbQlo1fNyA4rb3R6PJxOnTVREhQISw+WJg4rEDwI3iVKnEKmsdyeotugpF0ZveBPo5JyK8q4zDCY66brFgW7TVSEwuvK7k9FUfNKgkDgC8YWBL6J+GtsVI0ghgaXQIoCNliF0PBnWZ2/Kw11VDB192TsnhB+8+IQRziOM2QQYbEm1kzqeFUiIToD/hZMOAJZRUCwKtGDCFqngog/WpZKfHKYDSJsLPwylujQEzyE0eUBR1h+Xd0PEIFGg3wTQpwhgwiLNVwzhSN8JEvjenvIog+E/hOsCeoPyxsR' $Image &= 'dfHE2XYEWjOFIVAGG0G9cyKE44hw/tKFW0EEccISinB0c9ARXlN3BIpGb8QoEO4EETZwQxmSqcnHhVDYqRCC4llZevc9gYALxlt3NgjBWzP9ciikJ+w5BHVGxOQww2dIJcLSwmJq7IlCoNv46PHoZl3EZYIK4T4Wx8OdEY4QgjrLlAHtCThBYl2UCDdvqxCwOI4nME8YAl2IRIRhvmgOQaBt9Z5EeKX7k5BYF0VPOD+rRqBttRJhsn+EnU83BC04HPDt/LEn8Bny5rwCgaYIJcKHg47QIARFaL04jDOkQKgpEfDM8fMxNcL4HuoJ6gUDTQ7hCLh+nji8xxCoJ6gFKPhu/hLhIm4d1AhSYWxCgbA1ikdtA43wTufW0wzZEwJNlAGERIMQ9mBN0DRRF3HnIBAuhyNs4ETZjjBl7ZGeoJooqSRIhHPhCDRRBhHKKysroQi7GkVhbEOgQ2eN6iLfPslVcwgCTZRBhOQeQiAHH8I+OUPyI5VZvnVQI5DCxpeH2hAmCaFjHu1QoiHQcAiP2DngRx+FIVBqiydxueBDGN9TCHS0Sq+bH/ozczAUgfJgKTHmRxBz5OAi8BcvdZoVCGH//ubkwLcOXRFo0UQIicLeQVBfnMcTlUgI3ukCIUwVaTiEZpAQCIJmSLFW6o5ACjzbCJ/tUQSaHHAPGQEBU/trbKIVYXzQEPxZJoS2CknLhKgIuICeIIStxPqA1YRwBC14tHQAEabFgjECwgYqEMKURT0hSnYL4V2FAL3EuniMv4l9BATaRkzQHSyf7UEEWjbKyQHPlaIhkIJAGF1f6ZJNVQjjsSI8ejf8ItyQPGCMjkAKYkw0BhOBeoJ6fdAnAikgwlR+oBHuhh+q4OeFihnyzNloCKQgED5ciRPC6DnxEIaeCgkuE8SCceZEdASaI8QkGSO7hnAgrCOIGTIGAimMyeqIK+f4GRSE6MOB+gIifDjQCM+HPxXLlwkxagKl2Re2Est7BUF9MfY5D+Gy' $Image &= 'QFiIhIAKuLOeyg8Ggtrl+U5TpKbR5+wjwnkPYTESAl6OOIzHS7uAEHdZSgjKY0Y8V8KeIBAuxULAp2RQoTHACKF3eEsEcZzgIdyJhEDnC1Of7S0EjW5WGRE9IS4C9YWJMdo/DDCC+hPA+CayPwQ6d5yyBhZhmRCo+RptHY61DYdaNARSGN2Mm91DIAXKUHA4XImOQA8LWXukJ1An0AhhehvhKiJsREMghbHBROChe/0V1XFITpH9IJDCX4d++GFl8LLJo0Sg4bBzCBt3Hl77Z8dyLSQ/tuUH36v2f4EQFO+fcKAN4fZ8NIQNzEJtoVarPZh/eP0ndf5ozcM/HirzF/7oOfe+uXfvr3viyzcy33777TM8//47PDz8opcXxI/n1dee6MA9JgJvOoa3HXMHM3/zKs8Fnv/+u8Qze3F2dvbiRf7r/P+MnQGH41AUhfe1ml8Q2oj+oVpIIKCMUc22rckPid2FqYVhYQGy7U/cc9896U3mbZ4cu8uu6ST3yznnvljM6YS//31rr1g/f37oJ/Gh99sVn4H4CXyN6VuvN68Wv9r22l6v/g/qdvV/xzc4v9aH7l7kydphzsXiS1SGwiEOgFDNh8D5x9N/h95vuJ0WIgfMJATquj4dj8fDIeu6x2O1uld30Wq1eqjKsssOh0MNTJ7ZEwWHh2R4GfU59C0QrgwO59OhXFV5niTL5WazMEX+30Xfn7ZJ8QnCz98RCDK/9/6Hl59ebkyfqHoATx/Ty+wYPutKTH+vqiLP82a73LjnkX29TXY5rg4k+3358vKSCY/DERJ4EKFc6AgiUQkN/vbswb02CHEGths0DiGEHwEEcwAN8Jwf94Ab8ADEzydxfl3r+J1/+Pd7laaFzO9vbZzGzVpuAMe1IhUWgAEaxGE8vE28zpfL5dubEcGFeXmh/6oQGjrBIMS1kWNz4d8iM4Vwm4DgAUBM//v7uz4Czk/zQxy/LDm/PP9km6zXIwDOQJBEs8vzIgULpVGK' $Image &= 'ACOg4fU6qA/fQUCA6x+z8l4R92YmAm4HQjjWAYSgAxQA9ARg6ZfnrwTo/woAmoYOCAAElpBkJklDFCBhLABDBBSqGsZA1b6eGRd/B0B07B731CBM9sFYC3PC4Vi/Xr4FEH73Fvh4ErgRAD3YN4DmXxywogMEgFjAhTkMhY7YoKJAAtqNUOwhgQEUbI1aUKgnUKfSqbW/he5RCYQlIMwygrNOKEYQ7LQEBGxBlgAAGAG1AK/uCXQagQoVsNupBdiDJqfV7CYcsZCAKgl0ZiEkDEUpYkIgNcVT8hRQCQUhBAziEHIPAWYDhFZ3pKWAPWhrwBOQEPozwIDAQ0MACwBAogQWbtKFvINQTrNBS3hPVCQhKAZlwYRQhxACGcRlEPYlIXBH/mYPWBESQB+C88gDrEHugaQhgegPq4wwcQQhNYFW2QEFPDFgsTcWQ2klNKyEOQycdsIQgn+XBgQlAOlB6NevX4JAexAItAgJv/NFOEzBdskYRH+sdzi/G1WGQzSQDbUEVgdET1hTCAYD8VLuvREaXD7CILjkYr3WdweDcIMVVHoWBIDBeYRnoVEK4IH+LJT0MVhMpoC3MJjWTaVjoRxkg25pCdREQMKEOMqBZBYEMud28E5YEcKbUPj4IALIe6B/JTj3u6AWBDwN+CLwCBorgphc7PwWBgcgxBGIBjsiL0aNSRiQGoFZnBeGMQQpRpxBcB6TWuhjcKUHBMFFEZBA1kFC4DOCjXP/fU2ZoOCmGblRRWgy2Jbal+aJXlXOSog9ifCQ8nQCKNSkgET0OWghEBAE3AZ8Her3IRAIgcAFsTokGRfNa7gzDIRZgnVJSSZ7BrMhWDGu9qBwJAUkArpCvQmAgDEQAhlzIFelCeIIeC6IzGk1NZ0d14NYSkeoIywbotQaYV4kiddDIAXZuidQaNsbxByAAIJw6qvAXGA5kAtbG0YuH4mEiy0Ri+/CGsI6QqIhJOR2Yk/D+HM3WCdsBackq3z2ApYERAQ8' $Image &= 'l3sXZBBMgJUo3NUG20SvO2PeSPjjlJwzDhD9QEM0IFEICGtFN+sRkL4/pcpbfQoIe+uFFjYwBPZugK1cmgtGG8HFjgIkD83rAMhFChQc2BA8YnNn5NuJUowyVgpgCQrjXmAXAIHlICuhPbqALrA6XNj2HY7m4j+/OIiCC9GM69T+UTAIh/WzKhtolg+oCAV5RZNegPwbqrkgEwKCgH242wGBJ28julj7UbG4Tn4qBMl+YDCUxDaZlYVpCoVSyDJQgBeCIBABGKRiAzkff10u1xuzgXkh2InBc4/cmQv8MG0nZ0cpwfA1eGudA8EZBdkRwNC3I0QErMP9EAEYbJUBCbBxg0jPTueclRZAGC0MgOD9RBRNhJRjnqbWjlwJx0yEOuwRFBCSIAjWYoOpFiSXWCjcFJA5GhaOrAvkAlJXurlrOqSQ7Aprx/pzF7APFYEmAdiNwVTNzVjYBiSqyLZwujejJ5X493KegqyaHBQEw4sUg0gQWBmkqTDwCKZs4ILxXSwi9lUxP5BVXE5A/PfDVHwrsRf8caEABukFmAHK/nV2BqlyA0EM5SWQM3gzF/pklf3c/xqZsqdHGCFET2URTH87bUVSqdqLr5YgJYwZ/B3myRBJLr+uwFByUmQQMHv0yjtRse0LKxsNAksJP5cSrqYQLK1KwGGSMBJExd1LdTm4LwwX/okFFw1WMniMBw8EbKaB/F6E53D/O13BJiCQufCKHfoY9Jxzq4XBxw9PN/gtQ/Si/6qlkpzt/lZ8xYXg4MexpqlRxPMpGrwx+HlDEDDYEztFwkXlBtbejZgr3s78JYmB4C6F1+mv0QA5/Fabd6By0U9LtYPy0y2haqY8UVBPGEdchwaZBumYxN9Sfl+3a+NYmKnQNbuKsAi6UJgIrXFR2cAwqOWNIO/AemlFyKjgaWW7OI4ZRS4yKCS/htTVGH8J9iZAbwMQjENI2VqKP7RwRY9NWsAUMUPloDAJceLRFg1IsIi+duKaXQKq' $Image &= '2MwRwjZKcr/V8TEGzYuPiYiiQYtDRHvKIoDmnejF+uO76RJkJjKc6XFqaHCblioH3Kl69XM1py727C5IOj+EwnFy4azHwqBP6r2r95X9/9q+iqFrkMYm8fgz9baDNS5BOwZpWQazxJB/qAbmusMfT2BrH0mOSxKvP3LEDwnpIABu/tj8nNt7n6vA/i1CA+2sEcJYbrposOwAkt50VUuouH2ypRlK7DJX2pn00MmjOmO4YT80CQQHRmTtZmdXxm7ja0XchTbGYF3BLNw0Xk4CSFMyNl0nELY/7RKBtDLxDQwnDUrOt6vyNmWkqbfFltmcSeN5/uSDd9FjHaJlQCm4kHbUal9ppUHmyJjv4URhIMC/LmHM7FxpsqGq1Fegok93hP0X2A8u+PR+vyYdBVAeXls0CYb7Mp43tLhzRty3ZK//LbDOSsL+KC5bGNfdcHd5/4f27+4Z6T8Zv3ETjnu8lgAAAABJRU5ErkJggg==' Local $bString = _WinAPI_Base64Decode($Image) If @error Then Return SetError(1, 0, 0) $bString = Binary($bString) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\Using-Note.png", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_Image Func _WinAPI_Base64Decode($sB64String) Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "") Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]") $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "") Return DllStructGetData($bBuffer, 1) EndFunc ;==>_WinAPI_Base64Decode3 points
-
[UDF] Gmail API - Emails automation with AutoIt!
coffeeturtle reacted to Ascer for a topic
1. Description. Automate communication with Gmail API using oAuth 2.0 security. 2. Requirements. Google Gmail account. Finished Authorization process. Look here 3. Possibilities. ;======================================================================================================================== ; Date: 2018-02-12, 11:46 ; ; Bug Fixs: 2018-02-17, 7:31 -> Fixed problems with adding items to array and minor bugs. ; ; Description: UDF for using Gmail API interface. This UDF requires oAuth.au3 and Gmail account. ; ; Function(s): ; gmailUsersGetProfile() -> Information about your account. ; gmailUsersLabelsList() -> Get all available labels ids. ex. "INBOX", "UNREAD" ; gmailUsersLabelsGet() -> Get information about specific label id. ; gmailUsersMessagesBatchDelete() -> Delete many messages emails by id. ; gmailUsersMessagesBatchModify() -> Set status for many messages ex. "INBOX", "UNREAD" ; gmailUsersMessagesDelete() -> Totaly delete email from ur account. ; gmailUsersMessagesGet() -> Get all information about specific email. ; gmailUsersMessagesList() -> Get list of last ~100 emails. ; gmailUsersMessagesModify() -> Modify single message. ; gmailUsersMessagesTrash() -> Put email in trash. ; gmailUsersMessagesUntrash() -> Restore email from trash. ; gmailUsersMessagesSend() -> Send email to single or group recipients. ; gmailUsersMessagesAttachmentsGet() -> Download attachment by id. ; ; Author(s): Ascer ;======================================================================================================================== 4. Downloads. oAuth.au3 Gmail API.au3 5. Examples. Sending emails1 point -
UIASpy - UI Automation Spy Tool
Danp2 reacted to argumentum for a topic
Was not working for me. I'm like ?!?!?. lol ;~ If WinExists( "UIASpy - UI Automation Spy Tool" ) Then Return If WinExists( "[TITLE:UIASpy - UI Automation Spy Tool;CLASS:AutoIt v3 GUI;]" ) Then Return that did it. Had the browser open in the same title =) PS: I just now got to read your posting @UEZ. PS2: ..since it take a while to load: ;~ If WinExists( "UIASpy - UI Automation Spy Tool" ) Then Return If WinExists( "[TITLE:UIASpy - UI Automation Spy Tool;CLASS:AutoIt v3 GUI;]" ) Then Return If WinExists( "[TITLE:UIASpy - UI Automation Spy Tool;CLASS:AutoIt v3;]" ) Then Return SplashTextOn("UIASpy - UI Automation Spy Tool", "..loading..") ... bunch of code ... ; Show GUI GUISetState( @SW_SHOW, $hGui ) SplashOff() would be cool too1 point -
1 point
-
Stuck on a jquery plugin [solved]
Xandy reacted to kaotkbliss for a topic
Talk about getting this in just under the wire. Right at closing time today. I don't have the code on me, but I did manage to solve the issue1 point -
@Aelc You should look into running ChromeDriver with the --headless option. I haven't done this myself, so can't really help you with this. You may want to search this thread for "headless" to find the prior instances where this has been discussed.1 point
-
There are others on this board who could be much better experts - but I did a fair amount of research on protecting/password protecting a script a while back when I completed a project that took triple digit hours to complete. The short answer is, there isn't. Here is the best & easiest solution I found: Store a MD5 Hash of the expected PW. You can add a Salt to it, but it has to be the same every time, to the PW before Hash. For me, I had a unique 3 digit # at every computer (500+) that I sent it to, so I pre-compiled all 500 Hashes and salt (each salt was unique!, yay for rainbow table protection!) and store them in the script. I had the luxury of being the Admin on all machines as well, this wasn't a "public" script, but something that I did want to protect, and protect non-IT users from using. Prompt for a password on program open (or cmd line run). Hash+Salt that, then compare to your Pre-compiled value. If they match, program continues. If they don't it fails. It is TRIVIAL, and I mean 100% cakewalk to remove any solution to protecting your program through some means of authentication prior to use. NO METHOD will prevent this from someone that wants to use your program & is semi-competent. The best you can do, is protect your passwords (or in my case, licenses keys) from being stolen, and a hash+salt can do this. UNLESS a rainbow table exists for it, which is why a random salt (8 char or so + symbols) is used. If you'd like my auth code, I can post it this weekend perhaps, if you don't get anywhere.1 point
-
Look here https://www.autoitscript.com/autoit3/docs/functions/ControlCommand.htm1 point
-
for have help , you must send , a code and application want automate , in forum many people have a super skill level , but for the moment not read a mind1 point
-
Writing a recursive decent parser in Autoit
junkew reacted to TheAutomator for a topic
I'm writing a recursive decent parser in Autoit! The programming language i'm making is called HighLevel. I'm doing this for learning purposes, because it's fun and because I can implement it into my other project: Fullscreen Console With custom programming language! It's not easy... In Autoit you don't have objects like in Java or Visual Basic, so I had to figure out a way to still convert the code to an abstract syntax tree. I used nested array's and array based dictionary's instead of objects. The code is still very dirty and I need to make a lot of modifications but if you're careful with testing you'll see what it can do already. Console window Because this code eventually will get implemented into my console project I crafted a nice little console window (with a custom sci-fi looking theme, yeah i was a little bored haha). {ESC} is your panic button for now, it terminates the script completely. If you get an error while opening a script the text will turn red. To minimize it press the blue button, to close it use the red one, to drag the gui just grab it on one of the sides. The console window will display what you write to it with your "HighLevel-script" and some additional information: How to test it: Download: HighLevel.Au3, Debug.Au3 (includes a function to display nested arrays for debugging), GUI.bmp (for the console) Compile the Autoit code to EXE. The GUI.bmp must be in the same folder as the EXE file! Write a HighLevel-script (text file) and drag it into the compiled autoit-exe. The custom made little console window will pop up in the left top corner of your screen and your HighLevel-script (the text file) will be interpreted and executed. The Language: exit script: Abort show / hide the console: Show Hide write to/clear the console: Write 'this is a ''string''!' Clear variables: test_var_1 = 123 some_list = ['a', 5, true] some_list[1] = 3 math = 1 + 2 * 3 / 4 - -5 & test_var beep (under construction): Beep F, optD wait X seconds: Wait X Messages: Message 'Hello World!' move/click the mouse: Move X, Y Click send keys (under construction): Send 'HighLevel', True if's: If false ElseIf true # this part will run Else End subs: Sub X # do stuff End Call X for loops: For X = 1 to 10 # X iterates End Values: Input 'Give me input' Random YesNo 'yes or no' operators: + - * / & > = ! < ( ) And Not Or Example script: # my first HighLevel script message 'Hello World!' message 'Lets write to the console...' clear # clear the console... list = ['a', 16, true] for i = 0 to 2 write list[i] wait 1 end sub test if YesNo 'would you like to quit?' message 'Goodbye!' abort else write 1 + 2 * 3 & ' math!' end end call test test script.HighLevel GUI.bmp Debug.au3 HighLevel.au31 point -
Google Authenticator Implementation
Lefiya reacted to argumentum for a topic
Mine is "-5" but read about UTC and you will see that is not important if I'm in "-5" and you are in "+8", as we are plus or minus of the reference. PS: ConsoleWrite('GetMyTimeUTC() = "' & GetMyTimeUTC() & '"' & @CRLF) Func GetMyTimeUTC() Local $tTime = _Date_Time_EncodeFileTime(@MON, @MDAY, @YEAR, @HOUR, @MIN, @SEC) Local $tLocal = _Date_Time_LocalFileTimeToFileTime($tTime) Return _Date_Time_FileTimeToStr($tLocal, 1) EndFunc ;==>GetMyTimeUTC PS2: https://www.autoitscript.com/forum/topic/182902-autoit-real-time-server-with-inet/?do=findComment&comment=13134521 point -
AutoIt3Wrapper FileVersion Directive
Tralveller reacted to Melba23 for a topic
Klaus, Welcome to the AutoIt forum. Your script compiles perfectly for me (Vista x32 SP2 - 3.3.6.1) and when I look in the file properties I see that both the File Version and Product Version are set as in the directives. However, I do not get Product Version returned by FileGetVersion - so the problem seems to lie there. AutoIt used to place the AutoIt version in the Product Version property - it still does by default. It is only recently that Jos (one of the Devs who deals particularly with AutoIt3Wrapper) has amended the #AutoIt3Wrapper_Res_ProductVersion directive to allow the user to change that value. Perhaps the internals of FileGetVersion were not adjusted to reflect this. Sorry I cannot be of more help - Jos is probably the one to answer this more completely. I am sure he will be along shortly. M231 point