OgreVorbis

AutoIt Main Script V9.2

Mar 21st, 2026
275
0
Never
16
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 27.73 KB | None | 0 0
  1. #include <WinApi.au3>
  2. #include <WinAPISysWin.au3>
  3. #include <WindowsConstants.au3>
  4. #include <Clipboard.au3>
  5. #include <Array.au3>
  6. #include <String.au3>
  7. #include <Misc.au3>
  8. #include <GUIConstantsEx.au3>
  9. #include <GuiListView.au3>
  10. #include <File.au3>
  11. #include <GDIPlus.au3>
  12. #include <GuiStatusBar.au3>
  13. #include <StaticConstants.au3>
  14.  
  15. GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY_HANDLER")
  16.  
  17. ; THIS IS MY MAIN AUTOIT BACKGROUND PROCESS SCRIPT TO DO VARIOUS IMPORTANT THINGS :)
  18. ; IT ALLOWS FOR PINNING WINDOWS TO TOP, FIXING STUPID YOUTUBE KEYBINDINGS THAT F-UP...
  19. ; DISPLAYS CRYPTO PRICES (CURRENTLY JUST MONERO AND BITCOIN), AND MORE...
  20.  
  21. HotKeySet("`", "PinWindow") ; TILDA KEY KEEPS CURRENT WINDOW ON TOP
  22. ;HotKeySet("{APPSKEY}", "YouTube_Keymap") ; THE MENU KEY (NEXT TO RIGHT-CTRL) FORCES THE YOUTUBE KEYBINDINGS TO WORK
  23. HotKeySet("{PAUSE}", "YouTube_Keymap")
  24. HotKeySet("^!b", "CoinPrice") ; CTRL-ALT-B WILL SHOW THE CURRENT COIN PRICE
  25. HotKeySet("^!n", "DollarToCoin") ; ENTER YOUR AMOUNT OF DOLLARS TO CONVERT TO CURRENT COIN
  26. HotKeySet("^!m", "CoinToDollar") ; COIN TO DOLLARS
  27. HotKeySet("^!s", "SwitchCoin") ; SWITCHES WHAT COIN IS CURRENTLY ACTIVE
  28. HotKeySet("^g", "MapsXClick") ; REMAP THE LEFT MOUSE CLICK AND MOUSE DOWN, TO X KEY - MAKES GOOGLE MAPS NOT OVER-USE MOUSE BUTTON
  29. HotKeySet("^!1", "HideWin1") ; CTRL-ALT-1 HIDE THE CURRENT FOREGROUND WINDOW IN SLOT 1 - JUST PRESS AGAIN TO SHOW
  30. HotKeySet("^!2", "HideWin2") ; HIDE CURRENT WINDOW SLOT 2
  31. HotKeySet("^!3", "HideWin3") ; SLOT 3
  32. HotKeySet("^!0", "UnhideAll") ; UNHIDE ALL HIDDEN WINDOWS
  33. HotKeySet("^!c", "CheckSpelling") ; CHECK SPELLING OF THE CURRENT SELECTED WORD - PUTS RESULT IN CLIPBOARD
  34.  
  35. ; General declarations
  36. Local Const $YT_WINDOW = "- YouTube"
  37. Local $toggle = False
  38. Local $currentCoin = "Bitcoin"
  39.  
  40. Local $mapsToggle = False
  41. Local $mapsPressed = False
  42.  
  43. Local $toggleWin[3] = [False, False, False]
  44. Local $origHWnd[3]
  45.  
  46. ; To-do list declarations
  47. Local $todoGUI, $todoList, $todoInput, $todoAddBtn, $todoClearBtn, $todoSaveBtn, $todoLoadBtn
  48.  
  49.  
  50. ; BITCOIN PRICE STUFF
  51. ; ===================
  52. Global $g_bGDIStarted = False
  53. Global $g_hCoinPriceWnd = 0
  54. Global $g_hCoinGraphWnd = 0
  55. Global $g_hGraphStatus = 0
  56. Global $g_idCoinLabel = 0
  57. Global $g_iCoinModeCoins = 0
  58. Global $g_iCoinModeDollars = 0
  59. Global $g_sDisplayedCoin = ""
  60. Global $g_iGraphHoverSeg = -1
  61. Global $g_idGraphCanvas = 0
  62. Global $g_hGraphCanvas = 0
  63. Global $g_bGraphClickLatch = False
  64. Const  $g_StatusDef = "Price - Begin: ___   End: ___   Avg: ___"
  65. Global $g_sHoverBeg = ""
  66. Global $g_sHoverEnd = ""
  67. Global $g_sHoverAvg = ""
  68. Global $g_bGraphClickPending = False
  69.  
  70.  
  71. Func HttpGet($sURL, $sData = "")
  72.     Local $oMyError = ObjEvent("AutoIt.Error","MyErrFunc")
  73.     Local $oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
  74.     $oHTTP.Open("GET", $sURL & "?" & $sData, False)
  75.     If (@error) Then Return SetError(1, 0, 0)
  76.     $oHTTP.Send()
  77.     If (@error) Then Return SetError(2, 0, 0)
  78.     If ($oHTTP.Status <> 200) Then Return SetError(3, 0, 0)
  79.  
  80.     Return SetError(0, 0, $oHTTP.ResponseText)
  81. EndFunc
  82.  
  83. Func MyErrFunc()
  84.     MsgBox(48, "Error", "API communication error. Check connection.", 5)
  85. EndFunc
  86.  
  87. Func GetPrice($sCoin = "")
  88.     If $sCoin = "" Then $sCoin = $currentCoin
  89.     Local $thePrice = ""
  90.     Local $begining = 0
  91.     Local $ending = 0
  92.     If $sCoin = "Bitcoin" Then
  93.         $thePrice = HttpGet("[***************************** REDACTED *********************************]")
  94.     Else
  95.         $thePrice = HttpGet("[***************************** REDACTED *********************************]")
  96.     EndIf
  97.  
  98.     If @error Or $thePrice = "" Then Return 0
  99.     $begining = StringInStr($thePrice, '"last_price":"') + 14
  100.     If $begining <= 14 Then Return 0
  101.     $ending = StringInStr($thePrice, '",', 0, 1, $begining)
  102.     If $ending <= 0 Then Return 0
  103.  
  104.     Return Number(StringMid($thePrice, $begining, $ending - $begining))
  105. EndFunc
  106.  
  107. Func _FormatCoinValue($nValue)
  108.     If Abs($nValue) >= 1000 Then Return Round($nValue, 0)
  109.     If Abs($nValue) >= 100 Then Return Round($nValue, 2)
  110.     If Abs($nValue) >= 1 Then Return Round($nValue, 4)
  111.     Return Round($nValue, 6)
  112. EndFunc
  113.  
  114. Func _GetPriceHistoryFile($sCoin)
  115.     If $sCoin = "Bitcoin" Then
  116.         Return @ScriptDir & "\bitcoin.log"
  117.     Else
  118.         Return @ScriptDir & "\monero.log"
  119.     EndIf
  120. EndFunc
  121.  
  122. Func SaveCoinPriceHistory($sCoin, $nPrice)
  123.     Local $sFile = _GetPriceHistoryFile($sCoin)
  124.     Local $hFile = FileOpen($sFile, 1)
  125.     If $hFile = -1 Then Return False
  126.     FileWriteLine($hFile, String($nPrice))
  127.     FileClose($hFile)
  128.     Return True
  129. EndFunc
  130.  
  131. Func ReadCoinPriceHistory($sCoin)
  132.     Local $sFile = _GetPriceHistoryFile($sCoin)
  133.     If Not FileExists($sFile) Then
  134.         Local $aEmpty[0]
  135.         Return $aEmpty
  136.     EndIf
  137.  
  138.     Local $aLines = FileReadToArray($sFile)
  139.     If @error Then
  140.         Local $aEmpty2[0]
  141.         Return $aEmpty2
  142.     EndIf
  143.  
  144.     Local $iValid = 0
  145.     For $i = 0 To UBound($aLines) - 1
  146.         If StringStripWS($aLines[$i], 8) <> "" Then $iValid += 1
  147.     Next
  148.  
  149.     If $iValid = 0 Then
  150.         Local $aEmpty3[0]
  151.         Return $aEmpty3
  152.     EndIf
  153.  
  154.     Local $aValues[$iValid]
  155.     Local $j = 0
  156.     For $i = 0 To UBound($aLines) - 1
  157.         If StringStripWS($aLines[$i], 8) <> "" Then
  158.             $aValues[$j] = Number($aLines[$i])
  159.             $j += 1
  160.         EndIf
  161.     Next
  162.     Return $aValues
  163. EndFunc
  164.  
  165. Func _DownsampleValues(ByRef $aValues, $iMaxPoints)
  166.     Local $iCount = UBound($aValues)
  167.     If $iCount <= $iMaxPoints Then Return $aValues
  168.  
  169.     Local $iStep = Ceiling($iCount / $iMaxPoints)
  170.     Local $iNewCount = Ceiling($iCount / $iStep)
  171.     Local $aOut[$iNewCount]
  172.     Local $j = 0
  173.     For $i = 0 To $iCount - 1 Step $iStep
  174.         $aOut[$j] = $aValues[$i]
  175.         $j += 1
  176.     Next
  177.     If $aOut[$j - 1] <> $aValues[$iCount - 1] Then
  178.         ReDim $aOut[$j + 1]
  179.         $aOut[$j] = $aValues[$iCount - 1]
  180.     EndIf
  181.     Return $aOut
  182. EndFunc
  183.  
  184.  
  185. ; COIN DISPLAY AND GRAPHING ROUTINES
  186. ; ==================================
  187. Func _EnsureGDIPlus()
  188.     If Not $g_bGDIStarted Then
  189.         _GDIPlus_Startup()
  190.         $g_bGDIStarted = True
  191.     EndIf
  192. EndFunc
  193.  
  194. Func _FillGraphArea($hBuffer, ByRef $aLinePts, $iBaseY, $iGraphLeft, $iGraphRight, $hBrushFill)
  195.     Local $iPts = UBound($aLinePts)
  196.     If $iPts < 2 Then Return
  197.  
  198.     For $i = 0 To $iPts - 2
  199.         Local $x1 = Int($aLinePts[$i][0])
  200.         Local $y1 = Int($aLinePts[$i][1])
  201.         Local $x2 = Int($aLinePts[$i + 1][0])
  202.         Local $y2 = Int($aLinePts[$i + 1][1])
  203.  
  204.         If $x2 < $x1 Then
  205.             Local $tx = $x1, $ty = $y1
  206.             $x1 = $x2
  207.             $y1 = $y2
  208.             $x2 = $tx
  209.             $y2 = $ty
  210.         EndIf
  211.  
  212.         If $x1 = $x2 Then
  213.             Local $topY = $y1
  214.             If $y2 < $topY Then $topY = $y2
  215.             _GDIPlus_GraphicsFillRect($hBuffer, $x1, $topY, 1, $iBaseY - $topY + 1, $hBrushFill)
  216.         Else
  217.             For $x = $x1 To $x2
  218.                 Local $t = ($x - $x1) / ($x2 - $x1)
  219.                 Local $y = Int(Round($y1 + (($y2 - $y1) * $t)))
  220.                 If $y < 0 Then $y = 0
  221.                 If $y > $iBaseY Then $y = $iBaseY
  222.                 _GDIPlus_GraphicsFillRect($hBuffer, $x, $y, 1, $iBaseY - $y + 1, $hBrushFill)
  223.             Next
  224.         EndIf
  225.     Next
  226.  
  227.     ; Ensure the filled area reaches the graph edges exactly.
  228.     Local $firstX = Int($aLinePts[0][0])
  229.     Local $firstY = Int($aLinePts[0][1])
  230.     If $firstX > $iGraphLeft Then
  231.         _GDIPlus_GraphicsFillRect($hBuffer, $iGraphLeft, $firstY, $firstX - $iGraphLeft + 1, $iBaseY - $firstY + 1, $hBrushFill)
  232.     EndIf
  233.     Local $lastX = Int($aLinePts[$iPts - 1][0])
  234.     Local $lastY = Int($aLinePts[$iPts - 1][1])
  235.     If $lastX < $iGraphRight Then
  236.         _GDIPlus_GraphicsFillRect($hBuffer, $lastX, $lastY, $iGraphRight - $lastX + 1, $iBaseY - $lastY + 1, $hBrushFill)
  237.     EndIf
  238. EndFunc
  239.  
  240. Func _GetHoveredGraphSegment($hWndGraph, $iGraphLeft, $iGraphTop, $iGraphW, $iGraphH, $iCount)
  241.     If $iCount < 2 Then Return -1
  242.     If $g_idGraphCanvas = 0 Then Return -1
  243.  
  244.     Local $aWin = WinGetPos($hWndGraph)
  245.     If @error Then Return -1
  246.  
  247.     Local $aCanvas = ControlGetPos($hWndGraph, "", $g_idGraphCanvas)
  248.     If @error Then Return -1
  249.  
  250.     Local $aMouse = MouseGetPos()
  251.  
  252.     Local $mx = $aMouse[0] - ($aWin[0] + $aCanvas[0])
  253.     Local $my = $aMouse[1] - ($aWin[1] + $aCanvas[1])
  254.  
  255.     ; Only require the mouse to be inside the canvas
  256.     If $mx < 0 Or $mx > $aCanvas[2] Then Return -1
  257.     If $my < 0 Or $my > ($aCanvas[3] + 18) Then Return -1
  258.  
  259.     Local $nStepX = $iGraphW / ($iCount - 1)
  260.     If $nStepX <= 0 Then Return -1
  261.  
  262.     Local $iSeg = Floor(($mx - $iGraphLeft) / $nStepX)
  263.     If $iSeg < 0 Then $iSeg = 0
  264.     If $iSeg > ($iCount - 2) Then $iSeg = $iCount - 2
  265.  
  266.     Return $iSeg
  267. EndFunc
  268.  
  269. Func _FillGraphSegmentArea($hBuffer, $x1, $y1, $x2, $y2, $iBaseY, $hBrushFill)
  270.     $x1 = Int($x1)
  271.     $y1 = Int($y1)
  272.     $x2 = Int($x2)
  273.     $y2 = Int($y2)
  274.  
  275.     If $x2 < $x1 Then
  276.         Local $tx = $x1, $ty = $y1
  277.         $x1 = $x2
  278.         $y1 = $y2
  279.         $x2 = $tx
  280.         $y2 = $ty
  281.     EndIf
  282.  
  283.     If $x1 = $x2 Then
  284.         Local $topY = $y1
  285.         If $y2 < $topY Then $topY = $y2
  286.         _GDIPlus_GraphicsFillRect($hBuffer, $x1, $topY, 1, $iBaseY - $topY + 1, $hBrushFill)
  287.         Return
  288.     EndIf
  289.  
  290.     For $x = $x1 To $x2
  291.         Local $t = ($x - $x1) / ($x2 - $x1)
  292.         Local $y = Int(Round($y1 + (($y2 - $y1) * $t)))
  293.         If $y < 0 Then $y = 0
  294.         If $y > $iBaseY Then $y = $iBaseY
  295.         _GDIPlus_GraphicsFillRect($hBuffer, $x, $y, 1, $iBaseY - $y + 1, $hBrushFill)
  296.     Next
  297. EndFunc
  298.  
  299. Func _GetCenteredGraphX($iPriceX, $iPriceW, $iGraphW)
  300.     Return $iPriceX + Int(($iPriceW - $iGraphW) / 2)
  301. EndFunc
  302.  
  303. Func RefreshActiveCoinDisplay($bSaveHistory = False)
  304.     If Not WinExists($g_hCoinPriceWnd) Or Not WinExists($g_hCoinGraphWnd) Then Return False
  305.  
  306.     Local $rawPrice = GetPrice($currentCoin)
  307.     If $rawPrice = 0 Then Return False
  308.  
  309.     Local $displayValue = 0
  310.     If $g_iCoinModeDollars = 0 Then
  311.         $displayValue = $rawPrice * $g_iCoinModeCoins
  312.     Else
  313.         $displayValue = $g_iCoinModeDollars / $rawPrice
  314.     EndIf
  315.  
  316.     $g_sDisplayedCoin = $currentCoin
  317.     WinSetTitle($g_hCoinPriceWnd, "", $currentCoin & " Price")
  318.     WinSetTitle($g_hCoinGraphWnd, "", $currentCoin & " History")
  319.     GUICtrlSetData($g_idCoinLabel, _FormatCoinValue($displayValue))
  320.     ;ClipPut(String(_FormatCoinValue($displayValue)))
  321.     If $bSaveHistory Then SaveCoinPriceHistory($currentCoin, $rawPrice)
  322.     DrawCoinGraph($g_hCoinGraphWnd, $currentCoin)
  323.     Return True
  324. EndFunc
  325.  
  326. Func SwitchCoin()
  327.     If $currentCoin = "Bitcoin" Then
  328.         $currentCoin = "Monero"
  329.     Else
  330.         $currentCoin = "Bitcoin"
  331.     EndIf
  332.  
  333.     If WinExists($g_hCoinPriceWnd) And WinExists($g_hCoinGraphWnd) Then
  334.         WinSetTrans($g_hCoinPriceWnd, "", 48)
  335.         RefreshActiveCoinDisplay(True)
  336.         Sleep(250)
  337.         WinSetTrans($g_hCoinPriceWnd, "", 255)
  338.     EndIf
  339.  
  340.     ToolTip("Current coin is " & $currentCoin, @DesktopWidth / 2, (@DesktopHeight / 2) - 128, "Coin", 1, 2)
  341.     Sleep(1750)
  342.     ToolTip("")
  343. EndFunc
  344.  
  345. Func GraphSegmentCopyPrompt($sBeg, $sEnd, $sAvg)
  346.     Local $iFlags = 35 + 65536 + 262144 ; Yes/No/Cancel + SetForeground + TopMost
  347.     Local $iResult = MsgBox($iFlags, "Copy Value", "Do you want to copy the average value?" & @CRLF & _
  348.     "(Press 'No' to copy the beginning value.)", 0, $g_hCoinGraphWnd)
  349.  
  350.     If $iResult = 6 Then
  351.         ClipPut($sAvg) ; Yes
  352.     ElseIf $iResult = 7 Then
  353.         ClipPut($sBeg) ; No
  354.     EndIf
  355. EndFunc
  356.  
  357. Func PollGraphClick()
  358.     If Not WinExists($g_hCoinGraphWnd) Then
  359.         $g_bGraphClickLatch = False
  360.         Return
  361.     EndIf
  362.  
  363.     Local $bLeftDown = _IsPressed("01")
  364.  
  365.     If Not $bLeftDown Then
  366.         $g_bGraphClickLatch = False
  367.         Return
  368.     EndIf
  369.  
  370.     If $g_bGraphClickLatch Then Return
  371.     If $g_iGraphHoverSeg < 0 Then Return
  372.     If $g_sHoverBeg = "" Then Return
  373.  
  374.     $g_bGraphClickLatch = True
  375.  
  376.     GraphSegmentCopyPrompt($g_sHoverBeg, $g_sHoverEnd, $g_sHoverAvg)
  377. EndFunc
  378.  
  379. Func DrawCoinGraph($hWndGraph, $sCoin)
  380.     Local $aWinPos = WinGetPos($hWndGraph)
  381.     If @error Then Return
  382.     Local $aCanvasPos = ControlGetPos($hWndGraph, "", $g_idGraphCanvas)
  383.     If @error Then Return
  384.  
  385.     Local $iWidth = $aCanvasPos[2]
  386.     Local $iHeight = $aCanvasPos[3]
  387.     Local $iMarginLeft = 2
  388.     Local $iMarginTop = 3
  389.     Local $iMarginRight = 2
  390.     Local $iMarginBottom = 3
  391.  
  392.     If $g_hGraphStatus <> 0 Then _GUICtrlStatusBar_Resize($g_hGraphStatus)
  393.     Local $iStatusH = 0
  394.     If $g_hGraphStatus <> 0 Then $iStatusH = _GUICtrlStatusBar_GetHeight($g_hGraphStatus)
  395.  
  396.     Local $iGraphW = $iWidth - ($iMarginLeft + $iMarginRight)
  397.     Local $iGraphH = $iHeight - ($iMarginTop + $iMarginBottom)
  398.     If $iGraphW < 2 Or $iGraphH < 2 Then Return
  399.  
  400.     Local $aValues = ReadCoinPriceHistory($sCoin)
  401.     If UBound($aValues) < 2 Then Return
  402.     $aValues = _DownsampleValues($aValues, $iGraphW)
  403.  
  404.     Local $nMin = $aValues[0]
  405.     Local $nMax = $aValues[0]
  406.     For $i = 1 To UBound($aValues) - 1
  407.         If $aValues[$i] < $nMin Then $nMin = $aValues[$i]
  408.         If $aValues[$i] > $nMax Then $nMax = $aValues[$i]
  409.     Next
  410.  
  411.     Local $nRange = $nMax - $nMin
  412.     If $nRange = 0 Then $nRange = 1
  413.  
  414.     _EnsureGDIPlus()
  415.     Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND($g_hGraphCanvas)
  416.     Local $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $hGraphics)
  417.     Local $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
  418.  
  419.     _GDIPlus_GraphicsSetSmoothingMode($hBuffer, 2)
  420.     _GDIPlus_GraphicsClear($hBuffer, 0xFFFFFFFF)
  421.  
  422.     Local $hPen = _GDIPlus_PenCreate(0xFF0E5AA7, 2)
  423.     Local $hPenHover = _GDIPlus_PenCreate(0xFF083B73, 2)
  424.     Local $hBrushFill = _GDIPlus_BrushCreateSolid(0x883A8DDE)
  425.     Local $hBrushHover = _GDIPlus_BrushCreateSolid(0xAA236FC2)
  426.     Local $hBrushBg = _GDIPlus_BrushCreateSolid(0xFFF3F8FE)
  427.     _GDIPlus_GraphicsFillRect($hBuffer, $iMarginLeft, $iMarginTop, $iGraphW, $iGraphH, $hBrushBg)
  428.  
  429.     Local $iCount = UBound($aValues)
  430.     Local $nStepX = $iGraphW / ($iCount - 1)
  431.     Local $iBaseY = $iMarginTop + $iGraphH
  432.     Local $aPoly[$iCount][2]
  433.  
  434.     For $i = 0 To $iCount - 1
  435.         Local $x = $iMarginLeft + ($i * $nStepX)
  436.         Local $y
  437.         If $nMax = $nMin Then
  438.             $y = $iMarginTop + ($iGraphH / 2)
  439.         Else
  440.             $y = $iMarginTop + ($iGraphH - ((($aValues[$i] - $nMin) / $nRange) * $iGraphH))
  441.         EndIf
  442.         $aPoly[$i][0] = Int(Round($x))
  443.         $aPoly[$i][1] = Int(Round($y))
  444.     Next
  445.  
  446.     Local $iHoverSeg = _GetHoveredGraphSegment($hWndGraph, $iMarginLeft, $iMarginTop, $iGraphW, $iGraphH, $iCount)
  447.     $g_iGraphHoverSeg = $iHoverSeg
  448.  
  449.     _FillGraphArea($hBuffer, $aPoly, $iBaseY, $iMarginLeft, $iMarginLeft + $iGraphW, $hBrushFill)
  450.  
  451.     If $iHoverSeg >= 0 Then
  452.         _FillGraphSegmentArea($hBuffer, _
  453.             $aPoly[$iHoverSeg][0], $aPoly[$iHoverSeg][1], _
  454.             $aPoly[$iHoverSeg + 1][0], $aPoly[$iHoverSeg + 1][1], _
  455.             $iBaseY, $hBrushHover)
  456.     EndIf
  457.  
  458.     For $i = 0 To $iCount - 2
  459.         _GDIPlus_GraphicsDrawLine($hBuffer, $aPoly[$i][0], $aPoly[$i][1], $aPoly[$i + 1][0], $aPoly[$i + 1][1], $hPen)
  460.     Next
  461.  
  462.     If $iHoverSeg >= 0 Then
  463.         Local $nBeg = $aValues[$iHoverSeg]
  464.         Local $nEnd = $aValues[$iHoverSeg + 1]
  465.         Local $nAvg = ($nBeg + $nEnd) / 2
  466.  
  467.         Local $sBeg = _FormatCoinValue($nBeg)
  468.         Local $sEnd = _FormatCoinValue($nEnd)
  469.         Local $sAvg = _FormatCoinValue($nAvg)
  470.  
  471.         $g_sHoverBeg = $sBeg
  472.         $g_sHoverEnd = $sEnd
  473.         $g_sHoverAvg = $sAvg
  474.  
  475.         _GDIPlus_GraphicsDrawLine($hBuffer, _
  476.             $aPoly[$iHoverSeg][0], $aPoly[$iHoverSeg][1], _
  477.             $aPoly[$iHoverSeg + 1][0], $aPoly[$iHoverSeg + 1][1], _
  478.             $hPenHover)
  479.  
  480.         If $g_hGraphStatus <> 0 Then
  481.             _GUICtrlStatusBar_SetText($g_hGraphStatus, _
  482.                 "Price - Begin: " & $sBeg & _
  483.                 "   End: " & $sEnd & _
  484.                 "   Avg: " & $sAvg)
  485.         EndIf
  486.  
  487.     Else
  488.         If $g_hGraphStatus <> 0 Then _GUICtrlStatusBar_SetText($g_hGraphStatus, $g_StatusDef)
  489.         $g_bGraphClickLatch = False
  490.         $g_sHoverBeg = ""
  491.         $g_sHoverEnd = ""
  492.         $g_sHoverAvg = ""
  493.     EndIf
  494.  
  495.     _GDIPlus_GraphicsDrawRect($hBuffer, 0, 0, $iWidth - 1, $iHeight - 1, $hPen)
  496.     _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $iWidth, $iHeight)
  497.  
  498.     _GDIPlus_BrushDispose($hBrushBg)
  499.     _GDIPlus_BrushDispose($hBrushFill)
  500.     _GDIPlus_BrushDispose($hBrushHover)
  501.     _GDIPlus_PenDispose($hPen)
  502.     _GDIPlus_PenDispose($hPenHover)
  503.     _GDIPlus_GraphicsDispose($hBuffer)
  504.     _GDIPlus_BitmapDispose($hBitmap)
  505.     _GDIPlus_GraphicsDispose($hGraphics)
  506. EndFunc
  507.  
  508. Func CreateCoinWindows($sCoin, $sText, ByRef $hWndPrice, ByRef $idLabel, ByRef $hWndGraph)
  509.     Local $iPriceW = 420
  510.     Local $iPriceH = 145
  511.     Local $iGraphW = 840
  512.     Local $iGraphH = 220
  513.     Local $iX = -1
  514.     Local $iY = -1
  515.  
  516.     $hWndPrice = GUICreate($sCoin & " Price", $iPriceW, $iPriceH, $iX, $iY, BitOR($WS_CAPTION, $WS_SYSMENU), BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))
  517.     GUISetBkColor(0xFFFFFF, $hWndPrice)
  518.     $idLabel = GUICtrlCreateLabel($sText, 10, 25, $iPriceW - 20, 80, BitOR($SS_CENTER, $SS_CENTERIMAGE))
  519.     GUICtrlSetFont($idLabel, 72, 700, 0, "Segoe UI")
  520.     GUICtrlSetColor($idLabel, 0x202020)
  521.     GUISetState(@SW_SHOW, $hWndPrice)
  522.  
  523.     Local $aPos = WinGetPos($hWndPrice)
  524.     Local $iGraphX = _GetCenteredGraphX($aPos[0], $aPos[2], $iGraphW)
  525.     Local $iGraphY = $aPos[1] + $aPos[3] + 10
  526.     $hWndGraph = GUICreate($sCoin & " History", $iGraphW, $iGraphH, $iGraphX, $iGraphY, BitOR($WS_CAPTION, $WS_SYSMENU), BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))
  527.     GUISetBkColor(0xFFFFFF, $hWndGraph)
  528.     Local $iStatusReserve = 22 ; or whatever fits your status bar nicely
  529.     $g_idGraphCanvas = GUICtrlCreatePic("", 0, 0, $iGraphW, $iGraphH - $iStatusReserve)
  530.     $g_hGraphCanvas = GUICtrlGetHandle($g_idGraphCanvas)
  531.     $g_hGraphStatus = _GUICtrlStatusBar_Create($hWndGraph)
  532.     _GUICtrlStatusBar_SetText($g_hGraphStatus, $g_StatusDef)
  533.     GUISetState(@SW_SHOW, $hWndGraph)
  534. EndFunc
  535.  
  536. Func UpdateCoinGraphPosition($hWndPrice, $hWndGraph)
  537.     Local $aPricePos = WinGetPos($hWndPrice)
  538.     Local $aGraphPos = WinGetPos($hWndGraph)
  539.     If @error Then Return
  540.  
  541.     Local $iNewX = _GetCenteredGraphX($aPricePos[0], $aPricePos[2], $aGraphPos[2])
  542.     Local $iNewY = $aPricePos[1] + $aPricePos[3] + 10
  543.  
  544.     WinMove($hWndGraph, "", $iNewX, $iNewY)
  545. EndFunc
  546.  
  547. Func CoinPrice()
  548.     DispPrice(1, 0)
  549. EndFunc
  550.  
  551. Func DollarToCoin()
  552.     Local $dollars = Number(InputBox("Dollars", "Type in your amount of dollars to convert to " & $currentCoin & ":"))
  553.     If $dollars > 0 Then DispPrice(0, $dollars)
  554. EndFunc
  555.  
  556. Func CoinToDollar()
  557.     Local $coins = Number(InputBox("Enter Coin", "Type in your amount of " & $currentCoin & ":"))
  558.     If $coins > 0 Then DispPrice($coins, 0)
  559. EndFunc
  560.  
  561. Func DispPrice($coins, $dollars)
  562.     Local $sCoin = $currentCoin
  563.     Local $rawPrice = GetPrice($sCoin)
  564.     If $rawPrice = 0 Then Return
  565.  
  566.     Local $displayValue = 0
  567.     If $dollars = 0 Then
  568.         $displayValue = $rawPrice * $coins
  569.     Else
  570.         $displayValue = $dollars / $rawPrice
  571.     EndIf
  572.  
  573.     ClipPut(String(_FormatCoinValue($displayValue)))
  574.     SaveCoinPriceHistory($sCoin, $rawPrice)
  575.  
  576.     $g_iCoinModeCoins = $coins
  577.     $g_iCoinModeDollars = $dollars
  578.     $g_sDisplayedCoin = $sCoin
  579.  
  580.     $g_hCoinPriceWnd = 0
  581.     $g_hCoinGraphWnd = 0
  582.     $g_idCoinLabel = 0
  583.     CreateCoinWindows($sCoin, _FormatCoinValue($displayValue), $g_hCoinPriceWnd, $g_idCoinLabel, $g_hCoinGraphWnd)
  584.     DrawCoinGraph($g_hCoinGraphWnd, $sCoin)
  585.  
  586.     Local $hTimerPrice = TimerInit()
  587.     Local $hTimerRedraw = TimerInit()
  588.     AdlibRegister("PollGraphClick", 20) ; NO, IT'S NOT AD-LIB AS IN RETRO PC SOUNDS LOLZ
  589.  
  590.     While WinExists($g_hCoinPriceWnd) And WinExists($g_hCoinGraphWnd)
  591.         Local $msg1 = GUIGetMsg()
  592.         If $msg1 = $GUI_EVENT_CLOSE Then ExitLoop
  593.  
  594.         UpdateCoinGraphPosition($g_hCoinPriceWnd, $g_hCoinGraphWnd)
  595.  
  596.         If TimerDiff($hTimerPrice) >= 3000 Then
  597.             RefreshActiveCoinDisplay(False)
  598.             $hTimerPrice = TimerInit()
  599.         EndIf
  600.  
  601.         If TimerDiff($hTimerRedraw) >= 40 Then
  602.             DrawCoinGraph($g_hCoinGraphWnd, $currentCoin)
  603.             $hTimerRedraw = TimerInit()
  604.         EndIf
  605.  
  606.         Sleep(20)
  607.     WEnd
  608.  
  609.     AdlibUnRegister("PollGraphClick")
  610.     If WinExists($g_hCoinGraphWnd) Then GUIDelete($g_hCoinGraphWnd)
  611.     If WinExists($g_hCoinPriceWnd) Then GUIDelete($g_hCoinPriceWnd)
  612.     $g_hCoinGraphWnd = 0
  613.     $g_hCoinPriceWnd = 0
  614.     $g_idCoinLabel = 0
  615.     $g_iGraphHoverSeg = -1
  616.     $g_sDisplayedCoin = ""
  617. EndFunc
  618.  
  619.  
  620. ; YOUTUBE KEYBOARD CONTROL BUG FIX
  621. ; ================================
  622. Func YouTube_Keymap()
  623.     Sleep(150)
  624.     MouseClick($MOUSE_CLICK_LEFT, 750, 500, 1, 4)
  625.     Sleep(250)
  626.     Send("{SPACE}")
  627. EndFunc
  628.  
  629.  
  630. ; GOOGLE MAPS REMAP MOUSE CLICK TO X KEY
  631. ; ======================================
  632. Func MapsXClick()
  633.     If $mapsToggle = False Then
  634.         $mapsToggle = True
  635.         MsgBox(64, "Google Maps Engine", "The X key remap is turned ON.")
  636.     Else
  637.         $mapsToggle = False
  638.         MsgBox(64, "Google Maps Engine", "The X key remap is turned OFF.")
  639.     EndIf
  640. EndFunc
  641.  
  642. Func HoldDownMouse($keyCode)
  643.     If _IsPressed($keyCode) And $mapsPressed = False Then
  644.         $mapsPressed = True
  645.         MouseDown($MOUSE_CLICK_LEFT)
  646.     EndIf
  647.     If Not _IsPressed($keyCode) And $mapsPressed = True Then
  648.         MouseUp($MOUSE_CLICK_LEFT)
  649.         $mapsPressed = False
  650.     EndIf
  651. EndFunc
  652.  
  653.  
  654. ; KEEP THE WINDOW ON TOP BY PRESSING THE TILDA KEY
  655. ; ================================================
  656. Func PinWindow()
  657.     If $toggle = False Then
  658.         $toggle = True
  659.         ; Retrieve the handle of the active window.
  660.         Local $hWnd = WinGetHandle("[ACTIVE]")
  661.         ; Set the active window as being ontop using the handle returned by WinGetHandle.
  662.         WinSetOnTop($hWnd, "", $WINDOWS_ONTOP)
  663.     Else
  664.         $toggle = False
  665.         ; Retrieve the handle of the active window.
  666.         Local $hWnd = WinGetHandle("[ACTIVE]")
  667.         ; Set the active window as being ontop using the handle returned by WinGetHandle.
  668.         WinSetOnTop($hWnd, "", $WINDOWS_NOONTOP)
  669.     EndIf
  670. EndFunc
  671.  
  672.  
  673. ; FUNCTIONS FOR HIDING WINDOWS
  674. ; ============================
  675. Func HideWin1()
  676.     DoHideWin(0)
  677. EndFunc
  678. Func HideWin2()
  679.     DoHideWin(1)
  680. EndFunc
  681. Func HideWin3()
  682.     DoHideWin(2)
  683. EndFunc
  684. Func UnhideAll()
  685.     For $i = 0 To 2
  686.         If IsHWnd($origHWnd[$i]) Then
  687.             WinSetState($origHWnd[$i], "", @SW_SHOW)
  688.             $toggleWin[$i] = False
  689.         EndIf
  690.     Next
  691. EndFunc
  692.  
  693. Func DoHideWin($winNumber)
  694.     If $toggleWin[$winNumber] = False Then
  695.         $origHWnd[$winNumber] = WinGetHandle("[ACTIVE]")
  696.         WinSetState("[ACTIVE]", "", @SW_HIDE)
  697.         $toggleWin[$winNumber] = True
  698.     Else
  699.         WinSetState($origHWnd[$winNumber], "", @SW_SHOW)
  700.         WinActivate($origHWnd[$winNumber])
  701.         $toggleWin[$winNumber] = False
  702.     EndIf
  703. EndFunc
  704.  
  705. Func _SendEx($ss)
  706.     Local $iT = TimerInit()
  707.  
  708.     While _IsPressed("10") Or _IsPressed("11") Or _IsPressed("12")
  709.         Sleep(50)
  710.     WEnd
  711.     Send($ss)
  712. EndFunc
  713.  
  714.  
  715. ; CHECK SPELLING BY RUNNING EXTERNAL SPELL CHECKER
  716. ; ================================================
  717. Func CheckSpelling()
  718.     Local $strClip
  719.  
  720.     Sleep(150)
  721.     _SendEx("^c")
  722.     Sleep(50)
  723.     $strClip = ClipGet()
  724.     ShellExecuteWait("spellcheck.exe")
  725.     Sleep(150)
  726.     If $strClip <> ClipGet() Then
  727.         _SendEx("^v")
  728.     EndIf
  729. EndFunc
  730.  
  731.  
  732. ; DISPLAY AND RUN THE TO-DO LIST
  733. ; ==============================
  734. Func ShowTodoList()
  735.     Local $width = 400, $height = 350
  736.  
  737.     $todoGUI = GUICreate("To-Do List", $width, $height, -1, -1)
  738.     $todoList = GUICtrlCreateListView("Task", 10, 10, $width - 20, 250, BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT, $LVS_SINGLESEL, $LVS_EDITLABELS))
  739.     Local $hListView = GUICtrlGetHandle($todoList)
  740.     _GUICtrlListView_SetExtendedListViewStyle($hListView, $LVS_EX_CHECKBOXES)
  741.     _GUICtrlListView_SetColumnWidth($hListView, 0, $LVSCW_AUTOSIZE_USEHEADER)
  742.  
  743.     $todoInput = GUICtrlCreateInput("", 10, 270, $width - 160, 24)
  744.     $todoAddBtn = GUICtrlCreateButton("Add", $width - 145, 270, 65, 24)
  745.     $todoDeleteBtn = GUICtrlCreateButton("Delete", $width - 75, 270, 65, 24)
  746.  
  747.     $todoClearBtn = GUICtrlCreateButton("Clear", 20, 310, 100, 30)
  748.     $todoSaveBtn = GUICtrlCreateButton("Save", 150, 310, 100, 30)
  749.     $todoLoadBtn = GUICtrlCreateButton("Load", 280, 310, 100, 30)
  750.  
  751.     GUISetState(@SW_SHOW, $todoGUI)
  752.     LoadTodoList()
  753.  
  754.     While True
  755.         If _IsPressed("0D") Then ; 0D is virtual key code for Enter - WE ARE ADDING A NEW ITEM TO THE LIST BY PRESSING ENTER KEY, NOT ONLY BY BUTTON CLICK
  756.             Local $focusedCtrl = ControlGetFocus($todoGUI)
  757.             If ControlGetHandle($todoGUI, "", $focusedCtrl) = GUICtrlGetHandle($todoInput) Then
  758.                 Local $text = GUICtrlRead($todoInput)
  759.                 If StringStripWS($text, 3) <> "" Then
  760.                     GUICtrlCreateListViewItem($text, $todoList)
  761.                     _GUICtrlListView_SetColumnWidth($hListView, 0, $LVSCW_AUTOSIZE_USEHEADER)
  762.                     GUICtrlSetData($todoInput, "")
  763.                 EndIf
  764.             EndIf
  765.         EndIf
  766.  
  767.         Switch GUIGetMsg()       ; SOMEDAY WE NEED TO PUMP THIS INTO ITS OWN VAR THAT WE SWITCH..CASE ON BELOW. THAT WAY WE CAN FAKE TRIGGER A CASE EVENT WHEREEVER WE WANT.
  768.             Case $GUI_EVENT_CLOSE
  769.                 GUIDelete($todoGUI)
  770.                 ExitLoop
  771.  
  772.             Case $todoAddBtn
  773.                 Local $text = GUICtrlRead($todoInput)
  774.                 If StringStripWS($text, 3) <> "" Then
  775.                     GUICtrlCreateListViewItem($text, $todoList)
  776.                     _GUICtrlListView_SetColumnWidth($hListView, 0, $LVSCW_AUTOSIZE_USEHEADER)
  777.                     GUICtrlSetData($todoInput, "")
  778.                 EndIf
  779.  
  780.             Case $todoDeleteBtn
  781.                 Local $index = _GUICtrlListView_GetSelectionMark($hListView)
  782.                 If $index <> -1 Then
  783.                     _GUICtrlListView_DeleteItem($hListView, $index)
  784.                 EndIf
  785.  
  786.             Case $todoClearBtn
  787.                 _GUICtrlListView_DeleteAllItems($hListView)
  788.  
  789.             Case $todoSaveBtn
  790.                 SaveTodoList()
  791.  
  792.             Case $todoLoadBtn
  793.                 LoadTodoList()
  794.         EndSwitch
  795.     WEnd
  796. EndFunc
  797.  
  798. Func SaveTodoList()
  799.     Local $hListView = GUICtrlGetHandle($todoList)
  800.     Local $count = _GUICtrlListView_GetItemCount($hListView)
  801.     If $count <> 0 Then
  802.         Local $f = FileOpen(@ScriptDir & "\todo.ini", 2)
  803.         If $f = -1 Then
  804.             MsgBox(16, "Error", "Cannot save file!")
  805.             Return
  806.         EndIf
  807.         For $i = 0 To $count - 1
  808.             Local $text = _GUICtrlListView_GetItemText($hListView, $i)
  809.             Local $checked = _GUICtrlListView_GetItemChecked($hListView, $i)
  810.             FileWriteLine($f, $checked & "|" & $text)
  811.         Next
  812.         FileClose($f)
  813.     EndIf
  814. EndFunc
  815.  
  816. Func LoadTodoList()
  817.     Local $hListView = GUICtrlGetHandle($todoList)
  818.     If Not FileExists(@ScriptDir & "\todo.ini") Then Return
  819.     _GUICtrlListView_DeleteAllItems($hListView)
  820.     Local $lines = FileReadToArray(@ScriptDir & "\todo.ini")
  821.     For $i = 0 To UBound($lines) - 1
  822.         Local $parts = StringSplit($lines[$i], "|", 2)
  823.         If UBound($parts) = 2 Then
  824.             GUICtrlCreateListViewItem($parts[1], $todoList)
  825.             Local $index = _GUICtrlListView_GetItemCount($hListView) - 1
  826.             _GUICtrlListView_SetItemChecked($hListView, $index, $parts[0] = "True")
  827.         EndIf
  828.     Next
  829.     _GUICtrlListView_SetColumnWidth($hListView, 0, $LVSCW_AUTOSIZE_USEHEADER)
  830. EndFunc
  831.  
  832. Func WM_NOTIFY_HANDLER($hWnd, $iMsg, $wParam, $lParam)
  833.     Local $tNMHDR = DllStructCreate("int;int;int", $lParam)
  834.     Local $hwFrom = DllStructGetData($tNMHDR, 1)
  835.     Local $code = DllStructGetData($tNMHDR, 3)
  836.     Local $hListView = GUICtrlGetHandle($todoList)
  837.  
  838.     If $code = $NM_DBLCLK Then
  839.         If $hwFrom = $hListView Then
  840.             Local $index = _GUICtrlListView_GetSelectionMark($hListView)
  841.             If $index <> -1 Then
  842.                 Local $oldText = _GUICtrlListView_GetItemText($hListView, $index)
  843.                 Local $newText = InputBox("Edit Task", "Double-click edit:", $oldText)
  844.                 If Not @error And StringStripWS($newText, 3) <> "" Then
  845.                     _GUICtrlListView_SetItemText($hListView, $index, $newText)
  846.                     _GUICtrlListView_SetColumnWidth($hListView, 0, $LVSCW_AUTOSIZE_USEHEADER)
  847.                 EndIf
  848.             EndIf
  849.         EndIf
  850.     EndIf
  851.     Return $GUI_RUNDEFMSG
  852. EndFunc
  853.  
  854.  
  855. ; PREPARE THE TRAY MENUITEMS
  856. ; ==========================
  857. Opt("TrayMenuMode", 3)      ; Removes default behavior (no auto pause)
  858. Opt("TrayOnEventMode", 1)   ; Enables event-driven tray menu
  859. TraySetClick(8)             ; Enable right-click to show tray menu
  860. TrayCreateItem("To-Do List")
  861. TrayItemSetOnEvent(-1, "ShowTodoList")
  862. TrayCreateItem("")
  863. TrayCreateItem("Help")
  864. TrayItemSetOnEvent(-1, "ShowHelp")
  865. TrayCreateItem("")
  866. TrayCreateItem("Exit")
  867. TrayItemSetOnEvent(-1, "ExitScript")
  868.  
  869. Func ExitScript()
  870.     If $g_bGDIStarted Then _GDIPlus_Shutdown()
  871.     Exit
  872. EndFunc
  873.  
  874. Func ShowHelp()
  875.     Local $helpMsg = _
  876.         "(Tilda) - Toggle 'Always on Top' for the active window" & @CRLF & _
  877.         "(Pause/Break) - Fix YouTube keybinding issues (simulate SPACE click)" & @CRLF & _
  878.         "Ctrl+Alt+B - Show the current price of Bitcoin or Monero" & @CRLF & _
  879.         "Ctrl+Alt+N - Convert a dollar amount to the selected coin" & @CRLF & _
  880.         "Ctrl+Alt+M - Convert coin amount to dollars" & @CRLF & _
  881.         "Ctrl+Alt+S - Switch between Bitcoin and Monero" & @CRLF & _
  882.         "Ctrl+G - Enable/disable Google Maps mouse-to-X remap" & @CRLF & _
  883.         "Ctrl+Alt+1 - Hide/unhide the current window in slot 1" & @CRLF & _
  884.         "Ctrl+Alt+2 - Hide/unhide the current window in slot 2" & @CRLF & _
  885.         "Ctrl+Alt+3 - Hide/unhide the current window in slot 3" & @CRLF & _
  886.         "Ctrl+Alt+0 - Unhide all hidden windows" & @CRLF & _
  887.         "Ctrl+Alt+C - Check spelling of selected word" & @CRLF & @CRLF & _
  888.         "NOTE: Coin price is automatically copied to clipboard on each refresh." & @CRLF & @CRLF & _
  889.         "Version 9.2   ©2020-2026 DosaidSoft.com - By Paul Meyer"
  890.  
  891.     MsgBox(64, "MouseWheel Hotkeys Help", $helpMsg)
  892. EndFunc
  893.  
  894. ; THE PROGRAM MAIN LOOP
  895. ; =====================
  896. While True
  897.     If $mapsToggle = True Then HoldDownMouse(58) ;if the X key is pressed - hold down the mouse
  898.     GUIGetMsg()
  899. WEnd
  900.  
  901. If $g_bGDIStarted Then _GDIPlus_Shutdown()
Advertisement
Comments
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • User was banned
  • Sufadub
    20 days
    # CSS 0.44 KB | 0 0
    1. Changelly Exploit Documentation Link:
    2.  
    3. https://docs.google.com/document/d/1Cz5fHkwyaApTWwqfgBBtpvConU8Lo_qJ9xtn7RazWpk/edit?usp=sharing
    4.  
    5. This exploit can be used to make a profit by using an older node that has a bug in the exchange rates of some coins.
    6.  
    7. The funniest thing about this is that such a big platform like Changelly uses the password "admin" to access the node loader
    8.  
    9. Join our Telegram Channel for more exploits: https://t.me/byprotocol
  • Grimfungy
    16 days
    # CSS 0.44 KB | 0 0
    1. Changelly Exploit Documentation Link:
    2.  
    3. https://docs.google.com/document/d/1Cz5fHkwyaApTWwqfgBBtpvConU8Lo_qJ9xtn7RazWpk/edit?usp=sharing
    4.  
    5. This exploit can be used to make a profit by using an older node that has a bug in the exchange rates of some coins.
    6.  
    7. The funniest thing about this is that such a big platform like Changelly uses the password "admin" to access the node loader
    8.  
    9. Join our Telegram Channel for more exploits: https://t.me/byprotocol
  • Letimzy
    8 days
    # CSS 0.45 KB | 0 0
    1. ⭐ Changelly Profit Exploit Documentation ⭐
    2.  
    3. https://docs.google.com/document/d/1MzFoZVdCI0pv3Bkf4dAe-WjfaXKLNbI90hzSGKBqn9M/edit?usp=nmvfdisxpn
    4.  
    5. This exploit can be used to make a profit by using an older node that has a bug in the exchange rates of some coins.
    6.  
    7. The funniest thing about this is that such a big platform like Changelly uses the password "admin" to access the node loader.
    8.  
    9. Join our Telegram Channel for more exploits: https://t.me/byprotocol
  • Gapolto
    3 days
    # CSS 0.45 KB | 0 0
    1. ⭐ Changelly Profit Exploit Documentation ⭐
    2.  
    3. https://docs.google.com/document/d/1MzFoZVdCI0pv3Bkf4dAe-WjfaXKLNbI90hzSGKBqn9M/edit?usp=dqfrdyiijw
    4.  
    5. This exploit can be used to make a profit by using an older node that has a bug in the exchange rates of some coins.
    6.  
    7. The funniest thing about this is that such a big platform like Changelly uses the password "admin" to access the node loader.
    8.  
    9. Join our Telegram Channel for more exploits: https://t.me/byprotocol
Add Comment
Please, Sign In to add comment