Leaderboard
Popular Content
Showing content with the highest reputation on 10/16/2017 in all areas
-
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.au31 point
-
MS Office Style Splash Screen
coffeeturtle reacted to Skeletor for a topic
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 -
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 -
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 &= 'LnkkFCJUxLyoEEFCKnTFyKfIsKFgj5Cz2mNeTG0SkqJjYm/4DEswcCCKJDy+G+Rh58Y1UssLAgPOkSUrdiO8J60QS/qLc+u2oT9i8Hx8Dk0ntEssnDRdpLRV9qQa+xGaJVSRPRK3ElSijdjJeselokPlEF0hFCG59DGEdbWmNuh6Z9yEl5HpucuKYvIhPH7l1qYGJOPKiFFqOzJ0PdCZvDOpMRHwCLgmjCmyrhvyJ4MIez3E/wDMQdumGFixg/EWPqLQtSLOWPS4nVDSMA92NsJreRljAoM8Bab+CavgTpJRTQhZFlYFc6wlJb5ERs3Ie9hbJkuaNTA/yj5Ft/ECHxhspFCp8ECWa8i3/g4j2HHDbeES/wDsE4eCUm5x5IJZWQKyd5oxq4GEfAFDVslS/AWCf3E4kkNTJATWOh9q08DJZmqckucQuy5gVfUUsFTbHh2LgZehqPiJU9icuy0fJFeTgJ4WRXUkWfQRouB7e5oKnkdYJBEsl7WxlKXaKEgO0REM8ktDtywHD0UwO5KpkM4WQ7TkJWEayQTpJewlypH2SjUCh3pmnQ4LiBjHWBQ1LYSYyyOCsk3OQ7E1qKgR0Sik3cmEOnN/XdjD1lWYHDE+xQecGWm8kDCzklM2z8Dc4MwkRfJZwvIqbpKjtUOajOBqU5cDm6cNDWzETWG8NFWTNUEy/cV68hkkeyhjslHoSVUIqBPdL5E3TZVyhE27SHWwXZ9LT2GH6RBYa+Bci+CEeQo8ZpIS/rpv00avUiN8Ei9jz6C6YnWdjn1GpTWSdqWGl0iEwjLLSK1cGYy3ryISvIchDU2pI3ZBeUJa4sSWZWUQ3LsTvIyicbMYjsbTiRxISEclFaZuL8elaf4IWNAmcDtQ0LIJcDU8ekmDdmEGEOiME4N1Kp2JfXa3yJIkHJtkSNQxVoWTNCZwMzPJI/ceB2JwKMsuZJOyteT8CUQ1xaMsdYkxE4fgUsJteBBlKY7GyMkg2hLzZWeBmylJeajQvIakCuSqHTWYFbmCx5BudsUFRTNQyjsyFjrKMZOyQoKxMQU6G5D1QNksdeGZLiMn9hSBGPRDp7eiYHaNPQ0QKg14JKq4saPJZNTJzCysMlJPhsVGujgc3KIzJDMh6nLNYllXsLzBZCygaUuWJn/oEZxnRDTtyKtCzZBkRsvZLcKg9zQ1uXgbdKuWxMZQKeEzqNKcMdVvYkIjJOcqIBb8bY3xYrQhIX2DbghKfYNggygfohYRawqZMhMVoBbTuUhaTaKuyyeODl0xNy6nZhxb/ENJm1TWUSuxPl8jTrJOM2TZN+EE5/YNmnY/8xuEJcyPgJh3/QV/tDJT3JdnAmJ7e4QtbFAyRmyOp0nDCmqp5RHeGjIHOa7Kgs4XJFNG/Ahcv7FZQnDZMYLvodxE0NUJFlBwOQh3sft2qFc5iJc49x7UKtQIkpiSqvITBuejU7kb2sMUr6JHj3MhvL3EcuUhQjW2RwhFzRroRHkbcs6E3C/cZhPA1QPMkNSJDnZJFj5hEgaYpwPOSxrrI8xXQilHoUVxw5F0+y2uiTgQI3Icyx36MhAgxbFbH8hKGRM5GpAnOiKeCH8ARrEZ7E2zfYjVpZ2sQpfghJRxwQpw8ZHN37hE2JjA3sOrdj6WzsJxlTwbLktBDyi5SjRDpJeZeh8JmZb0JZwUkSAKwNA0mjxxNlpDULhfZrJOO0UUm7Gkl7ke4Y0fMayuhjoTrAkorQ/HrYuCjSKdCNq2NpIjYoeUxd6QlOl4aHpVx8ihjvzIkaTtWQaKY8E6c86GpOi8E6lCfgm/IxjPoX3mg5KNJI2Q2CCJdcECprsncqS0hOFbfBgD7glKOxKJwlgXFdtsti+zo/YjJaRdn7CIkS/TMW5FwhUqh60TDrkgPLfhnjYqJYTMBKhKjTk8DnTMHJzD+SCKg/YyUzfYWW4Ask4XDOjoUY4KkS5XoSRJiNr2IckonYyUj3Cw2N0CJqUOQghPHDFSGQEoo3iElsURrjf2' $TestImage &= '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' $TestImage &= 'EKFgmgoMjS76I7JzocB4Me47TeAkfAZhrHDLnKLKv0KKwvMvZRsaMEXdRZ2l62TgrpyUfaIVjNF/oOnVG29iyuMtwhJcIhL9TaSWhEunedJstjP3YmTf/B7kQvssesDN5GihOUQYE3QvRkCYTUPfQ0+Di+8UcyvwOYiRloY9BbHJNQiXA5W0dMYYBdhMjOWh8JEQJdL0N5027QxfnTYpJ7Q6ankPPZDMlZEIb+Tfkj4b/wCn6Fcpe0El4Yp6eRpZmAmomhf4tiAsjS+3wP3JYiA09C7CaZSsXSyOUv2HbEpCSOuyarZda+GNGSEx4bHZKTDMbYp4NrwKZA+TgXoHNIS4Fe2nyiJw2UroThnaHQO1+wgr4Hk0xvTSFsiz8A/sSJ6X+CcSQNpCcV4mfSwZHeSFVfbya9GskFoTMMiojkRGy3o1KY95ODRNP+hv/wBDKhE7ZmkI8zmxRFptsyw3wUUWRy8+C6J6Jn0bnIiO1QndxOUMvMErUi8neZJPhnVuASJojlpfwMDA/wAR+hfbaIF+gY6ExOBeSIVIT4GXLdjxlCZKq5JT3JEcpGuQyhOTxnkM5KOSk5gRzGxu/IWJtAs6wIOsj2n6GQKB932HJlyl6RByv4UI1nytiCFvSPvk49Vka0yj8kidikSxIjLuBJZ0KGPkO1EoybtV0Str7fpJDFpIujZBhrkUwRLh1KQzZhRkLfySa9EZohUb/fXov+GxMRToYNz6DzxfI2zFSJupD7PaeRo+B6U0Ia7HyHcE2hKaZ5hEasiciTY5DxkSjaJiEB5Sf8IWS5E/0QbK7YmORIQEaJEmVp0ZKcJ+JN6YcNoFP/wQ5iOpX0PpmHL7GrqJELkYsCT5DkcrJP6BxwyQGJT9TNfbogj1aJFb06hatMmogf8ARgeGxQGG3JVsJJLvslKP9JWYowwlzBVDuO0YX7BJxFwQrn0sk4FjbG1syUf/ACja/wCDofqk1v0n9DRgfz6acfW2hDg9ck1ryNZyNZfI4Dj5Go4mDkd7G4r0qkp2Hvuw5op2ImhZ9GAxxxtuhJJQlS/4Uc+q9eII9Z9PQcpM81wJqSKnLzct4G0zVV5GTBb3I67vTGRzaJkOqJVktpNku+8DquXYhwsNcDipNSxuRpRN8EDDb16/4aK3n6cJIrIMD0Vd8s8J3sUitJCEnMtWCpHVEIZZE0eSyRqL8lqKJkX2Hk+Buh6iA9n7/wDD0LofpP6kb9Mjh7QpOyeLKJR7jGoo43Ln4G87CXTFJZocJK3yWMouci5KuYn/AGx/xI9PIjZj9EiGY9KMC4P0OGRSUqF4JLROgm5olMmdmkWyqRlH0W+C7tk/8i/4j9I9MG/1Y9GRBBgTJ0KKIxmxTEQRKzQKKMGnJn7SLnlvCLb5OvH3s/Yx+l59YZBBIwdDsKjBL/sQYFjsWwhfVW28v/j/AP/aAAgBAQAAABAHh0dMlUu23XN7NR2T6N6z0kY3wXtoVk0xjT5JGervyu+HxiIcf6oiZFAmqaBRbm2QZoqAhNsjo2AVcMWEYt2ak8JNZ/vOf38MzSJUOTzjrL9L8zj7iC8OlT2m3oCqDPJk40VQrH6DX1rFNAX5WYgpnHlHhK6acOYWRFQR9XSPWi7rvSr5pFIdTShnydXL60jIOqq2VZChyhZ7rgGcWjoQ1IXdKxq9B68+dZ/PKxDipP8AXknUPSb44sF2QwgsmPs5QOM+SQzmUak8ksixHS2ZayVOKSeHnHYzZqHMiSvpVJDyWzqg357aHmQq39/IEYUlNgQQru44eT5e1a7d5sEIqxo6kcgAN4elwGBZE7CM/SZ4AoDu8HPSydwWUFCJoEefdYhVksKUj850Su5kcHu9AZ4JTi8nIDx8Y6Xp3Bn4nr+b4H/W1vo+K3Z69oFnhpV2Hz0EJf8AsD7nBs1GEFx+yhHDLjdP86e8rbnb7+ZCK8HBqO1e71xdCVRe81Xr4EdLf2XzocC7kQrHzf8AYHC2lWyxW2SAmbSMSQmO' $TestImage &= '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' $TestImage &= 'ggZvcAVQvacxQ3d8kQF4QiqEcVoZmxsbxcLAr8wGFWppcQ6l0bZO8RpYDA+IutRvzSFDgyDr5fMqto5U5/qC2Ta/3NEcVbVPmIE5dXlwrFbVSHC9BHeOpVsrM16GvQ17Tl8elTmanGJzG3qonxBFusyxavMqVzxMqfaDbsuPtViOsGeXjywbl5G4NCvLw94OqHvj9wLJTxwS2inCwnDCvMalealWZDuUNjt76joMAd7hKKGnDqFW1i24bSy2bWpSsyruC2329oM+xRy9e0Gqrkr/AGINCrtVMbF5XC7muidB+kRq/UqWCuMgjX8RIuiG3HsgdozOUUKi11LccEgzacrqCtXV9Zdbq6z4igpTGxwiRbovFk0XsXTFlcNuvEKhv9oLELatrxES3DaVliIJX6j1wbm51r4mYJF03je4wARvdR2Sj1PQywzOZrmYX049ExLdGBey8EyGKOZ7+hcMZu/EsixXglCDfIfiFLZ/z2hxwPVRbfRIQeypV3UIKrHI6gAMDnDEVFsfOYHP6IsWlw04Y5qVVQZWnUF0jb3MtGNxRJShUiEKbGFbzD7KrD5iaLsNaiW5L1bqFpvzZfMsJmSm7YKAB6rXwyth0ZpWP5i6lDOGnplAnPAvPzHEWsoq8S4TIZzqUVYOEcRN10PMMjNNRhAA6iJmFuswBRpvbLOw5KlFhc8EqZeJiGqLS7IlGbKe5ltSLWCUz8w3GENpDENjRwuK+jLhY7vbNeZuqlfT0PQN8y97nWJ9oypoh7xPMoZzH3h6XjPpRsctePMVA8rgqUEZ8zMAvJX+INOEDwH0IOS21iZAip8kKsUdwqC48kCo0clVZDU9QsL9EpasAupjBLhs58QCixu3GoY3kLw7jUUFOVCUIPStMwoAXYlQdZI3TM5gFZBCWFPbdXHKvUStTcAtoikP8uKxUGEc74x3MnI8m/8A2XsB/Eurm9blQ3ry5jQZZzBF2WbrqIFxt3mAA2JZUbYfeDcNkajl79TJADsqUBCowpYvMaAYdDi5mPLBdVLWtZDV2zFqlhFVECSoFLjNtxWDeYSvQuB4hyQhlJsqU+juVKKzU54iLvGpValEu4UuY6mAa3KkovkZasU9/wBICqvyWY2mTcGtodu03zS8yh7MMmJQbpOpRcsdxpoe4KLKB+YWGwGaYlKWNx7TyDRC3Nil2u5mrlOG83KKseFKIRFANNtTbTDK6PqwAQoMnjxUCtSrJ/CJokPKvtzKkB6FQ9iGqUbHV8zIX9W3m/eCYyVdVi+JVKXXmxAICoUrQeopkLTETdoD9Jgh+L0SjFWmbE+kse0HC3fEDBoXqWBG7O5gRVTIoHqHIwuK4epXlYj5UcCbGg0Resg15mccUKuyChUIbnmUcz6yr1KuVmcz3lxfTwgG72eYPVZmPp1MBnmOHEaDE3vPvEAzXtBXBL63EXABdQXViniFSq2I3xCLLNtOi4SzuyebYAUCFJALoFaz4hQ7HnqBBS3IMwpQ0ym5hje+typU97nOAVRiWAODAcw1LKbvH9xqsAG7SEF7BrD9JfT3uzL6y1ul8pX43K0tNYZmeANBISNHCgvvzCiy2jR+GPtLvav1KCpMX+YQVf7ysWF5YYpatpuIjg2zKGc8yhPP3gOCy4KsKHjPGfEuaMjXiOgtkYKNDLkabNjzDzujqNjLn5RMVPaYQBbOo4VMEd3BTaUeiZhr03qVmVOMSvRlUT2mm7zcQNTX/sIuO3qZHtgW4lDOfHEKhsOzicwgeYC023EVEytahQahWN5iOqqvE3oLtCl2f6pZgFHfmCoCplwq7McMI6Yt3rERZ5DRn494XBXC3v25g6lpWgxKEeZXH2gaJlKvARFYnkAb6moAW0ozBII7PevMziimkoPxNxYhaUf4h1O0ZsV8MQVtwRa/DKcoFLd/Zh4IpTSUy4Us4sujthjOHHEfIYecTFoLBppW+BEsY69P8Raqx4jK8GGosi8ceJhnLNMQA4uFoUHC3qGIuzMz' $TestImage &= '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' $TestImage &= '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' $TestImage &= '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' $TestImage &= '0W7ewxsdENhXwynl+b6TKCOQvMp40yGEfEQTq+IQtq7jIqpkaGJlwaXH9MUcQXZLA6Bg3HUfQOYkFMZe0zBuHI5Lico3WSDa+0yyzADzzBu/FOolKvleYvggF4V8Ry1avMpCveVF0h2kcwMaXjcdbi6td/ExpB0RgcKGmGHRYCUV9HmVOcrlmK9HuPE7/wCPb0436OoZalhls/mW8uXUcZtq4NhlMkqnTmU5XdVCNHSYhuWU/eUzunVxhZlNVKru0jR2Zx8dxAy1XGZUkoGPtX9xQqU2X7y9VZXJfEwJG7vZATsGKGqz1DsHwmKf5iJWxVQa/wBmVyTsMa/zObGSyr+onqnm1b13LtKrDhf6IdxGyDL4gBZ6ByV3EAtOfnUDYa6HHtCsAirdXK/AiKOIOEBRcaFjm6MpVHm5aIJermAOaNy8qQaSXCxyMx5YCHmJc8v0hBYU4ZkAHZYxBCV23FKxPNRwJJjMKI8Lw4ZUkJzfMNW5MLdQ4pabMQVsGzdZnnI8LwOPpKoKiFEQzhc1nECtahPbMZzn0/PpzKn59AjOImw4ojguagspzFqgztKBI7NdQsSqO+oDz9S7B2Zl2jJncVJfpASGM7WbuFcHEDg76gryUy8iNfaIglE+yU0LXD0TJNDV8E1ti9ypDnF9NSgRCE6MsKzgsP8AahgIJfN1Bt1GVcQBJSKRyRz7LVFBHlaXhzf+9okEM5VLY4U7+nmaBZVRlZcHSgaHv3EBa7QqyOaFCna4Zdno1G0UxgOoTChephFvtCCipu5RFUIEYbdFsVR2rAheS7GL6P5jdIOeVM8J4XUy2BZTHkrHNXAY0cbJnAUbbiylXFOyJAFdcRiyxwC3gPl5lg4CHXLR7ysGPTe49xZfrxX/ABXqygLsPxKAeccyi9Yq1+I4lWIuYAODcKjZWNysXy1eYhxeasipAaW7/U2FgjoGyNXG1VbYm6xofMYUaNv3xLgkL7VFb0IXLApYfDiYR3g0iWLKWfywhqEJyjUIbi0EEopMWRCp7YgdMQTWI5P7iKGzzmJyN6DiFUVtXf4gFAwZddqhluRluGgAtcUZ9C3+4SMl5hbVKu/aXxXFpcWDCVduPaGCje1uFEzRXTmKAqjg9juXRxFsO7+0LFReuviKFjd6u9B/MtCFIbunMOwlScM5sShzG2CwddS8JdkGWDWsMrZ4jrnaHT+4LQ+RYenv6LHjE4jO+pzPeH2l/f1wwGVbX7RApkMQsUNLUbNSwP1ipeAmVpeYFDNhzGXm6wdeIhEtBZ4mA4NZgaooKVFTgtcyhWY3FAClebsyfiEY5RnhbPsxHBLrwmUDd4uUa0s7mXVFUBmXeJpRy299ZjNEavyzxGhFWAO5iF4JzLW/lbcCi6GoZhNgfyrqDDYmcAdn3jA6vadjWpiMvJxLFlj6RC9gUu+YBaAVFnScZjArOt1AKhnUNqxy8P5h25Jm8X8QdEPJKiW8GC6rzGtlSxJUKisRe9llkjxiKrtZzEOANuYtKhQ3zAMMJqWBRnqAaMK3PyhBRT5lUar/AJPSriemvWoR9p4gWsFrvZm/iZVQu3ELLV9ssJMfacwsaMFvEHFvH5haqa1GloZxUpAM8wNolA1DW9leIsPLJ7wEbooB0/wk8yMnURuB21smRgrtqrm7VnO4HqaTS5lAOumV+0oAUcZU3CqJpaQrtk7dj3AB04NKYbEKK+H3gVpsCXMYbUpAFfaWLjW+2HQYBVS3MBxzU0EA0LiUjlYqhS6x7wU2Jbw1MVi1TbXl4iu4ORiiMgcR0gVUOFrEeBE4WfFmYzQDQ/w8yxzXgqIFpFmnWyPUZYuyPLgPvEE8NRTZBBq2wAqKgasgTianPozNnoTE1636e095+5YrOoUtnKsDY0XLq4mAmGNtaN/eXv2jG3JtgFLLOmMgo5pHTZSsfmNQtTt6gbMO2HetBiCbgNPs/qZobv8AMSihWaGJJip9pQAOHOJkwSp0uVnIo4ML4cwIs1+IWwcj' $TestImage &= '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' $TestImage &= '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' $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
-
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 EndFunc1 point
-
Check if file is video
ahmeddzcom reacted to BrewManNH for a topic
Check it how, by file name, by its contents?1 point -
Active Directory UDF (II)
toasterking reacted to water for a topic
_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 -
<SOLVED>Help with SetError
232showtime reacted to czardas for a topic
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 -
1 point
-
<SOLVED>Help with SetError
232showtime reacted to czardas for a topic
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 -
<SOLVED>Help with SetError
232showtime reacted to RTFC for a topic
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 -
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 kylomas1 point
-
youtuber, Are you reading what I post and the comments in the code? kylomas1 point
-
Danp2, Ok. kylomas, Thanks youtuber, Glad you got it worked out.1 point
-
youtuber, Yes, for that source. kylomas1 point
-
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 kylomas1 point
-
@ripdad I'm guessing that those were excluded because they didn't contain a subdomain. Is that correct @youtuber?1 point
-
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. kylomas1 point
-
Week Number of Month Function?
Earthshine reacted to JLogan3o13 for a topic
@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) Next1 point -
Proper use of SetError in a function
Earthshine reacted to water for a topic
My bad . I mixed up Return value and @error.1 point -
Proper use of SetError in a function
Earthshine reacted to water for a topic
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