Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 10/16/2017 in all areas

  1. Hello Here is my network UDF. Do not yell at me if it already exists ... I hope it will be useful to someone. Please, let me know if you have any problem. All functions that perform modifications required administrator rights Functions list : Internal functions only : Examples : #Include "network.au3" ; List of availables connections/cards #Include <array.au3> ; only for _ArrayDisplay() $infos = _GetNetworkAdapterList() _ArrayDisplay($infos) ; Network card informations for the network connection called "Local Area Network" $infos = _GetNetworkAdapterInfos("Local Area Network") _ArrayDisplay($infos) ; Disable a network connection _DisableNetAdapter("Broadcom NetLink (TM) Gigabit Ethernet") ; OR _DisableNetAdapter("Local Area Network") ; Enable a network connection _EnableNetAdapter("Local Area Network") ; OR _EnableNetAdapter("Broadcom NetLink (TM) Gigabit Ethernet") ; Enable DHCP (for IP Address) _EnableDHCP("Broadcom NetLink (TM) Gigabit Ethernet") ; OR _EnableDHCP("Local Area Network") ; Configure a static IP adress _EnableStatic("Broadcom NetLink (TM) Gigabit Ethernet", "192.168.10.11", "255.255.255.0") ; OR _EnableStatic("Local Area Network", "192.168.10.11", "255.255.255.0") ; Configure the default gateway _SetGateways("Broadcom NetLink (TM) Gigabit Ethernet", "192.168.10.1") ; OR _SetGateways("Local Area Network", "192.168.10.1") ; Configure DNS servers Local $DNS_SERVERS[4] = [ "192.168.100.1", "192.168.100.2", "192.168.100.3", "192.168.100.4" ] _SetDNSServerSearchOrder("Local Area Network", $DNS_SERVERS) ; OR _SetDNSServerSearchOrder("Broadcom NetLink (TM) Gigabit Ethernet", $DNS_SERVERS) ; Configure the DNS domain name _SetDNSDomain ("Local Area Network", "mondomain.loc") ; OR _SetDNSDomain ("Broadcom NetLink (TM) Gigabit Ethernet", "mondomain.loc") ; Configure the DNS suffixes for all connections : Local $DNS_SUFFIXES[2] = [ "mondomain.loc", "mydomain.priv" ] _SetDNSSuffixSearchOrder($DNS_SUFFIXES) ; Clear the DNS cache (like ipconfig /flushdns) _FlushDNS() ; Remove an entry from the DNS cache _FlushDNSEntry("www.autoitscript.com") ; Configure the WINS servers (very old, now ...) _SetWINSServer("Local Area Network", "192.168.100.251", "192.168.100.252") ; OR _SetWINSServer("Broadcom NetLink (TM) Gigabit Ethernet", "192.168.100.251", "192.168.100.252") ; Enable the two options : ; - Register this connection's address in DNS ( first parameter) ; - Use this connection's DNS suffix in DNS registration (second parameter) _SetDynamicDNSRegistration("Local Area Network", True, True) ; Release the DHCP lease _ReleaseDHCPLease() ; Renew the DHCP lease _RenewDHCPLease() ; Sets the Private category to the network connection called "LAN" _SetCategory("LAN", 1) Download link : Network.au3
    1 point
  2. MS Splash Screens The office 2016/17 office suite has made many people turn heads with its functions and especially their splash screen. I now present to you, the MS Style Splash Screen. For Rookies, Novices and anyone who wants a ready made splash screen for your gui application. You can now download it and also try it out yourself. You have three colors to choose from: Blue Red Green All three colours are from the famous programs. I also included the KODA form to you can have freedom with this splash screen. Note: the KODA form does not have the three colours as well as the correct blue. Have fun and enjoy. Note: Thanks to kaz for updating the side scrolling dots.
    1 point
  3. Version 1.5.0

    1,073 downloads

    A gui splash screen. Themed after the famous MS Office Suite. Three colours to choose from, Red, Blue and Green. You can change the labels to your own application. Animated side scrolling dots just like MS does. Also bundled with this is the KODA form. So you can open up and see the basic structure of this splash screen.
    1 point
  4. UEZ

    Ascii Art Kaleidoscope

    Here we go: ;coded by UEZ build 2017-10-16 #AutoIt3Wrapper_Version=b #pragma compile(Icon, "c:\Program Files (x86)\AutoIt3\Icons\au3.ico") #AutoIt3Wrapper_Run_Au3Stripper=y #Au3Stripper_Parameters=/so /pe /rm #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_stripped.au3" #include <GDIPlus.au3> #include <GuiConstantsEx.au3> #include <WinAPISys.au3> #include <WindowsConstants.au3> _GDIPlus_Startup() Global $hGUI, $iFPS = 0, $iShowFPS = 0, $bExit, $fScale, $aFileList, $sFile, $bDropped = False Global Const $iW = 600, $iH = 600, $iWh = $iW / 2, $iHh = $iH / 2, $sTitle = "GDI+ Some kind of a Kaleidoscope v1.2 ^^" Global Const $fPi = ACos(-1), $fRad = $fPi / 180, $fDeg = 180 / $fPi, $fPi2 = ACos(-1) / 2, $f2Pi = 2 * ACos(-1) AutoItSetOption("GUIOnEventMode", 1) GDIPlus_Kaleidoscope() AutoItSetOption("GUIOnEventMode", 0) _GDIPlus_Shutdown() Func GDIPlus_Kaleidoscope() $bExit = False $hGUI = GUICreate($sTitle, $iW, $iH, -1, -1, -1, BitOR($WS_EX_ACCEPTFILES, $WS_EX_TOPMOST)) GUISetState(@SW_SHOW, $hGUI) Local Const $hDC = _WinAPI_GetDC($hGUI) Local Const $hHBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iW, $iH) Local Const $hDC_backbuffer = _WinAPI_CreateCompatibleDC($hDC) Local Const $DC_obj = _WinAPI_SelectObject($hDC_backbuffer, $hHBitmap) Local Const $hCanvas = _GDIPlus_GraphicsCreateFromHDC($hDC_backbuffer) _GDIPlus_GraphicsSetSmoothingMode($hCanvas, 5) _GDIPlus_GraphicsSetPixelOffsetMode($hCanvas, $GDIP_PIXELOFFSETMODE_HIGHQUALITY) Local Const $hBrush_Clr = _GDIPlus_BrushCreateSolid(0xFF000000), _ $hBrush_FPS = _GDIPlus_BrushCreateSolid(0xF0FFFFFF), _ $hFormat_FPS = _GDIPlus_StringFormatCreate(), _ $hFamily_FPS = _GDIPlus_FontFamilyCreate("Arial"), _ $hFont_FPS = _GDIPlus_FontCreate($hFamily_FPS, 8), _ $tLayout_FPS = _GDIPlus_RectFCreate(0, 0, 60, 16) $iFPS = 0 GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit_About") Local $hImage, $iW_i, $iH_i, $hBitmap, $hGfx $hImage = _GDIPlus_BitmapCreateFromMemory(_TestImage()) $iW_i = _GDIPlus_ImageGetWidth($hImage) $iH_i = _GDIPlus_ImageGetHeight($hImage) $fScale = 1 / Sqrt($iW_i * $iH_i) * 100 Local $i, $dx, $dy, $dxo, $dyo, $tr, $d, $t Local Const $hPen_Border = _GDIPlus_PenCreate(0xA0101010, 2) $hBitmap = _GDIPlus_BitmapCreateFromScan0($iW_i, $iH_i) $hGfx = _GDIPlus_ImageGetGraphicsContext($hBitmap) _GDIPlus_GraphicsSetInterpolationMode($hGfx, 3) _GDIPlus_GraphicsSetPixelOffsetMode($hGfx, $GDIP_PIXELOFFSETMODE_HIGHQUALITY) Local $hTexture, $hTexture2, $fRot = -100 Local Const $hMatrix = _GDIPlus_MatrixCreate() GUIRegisterMsg($WM_MOUSEWHEEL, "WM_MOUSEWHEEL") GUIRegisterMsg($WM_DROPFILES, "WM_DROPFILES") AdlibRegister("CalcFPS", 1000) $dxo = $dx $dyo = $dy Do ;~ _WinAPI_BitBlt($hDC_backbuffer, 0, 0, $iW, $iH, $hDC_backbuffer, 0, 0, $BLACKNESS) DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush_Clr, "float", 0, "float", 0, "float", 50, "float", 15) $aMPos = GUIGetCursorInfo($hGUI) $dx = $aMPos[0] - $iWh $dy = $aMPos[1] - $iHh $tr = ATan2($dy, $dx) $d = $tr - $fRot $t = Atan2(Sin($d), Cos($d)) * 10 If Not BitAnd($dx = $dxo, $dy = $dyo) Then $dxo = $dx $dyo = $dy _GDIPlus_MatrixTranslate($hMatrix, $iW_i / 2, $iH_i / 2) _GDIPlus_MatrixRotate($hMatrix, $t) _GDIPlus_MatrixTranslate($hMatrix, -$iW_i / 2, -$iH_i / 2) _GDIPlus_GraphicsSetTransform($hGfx, $hMatrix) EndIf $hTexture = _GDIPlus_TextureCreate($hImage, 3) DllCall($__g_hGDIPDll, "int", "GdipTranslateTextureTransform", "handle", $hTexture, "float", $dx, "float", $dy, "long", 0) DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hGfx, "handle", $hTexture, "float", 0, "float", 0, "float", $iW_i, "float", $iH_i) _GDIPlus_BrushDispose($hTexture) $hTexture2 = _GDIPlus_TextureCreate($hBitmap, 3) DllCall($__g_hGDIPDll, "int", "GdipScaleTextureTransform", "handle", $hTexture2, "float", $fScale, "float", $fScale, "long", 0) DllCall($__g_hGDIPDll, "int", "GdipTranslateTextureTransform", "handle", $hTexture2, "float", BitShift($iW - $iW_i, 1), "float", BitShift($iH - $iH_i, 1), "long", 0) _GDIPlus_GraphicsFillEllipse($hCanvas, 0, 0, $iW, $iH, $hTexture2) _GDIPlus_BrushDispose($hTexture2) DllCall($__g_hGDIPDll, "int", "GdipDrawEllipse", "handle", $hCanvas, "handle", $hPen_Border, "float", 0, "float", 0,"float", $iW, "float", $iH) _GDIPlus_GraphicsDrawStringEx($hCanvas, "FPS: " & $iShowFPS, $hFont_FPS, $tLayout_FPS, $hFormat_FPS, $hBrush_FPS) _WinAPI_BitBlt($hDC, 0, 0, $iW, $iH, $hDC_backbuffer, 0, 0, $SRCCOPY) If $bDropped Then _GDIPlus_ImageDispose($hImage) $hImage = _GDIPlus_ImageLoadFromFile($sFile) $iW_i = _GDIPlus_ImageGetWidth($hImage) $iH_i = _GDIPlus_ImageGetHeight($hImage) _GDIPlus_ImageDispose($hGfx) _GDIPlus_ImageDispose($hBitmap) $hBitmap = _GDIPlus_BitmapCreateFromScan0($iW_i, $iH_i) $hGfx = _GDIPlus_ImageGetGraphicsContext($hBitmap) _GDIPlus_GraphicsSetInterpolationMode($hGfx, 3) _GDIPlus_GraphicsSetPixelOffsetMode($hGfx, $GDIP_PIXELOFFSETMODE_HIGHQUALITY) _GDIPlus_MatrixSetElements($hMatrix) $fScale = 1 / Sqrt($iW_i * $iH_i) * 100 $bDropped = False EndIf $iFPS += 1 If $bExit Then ExitLoop Until Not Sleep(10) GUIRegisterMsg($WM_MOUSEWHEEL, "") GUIRegisterMsg($WM_DROPFILES, "") AdlibUnRegister("CalcFPS") _GDIPlus_PenDispose($hPen_Border) _GDIPlus_MatrixDispose($hMatrix) _GDIPlus_ImageDispose($hImage) _GDIPlus_BrushDispose($hTexture) _GDIPlus_BrushDispose($hTexture2) _GDIPlus_GraphicsDispose($hGfx) _GDIPlus_ImageDispose($hBitmap) _GDIPlus_FontDispose($hFont_FPS) _GDIPlus_FontFamilyDispose($hFamily_FPS) _GDIPlus_StringFormatDispose($hFormat_FPS) _GDIPlus_BrushDispose($hBrush_Clr) _GDIPlus_BrushDispose($hBrush_FPS) _GDIPlus_GraphicsDispose($hCanvas) _WinAPI_SelectObject($hDC_backbuffer, $DC_obj) _WinAPI_DeleteDC($hDC_backbuffer) _WinAPI_DeleteObject($hHBitmap) _WinAPI_ReleaseDC($hGUI, $hDC) GUIDelete($hGUI) EndFunc ;==>GDIPlus_Kaleidoscope Func _Exit_About() $bExit = True EndFunc ;==>_Exit_About Func CalcFPS() ;display FPS $iShowFPS = $iFPS $iFPS = 0 EndFunc ;==>CalcFPS Func ATan2($y, $x) ;~ Return (2 * ATan($y / ($x + Sqrt($x * $x + $y * $y)))) Switch $x Case ($x > 0) Return ATan($y / $x) Case ($x < 0 And $y >= 0) Return ATan($y / $x + $fPi) Case ($x < 0 And $y < 0) Return ATan($y / $x - $fPi) Case ($x = 0 And $y > 0) Return $fPi2 Case ($x = 0 And $y < 0) Return -$fPi2 Case ($x = 0 And $y = 0) Return 0 EndSwitch EndFunc Func WM_DROPFILES($hWnd, $iMsg, $wParam, $lParam) Local $i = 1, $j = 1, $aTmp, $iUbound = 0, $sExt = ".bmp|.png|.jpg|.gif" $aFileList = _WinAPI_DragQueryFileEx($wParam) Do If Not StringInStr(FileGetAttrib($aFileList[$i]), "D") Then If StringInStr($sExt, StringRegExpReplace($aFileList[$i], ".*(\.+)", "$1")) Then $bDropped = True $sFile = $aFileList[$i] $i += 1 EndIf EndIf Until $i = UBound($aFileList) _WinAPI_DragFinish($wParam) Return 0 EndFunc ;==>WM_DROPFILES Func WM_MOUSEWHEEL($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $lParam If _WinAPI_HiWord($wParam) > 0 Then $fScale += 0.01 $fScale = $fScale > 2.00 ? 2.00 : $fScale Else $fScale -= 0.01 $fScale = $fScale < 0.05 ? 0.05 : $fScale EndIf Return "GUI_RUNDEFMSG" EndFunc ;==>WM_MOUSEWHEEL ;Code below was generated by: 'File to Base64 String' Code Generator v1.20 Build 2016-12-01 Func _TestImage($bSaveBinary = False, $sSavePath = @ScriptDir) Local $TestImage $TestImage &= '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' $TestImage &= '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' $TestImage &= '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' $TestImage &= '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' $TestImage &= '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' $TestImage &= '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' $TestImage &= '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' $TestImage &= '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' $TestImage &= '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' $TestImage &= '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' $TestImage &= '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' $TestImage &= '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' $TestImage &= 'VyNiwFmWNhI0iAA8vMUBqrfaMiBR2rqopJu1FS+oIKGu4GJmqgczMrmV4letR9DW47g0y35g44i3hpPEGD8RyvHiACwMRrSqXEosYaseYJmRruJZVryygKnJPMIgt5HxNIbrTuFSne6NRBy2d8QECaRqAt2yKzUto/HtHcCCaU3cFwRo8fzLtkiYEo/ubIVIdWv7RyfAZ3/UK32KXZV/qOl5mboqvkgloGmKpLhUfEYYgEtyZZrrURwg0Fx+oREKuTm3j2YgqisFub8RgsAvdjMVXpOpgXaPK2+5sZEp4/uXTGF55+YAsUVkYY8hsE4i2q/plFrBeIrI44/EqbF9FjhvkZ8TAEF4vqWFtrnmAWnUolAWTGo2KxD5aocpvWClL9L9oEC6+IGP+DU0zEz6EZc8X9ojKzAKVzKW8wW2LRiUro3D2W/iWCaqB5JrmKwaWqxBpfKEFXtR+0IxnLa/91BKYCYOIeXFpn9Rg1G8gc+ZlB2Kziew8KxEBR3j3lPO1vlCWHI2mot0l0+ZR7gY3eWWX0C+Th+lShVA6N/XmM4Wg4vMw5BvWP1EoqlyDbzDjtOCr5iE35aN+Z7foKv3ISLTTJj2g9iXiqUxefeUs8q7SjTse/ccJwJscOLgAab4u87gZbdMShkldTldIpq9w17Me0JcNnHMS2r7nMRhbJuUwNGnO4RRb7hBpaYCMUCwD2i2I3zDE9H7ojV4kq299Qy3RLusn/HE2z49CXF+kNziPn4lXy/JLE5pwMv4PiGh3W3zCwGNEpHVexK0Gc7YoC8PzKAcrApTHMzVLwNVAbeac9Q4MC+uYi8uU/coiU4FeJfajY0Gbx/EF6o6Vy+YLibO+oGNhbGc/SXiwcWxAsgYO3zKbJVD8ohOOWOD3ca5Tyrp9ozgMbGDsEvC2RWAxcpQM8kUryDG3uCIUHI9NRocpb7PaGCGuF53UvoNGTsQdKG1b1fvGSYW076IitKF03BVADr+IWzYgoikuhuuIoRwXuLPDWe4J4BLpJUBKUYZkt9fELgVijruFYSxhmVLlgIdnafmD0YRRr7pr3152uctSoty6iJmvk3DIJGcQ9Tv0uP3nFMEmNS21BAK1fiCWGPMAjb5ZRlY1xBgVAbO4GWkVyS6utZe8sGE8w4MqozzDDcU0xbByZgbFpQWZLFaJUh1i7eY6RGlPMSORpzUC2dNtxGbKZW7vn+Y0FopxTTvzKtELlvzBxC+Wgi0J2tpdcxYEg0LL4uot1m8Fn2Up+I5sEHuT2iF8V6T4h3IozbXiCXNVmjmIXw+WVwQlWYfeDd/I+8NAAQlZxEkSm1HfcWlV2U1h9oYFuuTUI9UyH7zCy8pm/HtChpui0Bwbxk8wcBtT3MC0HTOhi1WEWcY3FtCImu5TRChmJLpQ7eSLYA5bjpGqai2RyYRLT6PK8HbK7jXhSuEfBC7ahSPEVHYjKTpY6ZcHDPmE4nOYR16CeKgeUeU1MEweGCcB7sDKtEy+W4l0vDqOPUN3BZo3jOYnmbqWKNUfKLTjUGqYOu6lmeVIxU3jHMALGFiBWIVr2jlaMV3KDaF8GIGqVo3WIXuNBl8dTkIc5Kv2vn5htJqVde3EbQl5N/0gcrtFNP8QdosZ8HV+GVNmcpwPtDUDyFSdj8MYgUNyV5de0xck0Wx4mihhbVwrGrFt/YwUvJbh90DtjXpsivXgqwKuPYtuL/EZoiXNtHGYE3t1OiOlMlVElZYoa+30ljYGlOYglt0MzLYuxilHtruKrVhYkW+3jqZQY3Vywx8OZwOxib2xMVYAQ1K2OYsK+MzAM7ocD3FoVY0FMlOGu4o4MOr29nkmDSm45uc+g3Nw4nxNTcSYiEl+HcDjTk8sOauw2zVrTy3KKAA1/ccle1sZkhMWkzm8OXmACZThgGqbu5kbHxCiRZl8xchoxcABeDUratdMc2yMVUsExcn7mANy8j7kIeYBp++JRaGeOUC1507RYQ+FgyD/JCjArlhtZBkv9RcIs6G' $TestImage &= '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' $TestImage &= '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' $TestImage &= '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' $TestImage &= '+0GEVpFtUVy2hWPG5dF3jnzUMPVq6VIznMcWBkFgitQK5ruE1TGx3BrAXPM4+KiWwo8SliG/pLWWrYlBpHINP2me+6WQsA31cKxoGybig5ZL8xifQVYrr2j3pZVQ90wAMZqRVAqjROZBAqwbXo6mhpSWrzjzHQjdhfYv9QO0zOPQ1NzqViLPj1NTl9OIY2+iQJgtY4S75BiYti/MyAF2bgVPgkGl+YA0N4i4pw6jA4quZVRhW/aNDQ7JQxYaOYEeCs1GlbezD7Q06K/NSp21A+HmK7ebabeYRFFbHFwYOXdI3cc3Q2aSEcQB2VOFYHDTVyiG7V6ehKTBfnsgoPFRuv5KmUCkr/A8TlQ2DfG5d02OIDCMhOOIAcOUzq9OOo6DZ9EAgLeWC9g+kcUoWmoFTVR0x+IAGscV4lpvpWL5gAmkcEIsXwdxxeX0hmKnkh511QCWQNHfPFsbkvKNdQEBYVwWmb8+lc+ter6YvPozUdznMz65nvDDDKhiDWjQsFY6CrizglQUtzFul3b3qHo1jE00ACmIdrF1LmeH6kAC3HbmOUFuPrHdVBsntM3lgCFrT3JndHl+jE2RG9xxYcLcSyKiw5N2Spt2xzHjhp/cLBss09yuOrVa5PeJNgvbtD8SkQEC7XExTmy1dc/MtsA5KuuYgXBlOQxmHCxwYwsHdqF/WJWuAu3MFKOCzlYUbDbm42A8jbxA0HdHcVaioPOXfeJkTBWsx70L4QmryLHbKO9UzcbK0LI1LwUvmrqGUxGcXmIoDwAmRwpHIH91KHGnPof8MMX6M5nfpjU/mXDU5hn0JbMxpmQHmv3BsuW4UGs5qU2QLXSNbCcvUFjWsYZUFwjmNFW+NwUU2VdRCjz8wQdMip7A6YN4ut3jRMnAFlF3iZTeV9+b7/aU0KwRUo3LGp4EiviWVCyqadcRBXIK6YqoEOCHs5ur1zcrDbJhrHzN4rdVXXzOPEoEo4ljStUOPiYRUvzzG5xuKlSDlq93OBCUQ4gZZroZc3vgjLS8043BQYomN28wFIQ1yEiBbRtD9QxHWUdWnpmKpY1zLyqjUABtaZlis6qAFgmzzBLQEqVKnEuWzmVHHo+l3qceh6npqHIuwGvrLUuo2rfMyU3a5sOsEFQVdxWU1RxEXRvAvMFBS4DOdMF7bhgMgAxQwLkG7bi1jdshHZ25slZ7bry0/WOL3i8pp/UIrnIftUtYKXs94A1VaXmzphJIWFuvMOd8inMraoK2Bv6cSo1t1Q4j7cuBrFwA1bNVqKXECGsxmPMHcoClhfdFICDg3YTRVNUceIG9Ud4uiUhaXiVGx29wAANtN/PiPd1LWM34jgnAXTtcXCcSrbxLZLBgNxGuyYphUL8M0NOBOIFFoar3l7hRaexDXpxNX6VEx68x9OJxmFE5nMbuczjEyxm6pkr7SxuswDZ2ZgotOSFIg9swaF7zHgzi4HLeZaFLlqmF88SogIDs+YIVeGsR2NWXvuFcC65nZRULKgsPmU8PT1P7MwnCIewrEsAOlDNVGjZIw5gXLbwr8RqAyyDTfggptVgP1RK6Na/2JzgO9/WIEfBu4pGkO9svRQG1IWhLriKqrTVG6viX/NybuuXqIY2VrqPYNLUW7i1LTFLQ+I+hUy1YBumZAagArLjzFfA1hmNbZVT4iQWW4L5IgQF7IqBhvuLyZDqFi4M5Ny+UWr8Qx/3r0fTzN3GED07g9b6/4dBeTqNTpINl6VKA7FiKRm8zMrKrBeBrkIKoRI6ScMFgaR73HgFYrU0lpc3GGthzDOqArUaZbauqgC4rPDeZYsVjBqtP6+kDclycjs+uYSKAjeFX8zQuGclld+YZGtWboJTR7X3iDlMFIBaPL3GjYRqlqoubVKazXiMhWXM1GhWjDcxRrjz3GhXVWGWnjEQci2wxAs0Hm5mKG1YmiYxw6942oRhOonBmIsqvm9eIai2tXUYNW1/eC0CgaMqz69DXiZCgLl5iLgHMFhFV+JqeBb94GPTn' $TestImage &= '1+f+H39H0vENf88+qNt4z7R4CLWyJxvQVLAYAUC9W+YAi5OfMtwfJJZTYib6gCosIePtK0tiqIt2F76ma6GTvzM6r4pirLg1gYNrbdYlmYFPMyAPS3wP5+jGYWA5AbEiKXBoc4+IQWXTIQUuzZhsfPtLYd/QhrFOTjHtAOiy1bHv7zKgtX8EBix31DBgiyGV1bJxLkqBW8rcOGh45mbpNcXGNQTSty/1aJ6ckv0CE6xzKIWg5btP9qA/OPFw10s1XMBycHxFXa+eYBXIbvMt9BojRDV4L5xH2hacaPxDU36P/PHqzuahPtOLqDqKdVZAp9MelXwS8xLq1SoWB3cFuAIwcFLbzcLpYszgxKo7A4j2xn2hDBK4iELUwRuUlZqEKXDyxb8gNRCzq6YFArYTJFYt2vnMaAPEfEqiW1RTk89y1qiLddT+oUWuHOiR4SHEWb2V8Yj9CzJaFd7jiFBlAL/qNWAxcaesRmlRtG0L1cqBCotdhLF+ioKpSFhk7piKrC7xELeWNQ6c3XMEltdP6mF7Z8GnxHBsCGCv6lJQttW9I4YFJtUDyRMHYo/zKPcLX1ahV2h1/EQnHjcB+l2ejl+kIGgDoJx6GWV/xzOZcs9MvEaC1AMqzBpBRSeXj6XA7fuMD7tH2YZvZnH0UH0glL8ZLeWBc49H4BwzG93UFUos5lja8MBbAtvLMUApgm9Z5JcNZpCwsHGpksurt8xqpjapeLGzc2C3n6Sq71imIYKXKHMwVg2O5Q1wCpWCLZPcYQf2QMKBZaV2fEpzLQFpw+/cvZC3CUfOfxLcGFKUNeG5h1kvoiCsrYq8UeSUkZBwGB56xiJl29Z2e87NxVdzNXbM3hggFjuAUX3igEaFFcTfFYCBrdQAslu3ApQTVW8ypoFLgy1gxKKHfiDR/slbbvg/ceFVgcq38uJr0r/pl+nzDDAtTQEwZzClrw7+H1lI2JbH7HfzcEmwgKD49ahuErDKmXlzuKwDhQfEKZYIAdzOLqVyLrFxKHJ1AE6YIa0L+UjxeeGJV+1DqBybtoLJhxgVvEawVTTOabc+Jf5B4ggpuL9vaHD43/UKdCvVRqPisoXs6hWk6EFHkfaAi822uhz9mFFCDR5rkirQUFI2HMbqdnliveEAUlps08+0UveaRcn9TYHvND3CtiwFMS6Jh7iOxsc+ZuIuLloVgOpmBp1+4dWFNrzArFFPljYOg5gooMBtUDjMNyyg9dPu6gkB0HATE/HpZ6O/XXtFll5iyynZfFvEVErb0Th7+zBZBUBQHib9OJiXgnM1v0YNRccTLO+oi9hUodfpKHmq+kUvfVq8wFs6SkU05htq8mY52BU2wQuHkqUfKjmUAXb2XBUW4MI7tM7jLBxxHVLirl8WObl4XwK/CLYbRNGbPtUzkpUP3gmXLgw3LFW3/sICBaEGGDaMWMpYQrhj6S0AVgDedp8RKJSgPofSUUoOxH3X8XEqAMUaemXKqoO5S6Y5Y15mlLnZDQB5gBQqeoIuR4lFdMu42Zmc3UMeAxfcq1paBMrwEClq/oPjUIf8vrcHga1KA94tfGJavR/crbU2bT9+XpxKIT8entNXD7RxNyvPmK5dh94l5mVA2nZLCoLYVhcYdMcacuYSk3njUpkobTELtF8ziq6K6hGrLpZSFN78was4RIgscim/eMHjoW4qab6YPHPvK4upKye0p+IZF2DCee7lVM1xL6pSncp37QimtGHKVV505iYAVvejDEpOyY/1w3FSmTJCEYLFFKcECpVTC1itRAFvdLfKAijnVQ9pQi5gnG4jWY57HiNQv4BEGN+TBqvcHctsG8WMMVtvRPKYHly+D0IeP+r9K0EnMfwfuW5qujj7XL4gzNlGy8HR/wAV6dkJvMrPpxPeGsd8xuLcLmKBqxcK0trk7lWyHLKhbQYiARu+epehFN1xCgRbfpMFDLKQBS0zTBSm7gDlp/EpxbjMJzVl5J5WKtwANOc8HcTksaSsh3E3KuyK147l' $TestImage &= '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' $TestImage &= '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' $TestImage &= 'ro7lY0vucNQynucLcdvo3fjuLREUQXkz5lul5xK5cRCxlLguCjEar+CIhlsxGNwtWLhm8E4izzGwalEtqZQe7FgN1jMqpVn4imlAxgjWXtywy43uohkVaFxwNRhN+f4wAAAAUE3N+nBDiO4f8fMvzMelwziWk5jL59H0rEJj2gc+jKiSpdem4sat8sOgqOFmyVi6y9QyyH0qG0q2r1AbyHvFwYnxMO5tbc3nvhgbCAWvllEpLxupW0yBUSi8xAUiMK2s7uIWVqHcm+7hm3vwxzGD/swLGeZOCOqt8OCBLlZ0ntiAJzjj2OPzKxLqFhD/AFepd+Jtl49Fx6349M+hG4f4jmG/+DUdznMy3LlytVK3Er00Spuc149M8RTzC3Jj3gI+eZTzLSn/ABAnLiOfaB8A5mc0ynfEOz2hhkhvTfvGjuGVpctXCbXdelgsAezBqAV9kAhj22waYmiYPHb4ioTbIXtfSvpCGeJxVw9DE/cfRZm8xfrNwoPQOfRnHpz6YgQJjuXLsalVOZ7EOZeZp3LxU5n/2Q==' Local $bString = _WinAPI_Base64Decode($TestImage) If @error Then Return SetError(1, 0, 0) $bString = Binary($bString) If $bSaveBinary Then Local Const $hFile = FileOpen($sSavePath & "\salvador-dali 528x528.jpg", 18) If @error Then Return SetError(2, 0, $bString) FileWrite($hFile, $bString) FileClose($hFile) EndIf Return $bString EndFunc ;==>_TestImage 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_Base64Decode Here your version from post #1 without ASCII chars: ;coded by UEZ build 2017-10-10 #AutoIt3Wrapper_Version=b #pragma compile(Icon, "c:\Program Files (x86)\AutoIt3\Icons\au3.ico") #AutoIt3Wrapper_Run_Au3Stripper=y #Au3Stripper_Parameters=/so /pe /rm #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_stripped.au3" #include <GDIPlus.au3> #include <GuiConstantsEx.au3> #include <WindowsConstants.au3> _GDIPlus_Startup() Global $hGUI, $iFPS = 0, $iShowFPS = 0, $bExit Global Const $iW = 600, $iH = 600, $iWh = $iW / 2, $iHh = $iH / 2, $sTitle = "GDI+ Kaleidoscope ^^" Global Const $fPi = ACos(-1), $fRad = $fPi / 180, $fDeg = 180 / $fPi, $fPi2 = ACos(-1) / 2, $f2Pi = 2 * ACos(-1) AutoItSetOption("GUIOnEventMode", 1) ;~ AutoItSetOption("MouseCoordMode", 0) GDIPlus_Kaleidoscope() AutoItSetOption("GUIOnEventMode", 0) _GDIPlus_Shutdown() Func GDIPlus_Kaleidoscope($iSlices = 50) $bExit = False $hGUI = GUICreate($sTitle, $iW, $iH) ;, 0, 0, $WS_POPUP) GUISetState(@SW_SHOW, $hGUI) ;~ GUISetCursor(16, 1) ;create canvas elements Local Const $hDC = _WinAPI_GetDC($hGUI) Local Const $hHBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iW, $iH) Local Const $hDC_backbuffer = _WinAPI_CreateCompatibleDC($hDC) Local Const $DC_obj = _WinAPI_SelectObject($hDC_backbuffer, $hHBitmap) Local Const $hCanvas = _GDIPlus_GraphicsCreateFromHDC($hDC_backbuffer) ;~ _GDIPlus_GraphicsSetSmoothingMode($hCanvas, $GDIP_SMOOTHINGMODE_HIGHQUALITY) _GDIPlus_GraphicsSetPixelOffsetMode($hCanvas, $GDIP_PIXELOFFSETMODE_HIGHQUALITY) Local Const $hBrush_Clr = _GDIPlus_BrushCreateSolid(0xFF808080) Local Const $aApplesoft_color[16] = [ _ ; LoRes colors in Applesoft basic 0x000000, _ ; 0x0 = 00 = Black 0XFF00FF, _ ; 0x1 = 01 = Magenta 0X0000A0, _ ; 0x2 = 02 = Dark Blue 0X800080, _ ; 0x3 = 03 = Purple 0X006400, _ ; 0x4 = 04 = Dark Green 0X808080, _ ; 0x5 = 05 = Grey 0X0000CD, _ ; 0x6 = 06 = Medium Blue 0XADD8E6, _ ; 0x7 = 07 = Light Blue 0XA52A2A, _ ; 0x8 = 08 = Brown 0XFFA500, _ ; 0x9 = 09 = Orange 0XD3D3D3, _ ; 0xA = 10 = Light Grey 0XFFC0CB, _ ; 0xB = 11 = Pink 0X008000, _ ; 0xC = 12 = Green 0XFFFF00, _ ; 0xD = 13 = Yellow 0X00FFFF, _ ; 0xE = 14 = Aqua 0xFFFFFF]; ; 0xF = 15 = White Local Const $hBrush_Color = _GDIPlus_BrushCreateSolid() GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit_About") Do For $W = 3 To 50 For $x = 19 To 1 Step - 1 For $y = 19 To 0 Step - 1 $xy = $x + $y $iColor = Mod(Int($y * 3 / ($x + 3) + $x * $W / 12), 16) If $iColor > 15 Then $iColor = 15 Print($x, $xy, $aApplesoft_color[$iColor], $hCanvas, $hBrush_Color) Print($xy, $x, $aApplesoft_color[$iColor], $hCanvas, $hBrush_Color) Print(40 - $x, 40 - $xy, $aApplesoft_color[$iColor], $hCanvas, $hBrush_Color) Print(40 - $xy, 40 - $x, $aApplesoft_color[$iColor], $hCanvas, $hBrush_Color) Print($xy, 40 - $x, $aApplesoft_color[$iColor], $hCanvas, $hBrush_Color) Print(40 - $x, $xy, $aApplesoft_color[$iColor], $hCanvas, $hBrush_Color) Print($x, 40 - $xy, $aApplesoft_color[$iColor], $hCanvas, $hBrush_Color) Print(40 - $xy, $x, $aApplesoft_color[$iColor], $hCanvas, $hBrush_Color) Next Next _WinAPI_BitBlt($hDC, 0, 0, $iW, $iH, $hDC_backbuffer, 0, 0, $SRCCOPY) ;blit drawn bitmap to GUI Next If $bExit Then ExitLoop Until Not Sleep(10) ;release resources _GDIPlus_BrushDispose($hBrush_Color) _GDIPlus_BrushDispose($hBrush_Clr) _GDIPlus_GraphicsDispose($hCanvas) _WinAPI_SelectObject($hDC_backbuffer, $DC_obj) _WinAPI_DeleteDC($hDC_backbuffer) _WinAPI_DeleteObject($hHBitmap) _WinAPI_ReleaseDC($hGUI, $hDC) GUIDelete($hGUI) EndFunc ;==>GDIPlus_Kaleidoscope Func _Exit_About() $bExit = True EndFunc ;==>_Exit_About Func Print($x, $y, $color, $hCanvas, $hBrush_Color) Local $iSize = 14 _GDIPlus_BrushSetSolidColor($hBrush_Color, 0x80000000 + $color) DllCall($__g_hGDIPDll, "int", "GdipFillRectangle", "handle", $hCanvas, "handle", $hBrush_Color, _ "float", 10 + $x * $iSize, "float", 10 + $y * $iSize, _ "float", $iSize, "float", $iSize) EndFunc It is probably faster using native GDI functions. FreeBasic version: 'coded by UEZ build 2017-10-16 #include "fbgfx.bi" Sub _Print(x as UShort, y as ushort, col as UInteger) dim as UByte size = 14 Dim as short x1 = 10 + x * size, y1 = 10 + y * size Line(x1, y1)-(x1 + size, y1 + size), col, bf End sub Dim as UInteger aApplesoft_color(0 to ...) = {&h000000, &hFF00FF, &h0000A0, &h800080, &h006400, &h808080, &h0000CD, &hADD8E6, &hA52A2A, &hFFA500, &hD3D3D3, &hFFC0CB, &h008000, &hFFFF00, &h00FFFF, &hFFFFFF} Dim as Short w, x, y, xy Dim as UInteger col screenres 600, 600, 32 do for w = 3 to 50 for x = 19 to 1 Step -1 for y = 19 to 0 Step -1 xy = x + y col = cshort(y * 3 / (x + 3) + x * w / 12) mod 16 _Print(x, xy, aApplesoft_color(col)) _Print(xy, x, aApplesoft_color(col)) _Print(40 - x, 40 - xy, aApplesoft_color(col)) _Print(40 - xy, 40 - x, aApplesoft_color(col)) _Print(xy, 40 - x, aApplesoft_color(col)) _Print(40 - x, xy, aApplesoft_color(col)) _Print(x, 40 - xy, aApplesoft_color(col)) _Print(40 - xy, x, aApplesoft_color(col)) Next Next Sleep(30) Next loop until Inkey = Chr(27)
    1 point
  5. Please try this #Include <WinAPI.au3> #Include <WindowsConstants.au3> HotKeySet ("{ESC}", "Final") HotKeySet ("{SPACE}", "Start") Global $Wnd, $pos while 1 Sleep(10) WEnd Func Start() $pos = MouseGetPos() DrawLine(0, 0, $pos[0], $pos[1], 1, 0xFF) EndFunc Func DrawLine($x1, $y1, $x2, $y2, $width, $colour) Local $DC, $Pen, $obj_orig $Wnd = WinGetHandle("[ACTIVE]", "") _WinAPI_RedrawWindow($Wnd, 0, 0, $RDW_INVALIDATE+$RDW_ALLCHILDREN + $RDW_UPDATENOW ) $DC = _WinAPI_GetWindowDC($Wnd) $Pen = _WinAPI_CreatePen($PS_SOLID, 2, 0xFF) $obj_orig = _WinAPI_SelectObject($DC, $Pen) _WinAPI_MoveTo($DC,$x1,$y1) _WinAPI_LineTo($DC,$pos[0],$pos[1]) ;Return $DC ;Sleep(500) _WinAPI_ReleaseDC($Wnd,$DC) EndFunc Func Final() _WinAPI_RedrawWindow($Wnd, 0, 0, $RDW_INVALIDATE+$RDW_ALLCHILDREN + $RDW_UPDATENOW ) Exit EndFunc
    1 point
  6. Check it how, by file name, by its contents?
    1 point
  7. _AD_DeleteSubtree: Allows to delete an object and all children of the object as described in post #101 delete an OU including all objects and child OUs. delete all objects in an OU and all child OUs but leave the OUs intact. Means the tree remains unchanged but all contained objects get deleted (clears the tree) The example does not delete any objects. It just writes a tree of processed objects to the SciTE console and adds a prefix whether the object will be deleted or remains unchanged. To make it run modify line #9 marked with "<=== MODIFY". What do you think? Is anyone able to test the function on a test system? So that a bug does not cause any harm?
    1 point
  8. Yeah that makes sense. Using Sleep() cancels any previous error. Edit... Check this: $FLTAR = SetError(1, 0, "0 files for transfer") MsgBox(0, "", $FLTAR) That string will never be equal to an integer. Which implies that the following comparison should always fail. If $FLTAR = @error Then Actually it doesn't always fail, because AutoIt converts your striing to zero - which I think is unfortunate. MsgBox(0, "False", @error = "0 files for transfer") This seems an illogical result. So you have to be aware of, and avoid, internal conversions of this kind affecting your code logic.
    1 point
  9. Hi @czardas, thank you for your quick reply. This is not what I want, please see this screenshot instead. The menustrip control created in VS .net has gradient background from left to right (dark to light), and the menu style is also different than the standard menu created in AutoIt
    1 point
  10. I believe SetError() and SetExtended() are limited to int-32. I don't understand what you say about Sleep(). Errors are automatically reset to 0 when you enter a function: Sleep() is a function. The best way to handle SetError() is to use it as a return command from a function. Example() MsgBox(0, "Error from Example()", @error) MsgBox(0, "Error from MsgBox()", @error) Func Example() Local $sSomething = "Failed" If $sSomething = "Failed" Then Return SetError(1) ; like this! EndFunc You can see that @Error can be passed to a function as a parameter (eg. MsgBox), but the value changes immediately once you enter that function.
    1 point
  11. See the related discussion here. Any function called (including Sleep) will immediately (that is, before executing the called function) reset @error and @extended to 0 automatically, so that the function can then generate meaningful error codes upon return.
    1 point
  12. kylomas

    About GUICtrlSetLimit?

    youtuber, Edit controls are one of 5 controls that this function applies to. However, I have curious in the past as to how to use this function with an edit control beyond just setting the limit to an impossible value. @JL - Can you run this code. I'm probably misunderstanding something but this seems to demonstrate that you can affect the limit but not monitor it. #include <String.au3> Local $gui = GUICreate('Limit Test') Local $edit010 = GUICtrlCreateEdit('', 05, 10, 390, 360) GUICtrlSetLimit(-1, 100) Local $status = GUICtrlCreateLabel('', 05, 385, 390, 20) GUISetState() Local $str = _StringRepeat(Chr(Random(65, 90, 1)), 48) & @CRLF, $icnt = 0, $ret = 0 ConsoleWrite(stringlen($str) & @CRLF) While GUIGetMsg() <> -3 $ret = GUICtrlSetData($edit010, $str, 1) If $ret <> 1 Then Exit MsgBox(17, 'Limit Reached', 'Edit control limit = ' & $icnt, 5) GUICtrlSetData($status, $icnt) $icnt += 100 WEnd kylomas
    1 point
  13. youtuber, Are you reading what I post and the comments in the code? kylomas
    1 point
  14. Danp2, Ok. kylomas, Thanks youtuber, Glad you got it worked out.
    1 point
  15. youtuber, Yes, for that source. kylomas
    1 point
  16. youtuber, Just change the SRE... #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <array.au3> Global $aListUrl = "https://www.autoitscript.com/forum/" & @CRLF & _ 'https://www.autoitscript.com' & @CRLF & _ 'https://test.blogspot.com.tr' & @CRLF & _ 'https://test.blogspot.com' & @CRLF & _ 'http://test.blogspot.com.tr' & @CRLF & _ 'http://test.blogspot.com' & @CRLF & _ 'test.blogspot.com.tr' $Form1 = GUICreate("Form1", 830, 668) $Edit1 = GUICtrlCreateEdit("", 32, 48, 353, 545) GUICtrlSetData($Edit1, $aListUrl) GUICtrlSetLimit($Edit1, 90000000) $Edit2 = GUICtrlCreateEdit("" & @CRLF, 400, 48, 401, 553, BitOR($ES_MULTILINE, $ES_AUTOVSCROLL, $WS_VSCROLL)) GUICtrlSetData(-1, "") GUICtrlSetLimit($Edit2, 90000000) $ExtractSubDomain = GUICtrlCreateButton("Extract", 32, 616, 75, 25, $BS_DEFPUSHBUTTON) GUISetState(@SW_SHOW) ControlFocus('', '', $ExtractSubDomain) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit ; this works and follows the technique you were using ;~ Case $ExtractSubDomain ;~ $TestString = StringSplit(StringStripCR(GUICtrlRead($Edit1)), @LF, 2) ;~ ;_ArrayDisplay($TestString) ;~ For $i = 0 To UBound($TestString) - 1 ;~ $sSubdomain = StringRegExp($TestString[$i], '(?:https?:\/\/)?(.*?)\.', 3) ;~ If Not @error Then GUICtrlSetData($Edit2, $sSubdomain[0] & @CRLF, 1) ;~ Next ; This is a cleaner, more efficient way Case $ExtractSubDomain ;$aSubdomain = StringRegExp($aListUrl, '(?im)^(?:https?:\/\/)?(.*?)\.', 3) $aSubdomain = StringRegExp($aListUrl, '.*?blogspot.*', 3) For $i = 0 To UBound($aSubdomain) - 1 GUICtrlSetData($Edit2, $aSubdomain[$i] & @CRLF, 1) Next EndSwitch WEnd kylomas
    1 point
  17. @ripdad I'm guessing that those were excluded because they didn't contain a subdomain. Is that correct @youtuber?
    1 point
  18. youtuber, This is what I think you are trying to do. Note sub domain is the 1st node after protocol. #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <array.au3> Global $aListUrl = "https://www.autoitscript.com/forum/" & @CRLF & _ 'https://www.autoitscript.com' & @CRLF & _ 'https://test.blogspot.com.tr' & @CRLF & _ 'https://test.blogspot.com' & @CRLF & _ 'http://test.blogspot.com.tr' & @CRLF & _ 'http://test.blogspot.com' & @CRLF & _ 'test.blogspot.com.tr' $Form1 = GUICreate("Form1", 830, 668) $Edit1 = GUICtrlCreateEdit("", 32, 48, 353, 545) GUICtrlSetData($Edit1, $aListUrl) GUICtrlSetLimit($Edit1, 90000000) $Edit2 = GUICtrlCreateEdit("" & @CRLF, 400, 48, 401, 553, BitOR($ES_MULTILINE, $ES_AUTOVSCROLL, $WS_VSCROLL)) GUICtrlSetData(-1, "") GUICtrlSetLimit($Edit2, 90000000) $ExtractSubDomain = GUICtrlCreateButton("Extract", 32, 616, 75, 25, $BS_DEFPUSHBUTTON) GUISetState(@SW_SHOW) ControlFocus('', '', $ExtractSubDomain) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit ; this works and follows the technique you were using ;~ Case $ExtractSubDomain ;~ $TestString = StringSplit(StringStripCR(GUICtrlRead($Edit1)), @LF, 2) ;~ ;_ArrayDisplay($TestString) ;~ For $i = 0 To UBound($TestString) - 1 ;~ $sSubdomain = StringRegExp($TestString[$i], '(?:https?:\/\/)?(.*?)\.', 3) ;~ If Not @error Then GUICtrlSetData($Edit2, $sSubdomain[0] & @CRLF, 1) ;~ Next ; This is a cleaner, more efficient way Case $ExtractSubDomain $aSubdomain = StringRegExp($aListUrl, '(?im)^(?:https?:\/\/)?(.*?)\.', 3) For $i = 0 To UBound($aSubdomain) - 1 GUICtrlSetData($Edit2, $aSubdomain[$i] & @CRLF, 1) Next EndSwitch WEnd I corrected several mistakes in your code, most notably, trying to reference an array as a simple variable (no index) $aSubdomain = StringRegExp($TestString, 'https?:\/\/[\w+\.]+[blogspot.com][blogspot.com.tr]', 3) Did you read the comments I wrote in your previous threads regarding variable naming conventions? You will find more willing help if you try to use them. kylomas
    1 point
  19. @Alan1234 There is a function _WeekNumberISO you can look at in the help file that returns the week number for the year. You'd have to do a bit of calculation from that point, as I don't recall seeing any ready-made functions. Typically I go for something like this, borrowed from one of our forum members: #include <Date.au3> Local $iDays = _DateDaysInMonth(@YEAR, @MON) For $a = 1 To $iDays $iWeek = Floor(($a - 1) / 7) + 1 ConsoleWrite($a & ": " & $iWeek & @CRLF) Next
    1 point
  20. My bad . I mixed up Return value and @error.
    1 point
  21. ProcessWaitClose as you use it never sets @error. I suggest to check for errors after the preceding "Run" statement. In addition i suggest to write the value of @error and @extended to your log file as well. Makes debugging much easier StdoutRead sets @error when there is no data left to read. Do you always expect some data to be read from Stdout?
    1 point
×
×
  • Create New...