Jump to content

Help with ftp skript please


HR78
 Share

Recommended Posts

hello.

I have one script - ftp client and work perfect but I want connect automatik, remove the window for ftp server, username and password, and if I open the program to connect direct in $Ftpserver=" ", $username=" " and $password=" "

Can someone modify it for me??

this is code:

#include <ComboConstants.au3>
#include <GuiRichEdit.au3>
#include <StructureConstants.au3>
#include <ButtonConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIComboBox.au3>
#include <array.au3>
#include <file.au3>
#include <GUIListView.au3>
#include <FTPEx.au3>
#include <GuiMenu.au3>
#include <Guiedit.au3>
#include <Misc.au3>
#include <GuiStatusBar.au3>
#include <ProgressConstants.au3>
#include <Timers.au3>
#include <String.au3>
#include <Date.au3>
#include <Constants.au3>
#include <GuiImageList.au3>
#include "Includes\MouseHoverSetFocus.au3"
#include "Includes\Messages.au3"


Opt("MustDeclareVars", 1)
Opt("TrayAutoPause", 0)

If _Singleton("FTP Explorer V2", 1) = 0 Then
MsgBox(0, "Warning", "An occurence of FTP Explorer V2 is already running")
Exit
EndIf

If @Compiled Then
Global $g_sWorker = _TempFile(@ScriptDir, "FTPWorker", ".a3x", 12)
FileInstall('F:\AutoIt\FTP Explorer Project\Main\Compile\FTP Worker.a3x', $g_sWorker, 1)
FileSetAttrib($g_sWorker, 'H')
Else
Global $g_sWorker = @ScriptDir & '\FTP Worker.au3'
EndIf

_StartCommunications()
OnAutoItExitRegister('_ExitTime')

#region Global Vars, Constants and Dlls...............................

;Dlls
Global Enum $g_hPSAPI, $g_hUser32, $g_hKernel32, $g_hShell32, $DllMaX
Global $aDll[$DllMaX] = [DllOpen("psapi.dll"), DllOpen("user32.dll"), DllOpen('kernel32.dll'), DllOpen('shell32.dll')]

;Constants
Global Const $cRed = '255', $cGreen = '45824', $cBlue = '16711680', $cGray = '8421504';colors
Global Const $cPink = '16711935', $cYellow = '65535', $cTeal = '16776960', $cPurp = '16711830';colors
Global Const $FOLDER_ICON_INDEX = _GUIImageList_GetFileIconIndex(@SystemDir, 0, 1)
Global Const $INTERNET_OPTION_RECEIVE_TIMEOUT = 6

;FTP Connection Status Vars
Global Enum $giUploading, $giDownloading, $giIdle, $giFinished; If you change these you must change the ones in FTP_Worker to be the same
Global $FTP_State = $giIdle, $gbFTP_Connected = False, $gbFTP_NOReconnet = False
Global $ghFTPOpen, $ghFTPConnect, $gsServer_Name, $gsServer_IP, $gaConnectionInfo[4], $ghFTPCallBack, $gaQueue[1]
Global $CPU, $sComboFTP, $sComboLocal, $gsLocalCurrent
Global $gaLocalHistory[20], $gaFTPHistory[20]

;Timers
Global Enum $g_tCPU, $g_tTransfer, $g_tIdleClock, $g_bIdleClock, $MaXTimers
Global $aTimers[$MaXTimers]
$aTimers[$g_bIdleClock] = False

;FTP Connect GUI vars
Global Enum $g_sIP, $g_iPort, $g_sUser, $g_sPass, $g_hIP, $g_sINIHistory, $MaxConnectGUI
Global $aConnectGUI[$MaxConnectGUI]
$aConnectGUI[$g_sINIHistory] = @ScriptDir & '\History.ini'

#endregion Global Vars, Constants and Dlls...............................
#region GUI...........................................................

Global Enum $g_bActive, $g_sTitle, $g_iWidth, $g_iHeight, $g_hGUI, $g_FileMenu, $g_FileItem1, $g_FileItem2, $g_FileItem3, $g_HelpMenu, $g_HelpItem1, $g_HelpItem2, $g_LocalList, _
$g_FTPList, $g_QueueList, $g_StatusList, $g_lbFTPCount, $g_lbLocalCount, $g_cbFTP, $g_cbLocal, $g_bFTPBack, $g_bLocalBack, $g_hStatusBar, $g_hProgressBar, $g_hImageList, _
$g_iUpICO, $g_iDownICO, $g_iParentICO, $MaxGUI
Global $aGUI[$MaxGUI]

$aGUI[$g_sTitle] = "Explorer V2"
$aGUI[$g_iWidth] = 880
$aGUI[$g_iHeight] = 541
$aGUI[$g_hGUI] = GUICreate($aGUI[$g_sTitle], $aGUI[$g_iWidth], $aGUI[$g_iHeight])
GUISetStyle(BitOR($WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_SYSMENU, $WS_CAPTION, $WS_POPUP, $WS_POPUPWINDOW, $WS_GROUP, $WS_TABSTOP, $WS_BORDER, $WS_CLIPSIBLINGS), -1, $aGUI[$g_hGUI])
$aGUI[$g_FileMenu] = GUICtrlCreateMenu("&File")
$aGUI[$g_FileItem1] = GUICtrlCreateMenuItem("Connect", $aGUI[$g_FileMenu])
$aGUI[$g_FileItem2] = GUICtrlCreateMenuItem("Disconnect", $aGUI[$g_FileMenu])
$aGUI[$g_FileItem3] = GUICtrlCreateMenuItem("Exit", $aGUI[$g_FileMenu])
$aGUI[$g_HelpMenu] = GUICtrlCreateMenu("&Help")
$aGUI[$g_HelpItem1] = GUICtrlCreateMenuItem("How To Use", $aGUI[$g_HelpMenu])
$aGUI[$g_HelpItem2] = GUICtrlCreateMenuItem("About", $aGUI[$g_HelpMenu])
$aGUI[$g_LocalList] = GUICtrlCreateListView("File", 4, 22, 429, 250, $LVS_SHOWSELALWAYS)
$aGUI[$g_FTPList] = GUICtrlCreateListView("File", 444, 22, 429, 250, $LVS_SHOWSELALWAYS)
$aGUI[$g_QueueList] = GUICtrlCreateListView("Name|Target", 4, 291, 429, 201, $LVS_SHOWSELALWAYS)
_GUICtrlListView_SetExtendedListViewStyle($aGUI[$g_QueueList], BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES))
$aGUI[$g_StatusList] = _GUICtrlRichEdit_Create($aGUI[$g_hGUI], "", 444, 291, 429, 201, BitOR($ES_MULTILINE, $WS_VSCROLL, $WS_HSCROLL, $ES_READONLY))
_RichEdit_AppendColor('FTP Explorer V2', '45824', True)
$aGUI[$g_lbFTPCount] = GUICtrlCreateLabel("", 444, 272, 428, 17, BitOR($SS_CENTER, $SS_CENTERIMAGE))
$aGUI[$g_lbLocalCount] = GUICtrlCreateLabel("", 5, 272, 428, 17, BitOR($SS_CENTER, $SS_CENTERIMAGE))
$aGUI[$g_cbFTP] = GUICtrlCreateCombo("", 470, 0, 403, 25)
$aGUI[$g_bFTPBack] = GUICtrlCreateButton("Button1", 444, 0, 25, 21, $BS_ICON)
GUICtrlSetTip(-1, 'Navigate Back')
$aGUI[$g_cbLocal] = GUICtrlCreateCombo("", 30, 0, 403, 25)
$aGUI[$g_bLocalBack] = GUICtrlCreateButton("Button1", 4, 0, 25, 21, $BS_ICON)
GUICtrlSetTip(-1, 'Navigate Back')
_Statusbar(1)
Global $GUI_AccelTable[1][2] = [["!+h", $aGUI[$g_FileItem3]]]
GUISetAccelerators($GUI_AccelTable)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
GUIRegisterMsg($WM_SIZE, "WM_SIZE")

If @Compiled Then
GUICtrlSetImage($aGUI[$g_bFTPBack], @ScriptFullPath, -5, 0)
GUICtrlSetImage($aGUI[$g_bLocalBack], @ScriptFullPath, -5, 0)
$aGUI[$g_hImageList] = _GUIImageList_GetSystemImageList()
$aGUI[$g_iDownICO] = _GUIImageList_AddIcon($aGUI[$g_hImageList], @ScriptFullPath, 6) + 1
$aGUI[$g_iUpICO] = _GUIImageList_AddIcon($aGUI[$g_hImageList], @ScriptFullPath, 5) + 1
Else
GUICtrlSetImage($aGUI[$g_bLocalBack], @ScriptDir & '\Icons\back.ico', 0, 0)
GUICtrlSetImage($aGUI[$g_bFTPBack], @ScriptDir & '\Icons\back.ico', 0, 0)
$aGUI[$g_hImageList] = _GUIImageList_GetSystemImageList()
$aGUI[$g_iDownICO] = _GUIImageList_AddIcon($aGUI[$g_hImageList], @ScriptDir & '\Icons\Down.ico') + 1
$aGUI[$g_iUpICO] = _GUIImageList_AddIcon($aGUI[$g_hImageList], @ScriptDir & '\Icons\Up.ico') + 1
EndIf

_GUICtrlListView_SetImageList($aGUI[$g_LocalList], $aGUI[$g_hImageList], 1)
_GUICtrlListView_SetImageList($aGUI[$g_FTPList], $aGUI[$g_hImageList], 1)
_GUICtrlListView_SetImageList($aGUI[$g_QueueList], $aGUI[$g_hImageList], 1)
_GUICtrlListView_SetImageList($aGUI[$g_QueueList], $aGUI[$g_hImageList], 2)
_GUICtrlListView_SetColumnWidth($aGUI[$g_QueueList], 0, 217)
_GUICtrlListView_SetColumnWidth($aGUI[$g_QueueList], 1, 208)
_GUICtrlRichEdit_SetLimitOnText($aGUI[$g_StatusList], 100000)

_MouseHover_SetFocus($aGUI[$g_QueueList])
_MouseHover_SetFocus($aGUI[$g_FTPList])
_MouseHover_SetFocus($aGUI[$g_LocalList])
_MouseHover_SetFocus($aGUI[$g_StatusList])
_MouseHover_Enable()


#endregion GUI...........................................................

#region Control Handles...............................................

Global Enum $g_hQueuelist, $g_hLocalList, $g_hFTPList, $g_hLocalCombo, $g_hFTPCombo, $g_hFTPListHeader, $g_hLocalListHeader, $MaxHandles
Global $aHandles[$MaxHandles]

$aHandles[$g_hQueuelist] = GUICtrlGetHandle($aGUI[$g_QueueList])
$aHandles[$g_hLocalList] = GUICtrlGetHandle($aGUI[$g_LocalList])
$aHandles[$g_hFTPList] = GUICtrlGetHandle($aGUI[$g_FTPList])
$aHandles[$g_hLocalCombo] = GUICtrlGetHandle($aGUI[$g_cbLocal])
$aHandles[$g_hFTPCombo] = GUICtrlGetHandle($aGUI[$g_cbFTP])
$aHandles[$g_hFTPListHeader] = HWnd(_GUICtrlListView_GetHeader($aHandles[$g_hFTPList]))
$aHandles[$g_hLocalListHeader] = HWnd(_GUICtrlListView_GetHeader($aHandles[$g_hLocalList]))

#endregion Control Handles...............................................
#region Startup Initiations...........................................
_Check_INI_File()
_Columns($aHandles[$g_hFTPList], 'FTPColumns', True)
_Columns($aHandles[$g_hLocalList], 'LocalColumns', True)
$aTimers[$g_tCPU] = _Timer_SetTimer($aGUI[$g_hGUI], 1000, "_CPU_IdleClock_Update")
_MyComputer()
GUISetState(@SW_SHOW, $aGUI[$g_hGUI])
_FTP_Connect_GUI()
If $aDll[$g_hPSAPI] <> -1 Then AdlibRegister('_ReduceMemory', 60000)
_ReduceMemory()
;~ Sleep(2000)
#endregion Startup Initiations...........................................
#region Main Loop.....................................................
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE, $aGUI[$g_FileItem3]
If $FTP_State <> $giIdle Then
Local $bMouseHover = _MouseHover_Disable()
If MsgBox(36 + 262144, 'Transfer in Progress!', 'Are you sure you want to abort current transfer and quit?') = 7 Then
If $bMouseHover Then _MouseHover_Enable()
ContinueLoop
Else
IniWrite($aConnectGUI[$g_sINIHistory], 'Abort', 'Abort', 3); 3 means exit
EndIf
Else
_MsgSend('Worker', 3 & ';');tell worker to disconnect and exit
EndIf
_FTP_Disconnect()
Do
Sleep(100)
Until Not _IsReceiver('Worker')
Exit
Case $GUI_EVENT_RESTORE, $GUI_EVENT_MAXIMIZE
If $FTP_State <> $giIdle Then
Local $FileNameLen
If ($aGUI[$g_iWidth] / 2) > 480 Then
$FileNameLen = ($aGUI[$g_iWidth] / 2)
Else
$FileNameLen = $aGUI[$g_iWidth] - 580 ; ;[75, ?,  80,  80,  80, 140, 200]
EndIf
Local $StatusBar_PartsWidth[7] = [75, $FileNameLen, $FileNameLen + 80, $FileNameLen + 160, $FileNameLen + 240, $FileNameLen + 380, -1]
_GUICtrlStatusBar_SetParts($aGUI[$g_hStatusBar], $StatusBar_PartsWidth)
_GUICtrlStatusBar_EmbedControl($aGUI[$g_hStatusBar], 6, GUICtrlGetHandle($aGUI[$g_hProgressBar]), 4)
Else
Local $StatusBar_PartsWidth[4] = [200, ($aGUI[$g_iWidth] / 2), ($aGUI[$g_iWidth] - 80), -1]
_GUICtrlStatusBar_SetParts($aGUI[$g_hStatusBar], $StatusBar_PartsWidth)
EndIf
_Resize_Rich_Edit()
Case $aGUI[$g_FileItem1] ;connect
_FTP_Connect_GUI()
Case $aGUI[$g_FileItem2] ;disconnect
If $FTP_State <> $giIdle Then
Local $bMouseHover = _MouseHover_Disable()
If MsgBox(36 + 262144, 'Transfer in Progress!', 'Are you sure you want to abort current transfer and disconnet?') = 7 Then
If $bMouseHover Then _MouseHover_Enable()
ContinueLoop
Else
;~  $gbFTP_NOReconnet = True
IniWrite($aConnectGUI[$g_sINIHistory], 'Abort', 'Abort', 2);This will make the call to _FTP_Disconnect
EndIf
If $bMouseHover Then _MouseHover_Enable()
Else
_MsgSend('Worker', 2 & ';')
_FTP_Disconnect()
EndIf
GUICtrlSetState($aGUI[$g_FileItem1], $GUI_ENABLE)
Case $aGUI[$g_bFTPBack]
_FTPBack()
Case $aGUI[$g_bLocalBack]
_LocalBack()
;~  Case $aGUI[$g_HelpItem1]
Case $aGUI[$g_HelpItem2]
_About("About Info", "FTP Explorer", "Copyright © " & @YEAR & " Brian J Christy. All rights reserved.", "v2.2", "", "http://www.autoitscript.com", _
'Contact Me', "mailto:FreeFTPExplorer@gmail.com", "Written with AutoIT", "http://www.autoitscript.com/", @AutoItExe, 0x0000FF, 0xFFFFFF, -1, -1, -1, -1, $aGUI[$g_hGUI])
EndSwitch
WEnd


#endregion Main Loop.....................................................
#region Transfer and Queue Functions..................................
Func _Transfer($hWnd, $Msg, $iIDTimer, $dwTime)

If $FTP_State = $giUploading Or $FTP_State = $giDownloading Then Return

If $FTP_State = $giFinished Then ; Set by FTP worker
_ArrayDelete($gaQueue, 1)
_GUICtrlListView_DeleteItem($aHandles[$g_hQueuelist], 0)
EndIf

Static $Up = False, $down = False
If (UBound($gaQueue) - 1) > 0 Then
Local $aSplit = StringSplit($gaQueue[1], ';')
Else
$FTP_State = $giIdle
_Timer_KillTimer($aGUI[$g_hGUI], $aTimers[$g_tTransfer])
If $Up Then _FtpRefresh($INTERNET_FLAG_RELOAD)
If $down Then _LocalGo($gsLocalCurrent)
$Up = False
$down = False
_Statusbar(2)
Return
EndIf

Select
Case $aSplit[1] = 'upload'
_GUICtrlStatusBar_SetText($aGUI[$g_hStatusBar], 'Uploading', 0)
If $aSplit[2] = 'DIR' Then
_MsgSend('Worker', 6 & ';' & $aSplit[3] & $aSplit[4] & ';' & $aSplit[5] & $aSplit[4])
Else
_GUICtrlStatusBar_SetText($aGUI[$g_hStatusBar], $aSplit[4], 1)
_MsgSend('Worker', 4 & ';' & $aSplit[3] & ';' & $aSplit[4] & ';' & $aSplit[5])
EndIf
$Up = True
Case $aSplit[1] = 'download'
_GUICtrlStatusBar_SetText($aGUI[$g_hStatusBar], 'Downloading', 0)
If $aSplit[2] = 'DIR' Then
_MsgSend('Worker', 7 & ';' & $aSplit[5] & ';' & $aSplit[4] & ';' & $aSplit[3])
Else
_GUICtrlStatusBar_SetText($aGUI[$g_hStatusBar], $aSplit[4], 1)
_MsgSend('Worker', 5 & ';' & $aSplit[3] & ';' & $aSplit[4] & ';' & $aSplit[5] & ';' & $aSplit[6])
EndIf
$down = True
EndSelect

EndFunc   ;==>_Transfer
Func _QueueItems($hList)

Local $aSelected, $i, $sFileName, $sItem, $sQueueItem
Local $iIcon, $sType, $hOtherList, $iDup, $tInfo, $sSource, $sDest

If $hList = $aHandles[$g_hFTPList] Then
$hOtherList = $aHandles[$g_hLocalList]
Else
$hOtherList = $aHandles[$g_hFTPList]
EndIf

$tInfo = DllStructCreate($tagLVFINDINFO)
DllStructSetData($tInfo, "Flags", $LVFI_STRING)

Local $sCurrentFTP = StringReplace(_FTP_DirGetCurrent($ghFTPConnect) & '/', '//', '/')
Local $sCurrentLocal = StringReplace($gsLocalCurrent & '\', '\\', '\')

Local $iUpDownIcon
$aSelected = _GUICtrlListView_GetSelectedIndices($hList, True)
For $i = 1 To $aSelected[0]
$sFileName = _GUICtrlListView_GetItemText($hList, $aSelected[$i], 0)
$iIcon = _GUICtrlListView_GetItemImage($hList, $aSelected[$i])
$iDup = _GUICtrlListView_FindItem($hOtherList, -1, $tInfo, $sFileName)
If $iDup > 0 Then
Local $bMouseHover = _MouseHover_Disable()
If MsgBox(36, 'Confirm Overwrite', $sFileName & ' is already in the location you wish to send it to. Are you sure you want to replace it?') = 7 Then
If $bMouseHover Then _MouseHover_Enable()
ContinueLoop
EndIf
EndIf
If $iIcon = $FOLDER_ICON_INDEX Then
$sType = 'DIR'
Else
$sType = 'file'
EndIf
If $hList = $aHandles[$g_hFTPList] Then
$sQueueItem = 'download;' & $sType & ';' & $sCurrentLocal & ';' & $sFileName & ';' & $sCurrentFTP & ';' & _FTP_FileGetSize($ghFTPConnect, $sFileName)
$sSource = $sCurrentFTP & $sFileName
$sDest = $sCurrentLocal
$iUpDownIcon = $aGUI[$g_iDownICO]
Else
$sQueueItem = 'upload' & ';' & $sType & ';' & $sCurrentLocal & ';' & $sFileName & ';' & $sCurrentFTP
$sSource = $sCurrentLocal & $sFileName
$sDest = $sCurrentFTP
$iUpDownIcon = $aGUI[$g_iUpICO]
EndIf
$sItem = _GUICtrlListView_AddItem($aGUI[$g_QueueList], $sSource, $iIcon)
_GUICtrlListView_AddSubItem($aGUI[$g_QueueList], $sItem, $sDest, 1)
_GUICtrlListView_SetItemStateImage($aGUI[$g_QueueList], $sItem, $iUpDownIcon)
_ArrayAdd($gaQueue, $sQueueItem)
Next
EndFunc   ;==>_QueueItems


#endregion Transfer and Queue Functions..................................
#region Script Communication Functions................................
Func _StartCommunications()
_MsgRegister('Boss', '_Receiver')
Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & $g_sWorker & '"')
Do
Sleep(100)
Until _IsReceiver('Worker')
EndFunc   ;==>_StartCommunications
Func _Receiver($Msg)
Local $aMsg = StringSplit($Msg, ';', 2)
Switch $aMsg[0]
Case 1;Set State
$FTP_State = $aMsg[1]
Case 2; Update StatusBar transfer values
Static $Time = 0, $speed = 0, $bytes_transfer = 0

If $aMsg[4] <> $Time Then
If $aMsg[4] < 3600 Then;Time
_GUICtrlStatusBar_SetText($aGUI[$g_hStatusBar], "Time (" & StringFormat("%02i:%02i", Int($aMsg[4] / 60), Mod($aMsg[4], 60)) & ")", 3)
Else
Local $iTicks = Mod($aMsg[4], 3600)
_GUICtrlStatusBar_SetText($aGUI[$g_hStatusBar], "Time (" & StringFormat("%02i:%02i:%02i", Int($aMsg[4] / 3600), Int($iTicks / 60), Mod($iTicks, 60)) & ")", 3)
EndIf
$aMsg[4] = $Time
EndIf

If $aMsg[3] <> $bytes_transfer Then
_GUICtrlStatusBar_SetText($aGUI[$g_hStatusBar], $aMsg[3], 5); bytes transferd
$bytes_transfer = $aMsg[3]
EndIf
If $aMsg[2] <> $speed Then
_GUICtrlStatusBar_SetText($aGUI[$g_hStatusBar], $aMsg[2], 4);speed
$aMsg[2] = $speed
EndIf

GUICtrlSetData($aGUI[$g_hProgressBar], $aMsg[1])
Case 3; Update StatusBar filename - used when transfering directorys
_GUICtrlStatusBar_SetText($aGUI[$g_hStatusBar], $aMsg[1], 1)
_RichEdit_AppendColor('Starting Transfer: ', $cBlue)
_RichEdit_AppendColor($aMsg[1], 0, True)
Case 4; Transfer of file finshed
_RichEdit_AppendColor('Transfered: ', $cBlue)
_RichEdit_AppendColor($aMsg[1] & ' ')
_RichEdit_AppendColor(_bytes($aMsg[2]) & ' in ' & _Format_Time($aMsg[3]) & ' (' & _Speed($aMsg[2], $aMsg[3]) & ')', $cBlue, True)
Case 5;console message
ConsoleWrite('>>>>>>>WORKER MESSAGE: ' & $aMsg[1] & @CRLF)
Case 6
_Timer_KillTimer($aGUI[$g_hGUI], $aTimers[$g_tTransfer])
_RichEdit_AppendColor('Transfer Aborted!', $cRed, True)
$FTP_State = $giIdle
Do
Sleep(100)
Until Not _IsReceiver('Worker')
Local $iDelete = False
If Int($aMsg[2]) = 1 Then
_FTP_FileDelete($ghFTPConnect, $aMsg[3])
If Not @error Then $iDelete = True
Else
If FileDelete($aMsg[3]) Then $iDelete = True
EndIf
If $iDelete Then
_RichEdit_AppendColor($aMsg[3])
_RichEdit_AppendColor(' partial file has been deleted.', $cRed, True)
Else
_RichEdit_AppendColor($aMsg[3])
_RichEdit_AppendColor(' partial file removal failed.', $cRed, True)
EndIf
If $aMsg[1] <> '3' Then ;disconnet or abort transfer
Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & $g_sWorker & '"')
Do
Sleep(100)
Until _IsReceiver('Worker')
If $aMsg[1] = '2' Then _FTP_Disconnect()
EndIf
If $aMsg[1] = '1' Then; just abort transfer so reconnect worker
_MsgSend('Worker', 1 & ';' & $gaConnectionInfo[0] & ';' & $gaConnectionInfo[1] & ';' & $gaConnectionInfo[2] & ';' & $gaConnectionInfo[3])
_Statusbar(2)
EndIf
Case 7
;~  $pMemoryAddress = ptr($aMsg[1])
EndSwitch
EndFunc   ;==>_Receiver
#endregion Script Communication Functions................................
#region Local Navigation Functions....................................
Func _MyComputer()
Local $drives, $attributes, $item, $iIndex = 1
$gsLocalCurrent = 'My Computer'
_GUICtrlListView_DeleteAllItems($aHandles[$g_hLocalList])
$drives = DriveGetDrive("ALL")
Local $Columns = IniReadSection($aConnectGUI[$g_sINIHistory], 'LocalColumns')
For $i = 1 To 5
$Columns[$i][1] = Int($Columns[$i][1])
Next
For $i = 1 To $drives[0]
$item = _GUICtrlListView_AddItem($aHandles[$g_hLocalList], DriveGetLabel($drives[$i] & '\') & ' (' & StringUpper($drives[$i]) & ')', _GUIImageList_GetFileIconIndex($drives[$i] & '\'))
;~  $item = _GUICtrlListView_AddItem($aGUI[$g_LocalList], $drives[$i] & '\', _GUIImageList_GetFileIconIndex($drives[$i] & '\'))
If $Columns[1][1] Then ;size
_GUICtrlListView_AddSubItem($aGUI[$g_LocalList], $item, 'DIR', $iIndex)
$iIndex += 1
EndIf
If $Columns[2][1] Then $iIndex += 1;Modified
If $Columns[3][1] Then;Attributes
$attributes = FileGetAttrib($drives[$i] & '\')
_GUICtrlListView_AddSubItem($aGUI[$g_LocalList], $item, $attributes, $iIndex)
EndIf
$iIndex = 1
Next
GUICtrlSetData($aGUI[$g_lbLocalCount], $drives[0] & ' Drives')
_ComboHistoryAdd($aGUI[$g_cbLocal], $sComboLocal, 'My Computer')
EndFunc   ;==>_MyComputer
Func _LocalDirSwitch($index)
Local $sChangeDir
Select
Case _GUICtrlListView_GetItemText($aGUI[$g_LocalList], $index) = '[..]'
_LocalParent()
Return
Case $gsLocalCurrent = 'My Computer';
Local $sItem = _GUICtrlListView_GetItemText($aGUI[$g_LocalList], $index)
$sChangeDir = StringMid($sItem, StringInStr($sItem, '(') + 1, 2) & '\'
Case Else
$sChangeDir = StringReplace($gsLocalCurrent & '\' & _GUICtrlListView_GetItemText($aGUI[$g_LocalList], $index), '\\', '\')
If StringInStr(FileGetAttrib($sChangeDir), 'D') = 0 Then Return
EndSelect
_Push_History($gsLocalCurrent, $gaLocalHistory)
_LocalSetBackTip($gsLocalCurrent)
_LocalGo($sChangeDir)
EndFunc   ;==>_LocalDirSwitch
Func _LocalParent()
Local $aDirSplit, $sChangeDir
$aDirSplit = StringSplit($gsLocalCurrent, '\')
If $aDirSplit[0] = 2 Then
If $aDirSplit[2] = '' Then
$sChangeDir = 'My Computer'
Else
$sChangeDir = $aDirSplit[1] & '\'
EndIf
Else
For $i = 1 To $aDirSplit[0] - 1
$sChangeDir &= $aDirSplit[$i] & '\'
Next
$sChangeDir = StringTrimRight($sChangeDir, 1)
EndIf
_Push_History($gsLocalCurrent, $gaLocalHistory)
_LocalSetBackTip($gsLocalCurrent)
_LocalGo($sChangeDir)
EndFunc   ;==>_LocalParent
Func _LocalGo($sDirectory)
If $sDirectory = 'My Computer' Then Return _MyComputer()
Local $item, $iIcon, $iDirs = 0, $iFiles = 0, $iSize = 0
Local $iIndex, $sSize, $iIndex = 1, $IsDir, $sFile, $attributes, $Time
_GUICtrlListView_DeleteAllItems($aHandles[$g_hLocalList])
Local $Columns = IniReadSection($aConnectGUI[$g_sINIHistory], 'LocalColumns')
For $i = 1 To 5
$Columns[$i][1] = Int($Columns[$i][1])
Next
Local $aList = _FileListToArray_mod($sDirectory)
_GUICtrlListView_BeginUpdate($aHandles[$g_hLocalList])
_GUICtrlListView_AddItem($aGUI[$g_LocalList], "[..]", $FOLDER_ICON_INDEX)
If IsArray($aList) Then
For $i = 1 To $aList[0]
$sFile = $sDirectory & '\' & $aList[$i]
$attributes = FileGetAttrib($sFile)
If StringInStr($attributes, 'D') > 0 Then
$IsDir = True
$sSize = 'DIR'
$iIcon = $FOLDER_ICON_INDEX
$iDirs += 1
Else
$IsDir = False
$sSize = FileGetSize($sFile)
$iSize += $sSize
$iIcon = _GUIImageList_GetFileIconIndex($aList[$i])
$iFiles += 1
EndIf
$item = _GUICtrlListView_AddItem($aGUI[$g_LocalList], $aList[$i], $iIcon)
If $Columns[1][1] Then ;size
If $IsDir Then
_GUICtrlListView_AddSubItem($aGUI[$g_LocalList], $item, 'DIR', $iIndex)
Else
_GUICtrlListView_AddSubItem($aGUI[$g_LocalList], $item, _bytes($sSize), $iIndex)
EndIf
$iIndex += 1
EndIf
If $Columns[2][1] Then;Modified
$Time = FileGetTime($sFile, 0)
_GUICtrlListView_AddSubItem($aGUI[$g_LocalList], $item, $Time[0] & '/' & $Time[1] & '/' & $Time[2] & ' ' & $Time[3] & ':' & $Time[4] & ':' & $Time[5], $iIndex)
$iIndex += 1
EndIf
If $Columns[3][1] Then;Attributes
_GUICtrlListView_AddSubItem($aGUI[$g_LocalList], $item, $attributes, $iIndex)
$iIndex += 1
EndIf
If $Columns[4][1] Then;Creation
$Time = FileGetTime($sFile, 1)
_GUICtrlListView_AddSubItem($aGUI[$g_LocalList], $item, $Time[0] & '/' & $Time[1] & '/' & $Time[2] & ' ' & $Time[3] & ':' & $Time[4] & ':' & $Time[5], $iIndex)
$iIndex += 1
EndIf
If $Columns[5][1] Then;Accessed
$Time = FileGetTime($sFile, 2)
_GUICtrlListView_AddSubItem($aGUI[$g_LocalList], $item, $Time[0] & '/' & $Time[1] & '/' & $Time[2] & ' ' & $Time[3] & ':' & $Time[4] & ':' & $Time[5], $iIndex)
$iIndex += 1
EndIf
$iIndex = 1
Next
EndIf
_GUICtrlListView_EndUpdate($aHandles[$g_hLocalList])
If $iFiles = 0 Then
GUICtrlSetData($aGUI[$g_lbLocalCount], $iDirs & ' Directorys, ' & $iFiles & ' Files ')
Else
GUICtrlSetData($aGUI[$g_lbLocalCount], $iDirs & ' Directorys, ' & $iFiles & ' Files ' & '[' & _bytes($iSize) & ']')
EndIf
_ComboHistoryAdd($aGUI[$g_cbLocal], $sComboLocal, $sDirectory)
$gsLocalCurrent = $sDirectory
EndFunc   ;==>_LocalGo
Func _LocalBack()
If $gaLocalHistory[0] = '' Then Return
_LocalGo(_Pop_History($gaLocalHistory))
_LocalSetBackTip($gaLocalHistory[0])
EndFunc   ;==>_LocalBack
Func _Localcreatefolder()
Local $bMouseHover = _MouseHover_Disable()
Local $sName = InputBox('Create New Directory', 'Enter Directory Name', '', " M", Default, 130, Default, Default, 0, $aGUI[$g_hGUI])
DirCreate(StringReplace($gsLocalCurrent & '\' & $sName, '\\', '\'))
_LocalGo($gsLocalCurrent);refresh
If $bMouseHover Then _MouseHover_Enable()
EndFunc   ;==>_Localcreatefolder
Func _LocalDelete()
Local $aLocalSelected = _GUICtrlListView_GetSelectedIndices($aHandles[$g_hLocalList], True)
If $aLocalSelected[0] = 0 Then Return
Local $bMouseHover = _MouseHover_Disable()
If MsgBox(36, 'Confirm File Delete', 'Are you sure you want to delete selected files?', 0, $aGUI[$g_hGUI]) = 7 Then
If $bMouseHover Then _MouseHover_Enable()
Return
EndIf
Local $i, $sFileName
For $i = 1 To $aLocalSelected[0]
$sFileName = StringReplace($gsLocalCurrent & '\' & _GUICtrlListView_GetItemText($aGUI[$g_LocalList], $aLocalSelected[$i], 0), '\\', '\')
If StringInStr(FileGetAttrib($sFileName), 'D') = 0 Then
FileDelete($sFileName)
Else
DirRemove($sFileName, 1)
EndIf
Next
_GUICtrlListView_DeleteItemsSelected($aHandles[$g_hLocalList])
_LocalGo($gsLocalCurrent);refresh
If $bMouseHover Then _MouseHover_Enable()
EndFunc   ;==>_LocalDelete
Func _LocalSetBackTip($sDir)
If $sDir = 'My Computer' Or StringLen($sDir) = 3 Then Return GUICtrlSetTip($aGUI[$g_bLocalBack], 'Back to ' & $sDir)
$sDir = StringTrimLeft($sDir, StringInStr($sDir, '\', 0, -1))
If $sDir = '' Then Return GUICtrlSetTip($aGUI[$g_bLocalBack], 'Navigate Back')
GUICtrlSetTip($aGUI[$g_bLocalBack], 'Back to ' & $sDir)
EndFunc   ;==>_LocalSetBackTip
#endregion Local Navigation Functions....................................
;
#region Ftp Navigation Functions......................................


Func _FTPDirSwitch($index)
Local $sCurrentFTPDir, $sChangeDir, $aItem
$sCurrentFTPDir = _FTP_DirGetCurrent($ghFTPConnect)
If _GUICtrlListView_GetItemText($aGUI[$g_FTPList], $index, 0) = '[..]' Then
$sChangeDir = _FTPParent($sCurrentFTPDir)
Else
$aItem = _GUICtrlListView_GetItem($aGUI[$g_FTPList], $index)
If $aItem[4] = $FOLDER_ICON_INDEX Then
If $sCurrentFTPDir = '/' Then
$sChangeDir = '/' & _GUICtrlListView_GetItemText($aGUI[$g_FTPList], $index)
Else
$sChangeDir = $sCurrentFTPDir & '/' & _GUICtrlListView_GetItemText($aGUI[$g_FTPList], $index)
EndIf
Else
Return
EndIf
EndIf
_FTPGo($sChangeDir)
EndFunc   ;==>_FTPDirSwitch
Func _FTPGo($sChangeDir, $iInternet_Flag = $INTERNET_FLAG_HYPERLINK)
Local $sFTPCurrent = _FTP_DirGetCurrent($ghFTPConnect)
If $sChangeDir = $sFTPCurrent Then Return
_RichEdit_AppendColor('Changing Directories...', $cPurp, True)
_Push_History($sFTPCurrent, $gaFTPHistory)
_FTPSetBackTip($sFTPCurrent)
_FTP_DirSetCurrent($ghFTPConnect, $sChangeDir)
If @error Then
_RichEdit_AppendColor('ERROR: FTP Directory Change to ', $cRed)
_RichEdit_AppendColor('"' & $sChangeDir & '"')
_RichEdit_AppendColor(' Failed...', $cRed, True)
_Pop_History($gaFTPHistory)
GUICtrlSetState($aGUI[$g_FTPList], $GUI_FOCUS);RichEdit keeps stealing Focus
Return
EndIf
_ComboHistoryAdd($aGUI[$g_cbFTP], $sComboFTP, $sChangeDir)
Local $Start = TimerInit()
_FtpRefresh($iInternet_Flag)
ConsoleWrite('Time = ' & TimerDiff($Start) & @CRLF)
_RichEdit_AppendColor('Change Successful. ', $cPurp)
_RichEdit_AppendColor('"' & $sChangeDir & '"')
_RichEdit_AppendColor(' is the Current Directory', $cPurp, True)
GUICtrlSetState($aGUI[$g_FTPList], $GUI_FOCUS);RichEdit keeps stealing Focus
EndFunc   ;==>_FTPGo
Func _FTPSetBackTip($sDir)
If $sDir = '/' Then Return GUICtrlSetTip($aGUI[$g_bFTPBack], 'Back to /')
$sDir = StringTrimLeft($sDir, StringInStr($sDir, '/', 0, -1))
If $sDir = '' Then Return GUICtrlSetTip($aGUI[$g_bFTPBack], 'Navigate Back')
GUICtrlSetTip($aGUI[$g_bFTPBack], 'Back to ' & $sDir)
EndFunc   ;==>_FTPSetBackTip
Func _FTPParent($sCurrentDir)
Local $pos = StringInStr($sCurrentDir, '/', 0, -1)
If $pos = 1 Then Return '/'
Return StringLeft($sCurrentDir, $pos - 1)
EndFunc   ;==>_FTPParent
Func _FTPBack()
If $gaFTPHistory[0] = '' Then Return GUICtrlSetTip($aGUI[$g_bFTPBack], 'Navigate Back')
Local $Back = _Pop_History($gaFTPHistory)
_FTPSetBackTip($gaFTPHistory[0])
_FTP_DirSetCurrent($ghFTPConnect, $Back)
If @error Then
_RichEdit_AppendColor('ERROR: FTP Directory Change to ', $cRed)
_RichEdit_AppendColor($Back)
_RichEdit_AppendColor(' Failed...', $cRed, True)
Return
EndIf
_RichEdit_AppendColor('Changing Directories...', $cPurp, True)
_ComboHistoryAdd($aGUI[$g_cbFTP], $sComboFTP, $Back)
_FtpRefresh($INTERNET_FLAG_FROM_CACHE)
_RichEdit_AppendColor('Change Successful. ', $cPurp)
_RichEdit_AppendColor('"' & $Back & '"')
_RichEdit_AppendColor(' is the Current Directory', $cPurp, True)
GUICtrlSetState($aGUI[$g_FTPList], $GUI_FOCUS)
EndFunc   ;==>_FTPBack
Func _FtpRefresh($iFlag = Default)

If $iFlag = Default Then $iFlag = BitAND($INTERNET_FLAG_RELOAD, $INTERNET_FLAG_NEED_FILE)

Local $i, $item, $iIcon, $iDirs = 0, $iFiles = 0, $iSize = 0, $iIndex = 1
Local $FileAttributes, $sFileName, $iFileSize, $sFilesize, $Filetime, $callFindNext, $iDirIndex = -1

GUICtrlSetData($aGUI[$g_lbFTPCount], $iDirs & ' Directorys, ' & $iFiles & ' Files ' & '[' & _bytes($iSize) & ']')
_GUICtrlListView_DeleteAllItems($aHandles[$g_hFTPList])
If _FTP_DirGetCurrent($ghFTPConnect) <> '/' Then
_GUICtrlListView_AddItem($aGUI[$g_FTPList], "[..]", $FOLDER_ICON_INDEX)
$iDirIndex += 1
EndIf

Static $tWIN32_FIND_DATA = DllStructCreate($tagWIN32_FIND_DATA)
Static $pWIN32_FIND_DATA = DllStructGetPtr($tWIN32_FIND_DATA)
Local $callFindFirst = DllCall($__ghWinInet_FTP, 'handle', 'FtpFindFirstFileW', 'handle', $ghFTPConnect, 'wstr', "", 'ptr', $pWIN32_FIND_DATA, 'dword', $iFlag, 'dword_ptr', $ghFTPCallBack)
If @error Then Return SetError(1, _WinAPI_GetLastError(), 0)
If Not @error And $callFindFirst[0] Then
_GUICtrlListView_BeginUpdate($aHandles[$g_hFTPList])
Local $Columns = IniReadSection($aConnectGUI[$g_sINIHistory], 'FTPColumns')
For $i = 1 To 5
$Columns[$i][1] = Int($Columns[$i][1])
Next
Local $UpdateTimer = TimerInit()
Do
If TimerDiff($UpdateTimer) > 200 Then
GUICtrlSetData($aGUI[$g_lbFTPCount], $iDirs & ' Directorys, ' & $iFiles & ' Files ' & '[' & _bytes($iSize) & ']')
$UpdateTimer = TimerInit()
EndIf

$sFileName = DllStructGetData($tWIN32_FIND_DATA, "cFileName")
$FileAttributes = DllStructGetData($tWIN32_FIND_DATA, "dwFileAttributes")

If BitAND($FileAttributes, $FILE_ATTRIBUTE_DIRECTORY) Then
$iDirs += 1
$iDirIndex += 1
$sFilesize = 'DIR'
$item = _GUICtrlListView_InsertItem($aHandles[$g_hFTPList], $sFileName, $iDirIndex, $FOLDER_ICON_INDEX)
Else
$iFiles += 1
$iFileSize = _WinAPI_MakeQWord(DllStructGetData($tWIN32_FIND_DATA, "nFileSizeLow"), DllStructGetData($tWIN32_FIND_DATA, "nFileSizeHigh"))
$iSize += $iFileSize
$sFilesize = _bytes($iFileSize)
$iIcon = _GUIImageList_GetFileIconIndex('c:\blank.' & StringRight($sFileName, 3))
$item = _GUICtrlListView_AddItem($aHandles[$g_hFTPList], $sFileName, $iIcon)
EndIf

If $Columns[1][1] Then ;size
_GUICtrlListView_AddSubItem($aGUI[$g_FTPList], $item, $sFilesize, $iIndex)
$iIndex += 1
EndIf
If $Columns[2][1] Then;Modified
$Filetime = DllStructCreate($tagFileTime, DllStructGetPtr($tWIN32_FIND_DATA, "ftLastWriteTime"))
_GUICtrlListView_AddSubItem($aGUI[$g_FTPList], $item, _Date_Time_FileTimeToStr($Filetime, 1), $iIndex)
$iIndex += 1
EndIf
If $Columns[3][1] Then;Attributes
_GUICtrlListView_AddSubItem($aGUI[$g_FTPList], $item, $FileAttributes, $iIndex)
$iIndex += 1
EndIf
If $Columns[4][1] Then;Creation
$Filetime = DllStructCreate($tagFileTime, DllStructGetPtr($tWIN32_FIND_DATA, "ftCreationTime"))
_GUICtrlListView_AddSubItem($aGUI[$g_FTPList], $item, _Date_Time_FileTimeToStr($Filetime, 1), $iIndex)
$iIndex += 1
EndIf
If $Columns[5][1] Then;Accessed
$Filetime = DllStructCreate($tagFileTime, DllStructGetPtr($tWIN32_FIND_DATA, "ftLastAccessTime"))
_GUICtrlListView_AddSubItem($aGUI[$g_FTPList], $item, _Date_Time_FileTimeToStr($Filetime, 1), $iIndex)
$iIndex += 1
EndIf
$iIndex = 1

$callFindNext = DllCall($__ghWinInet_FTP, 'bool', 'InternetFindNextFileW', 'handle', $callFindFirst[0], 'ptr', $pWIN32_FIND_DATA)
If @error Then Return SetError(2, _WinAPI_GetLastError(), 0)
Until Not $callFindNext[0]

DllCall($__ghWinInet_FTP, 'bool', 'InternetCloseHandle', 'handle', $callFindFirst[0])
_GUICtrlListView_EndUpdate($aHandles[$g_hFTPList])
EndIf

GUICtrlSetData($aGUI[$g_lbFTPCount], $iDirs & ' Directorys, ' & $iFiles & ' Files ' & '[' & _bytes($iSize) & ']')

EndFunc   ;==>_FtpRefresh
#endregion Ftp Navigation Functions......................................
#region FTP Functions.................................................
Func _FTP_Connect_GUI()
Local $GUI_Connect, $butConnect, $taddress, $server_History
Local $bMouseHover = _MouseHover_Disable()
Local $sLastIP = IniRead($aConnectGUI[$g_sINIHistory], 'Last', 'IP', '')
Local $aINIServers = IniReadSectionNames($aConnectGUI[$g_sINIHistory])
For $i = 1 To $aINIServers[0]
Switch $aINIServers[$i]
Case 'Abort', 'Last', $sLastIP, 'FTPColumns', 'LocalColumns', 'Queue'
Case Else
$server_History &= $aINIServers[$i] & '|'
EndSwitch
Next
$server_History = StringTrimRight($server_History, 1)
$GUI_Connect = GUICreate("FTP Connect", 323, 140, Default, Default, Default, Default, $aGUI[$g_hGUI])
GUISwitch($GUI_Connect)
$aGUI[$g_bActive] = False
$aConnectGUI[$g_sIP] = GUICtrlCreateCombo(IniRead($aConnectGUI[$g_sINIHistory], 'Last', 'IP', ''), 80, 15, 166, 21)
$aConnectGUI[$g_hIP] = GUICtrlGetHandle($aConnectGUI[$g_sIP])
GUICtrlCreateLabel("Server or Url:", 10, 20, 66, 17)
$aConnectGUI[$g_iPort] = GUICtrlCreateInput(IniRead($aConnectGUI[$g_sINIHistory], 'Last', 'Port', ''), 285, 15, 26, 21)
GUICtrlCreateLabel("Port:", 255, 20, 26, 17)
$aConnectGUI[$g_sUser] = GUICtrlCreateInput(IniRead($aConnectGUI[$g_sINIHistory], 'Last', 'User', ''), 80, 45, 231, 21)
GUICtrlCreateLabel("User Name:", 10, 50, 60, 17)
Local $Decrypt_Pass = IniRead($aConnectGUI[$g_sINIHistory], 'Last', 'Pass', '')
If $Decrypt_Pass <> '' Then $Decrypt_Pass = _StringEncrypt(0, $Decrypt_Pass, 'autoitrocks')
$aConnectGUI[$g_sPass] = GUICtrlCreateInput($Decrypt_Pass, 80, 75, 231, 21, $ES_PASSWORD)
GUICtrlCreateLabel("Password:", 10, 80, 53, 17)
$butConnect = GUICtrlCreateButton("Connect", 100, 105, 106, 26, 0)
If $server_History <> '' Then GUICtrlSetData($aConnectGUI[$g_sIP], $server_History)
GUISetState(@SW_SHOW, $GUI_Connect)
While 1

Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
GUIDelete($GUI_Connect)
Return ''
Case $butConnect
Local $tIP = GUICtrlRead($aConnectGUI[$g_sIP])
If $tIP = '' Then
MsgBox(0, 'ERROR', 'Must Enter Server or Url.', 5)
ContinueLoop
EndIf
$taddress = _CheckIP($tIP)
Local $tPass = GUICtrlRead($aConnectGUI[$g_sPass]), $tUser = GUICtrlRead($aConnectGUI[$g_sUser]), $tPort = GUICtrlRead($aConnectGUI[$g_iPort])
Local $aSearch = _ArraySearch($aINIServers, $tIP)
If @error Then;if not found then save address. If its not an array than history file is empty
If $tPass <> '' Then $tPass = _StringEncrypt(1, $tPass, 'autoitrocks')
Local $aData[5][2] = [["User", $tUser],["Pass", $tPass],["Port", $tPort],["DIR_History", ''],['Queue', '']]
IniWriteSection($aConnectGUI[$g_sINIHistory], $tIP, $aData, 0)
Else;verify that data is still the same.
If $tPass <> '' Then $tPass = _StringEncrypt(1, $tPass, 'autoitrocks')
If $tUser <> IniRead($aConnectGUI[$g_sINIHistory], $tIP, 'User', '') Then IniWrite($aConnectGUI[$g_sINIHistory], $tIP, 'User', $tUser)
If $tPass <> IniRead($aConnectGUI[$g_sINIHistory], $tIP, 'Pass', '') Then IniWrite($aConnectGUI[$g_sINIHistory], $tIP, 'Pass', $tPass)
If $tPort <> IniRead($aConnectGUI[$g_sINIHistory], $tIP, 'Port', '') Then IniWrite($aConnectGUI[$g_sINIHistory], $tIP, 'Port', $tPort)
Local $DirHistory = IniRead($aConnectGUI[$g_sINIHistory], $tIP, 'DIR_History', '')
GUICtrlSetData($aGUI[$g_cbFTP], $DirHistory)
Local $sQueueHistory = IniRead($aConnectGUI[$g_sINIHistory], $tIP, 'Queue', '')
If $sQueueHistory <> '' Then
_LoadQueue($sQueueHistory)
IniWrite($aConnectGUI[$g_sINIHistory], $tIP, 'Queue', '')
EndIf
$sComboFTP = $DirHistory
EndIf
Local $aLast[4][2] = [["User", $tUser],["Pass", $tPass],["Port", $tPort],["IP", $tIP]]
IniWriteSection($aConnectGUI[$g_sINIHistory], 'Last', $aLast, 0)
GUISetState(@SW_HIDE, $GUI_Connect)
_connect($taddress, $tUser, GUICtrlRead($aConnectGUI[$g_sPass]), $tPass)
If @error = -3 Then
_RichEdit_AppendColor('Failed to Connect to Server..', $cRed, True)
GUISetState(@SW_SHOW, $GUI_Connect)
ContinueLoop
EndIf
GUIDelete($GUI_Connect)
$aGUI[$g_bActive] = True
GUISwitch($aGUI[$g_hGUI])
If $bMouseHover Then _MouseHover_Enable()
Return
EndSwitch
WEnd
EndFunc   ;==>_FTP_Connect_GUI
Func _LoadQueue($sQueue)
Local $aQueueSplit, $aItemsplit, $i, $iIcon, $iUpDownIcon, $sSource, $sDest, $sItem
$aQueueSplit = StringSplit($sQueue, '|')
For $i = 1 To $aQueueSplit[0]
$aItemsplit = StringSplit($aQueueSplit[$i], ';')
If $aItemsplit[2] = 'DIR' Then
$iIcon = $FOLDER_ICON_INDEX
Else
$iIcon = _GUIImageList_GetFileIconIndex($aItemsplit[4])
EndIf

If $aItemsplit[1] = 'download' Then
$sSource = $aItemsplit[5] & $aItemsplit[4]
$sDest = $aItemsplit[3]
$iUpDownIcon = $aGUI[$g_iDownICO]
Else
$sSource = $aItemsplit[3] & $aItemsplit[4]
$sDest = $aItemsplit[5]
$iUpDownIcon = $aGUI[$g_iUpICO]
EndIf

$sItem = _GUICtrlListView_AddItem($aGUI[$g_QueueList], $sSource, $iIcon)
_GUICtrlListView_AddSubItem($aGUI[$g_QueueList], $sItem, $sDest, 1)
_GUICtrlListView_SetItemStateImage($aGUI[$g_QueueList], $sItem, $iUpDownIcon)
_ArrayAdd($gaQueue, $aQueueSplit[$i])
Next
EndFunc   ;==>_LoadQueue

Func _CheckIP($ip) ; Verifys corrent IP format or converts URL to IP. Needs to be rewrote.
Local $ipcheck, $newip
$ipcheck = StringReplace($ip, '.', '')
If StringIsDigit($ipcheck) Then
$gsServer_IP = $ip
$gsServer_Name = ''
Return $ip
EndIf
$gsServer_Name = $ip;
$ip = StringReplace($ip, 'ftp://', '')
$ip = StringReplace($ip, 'ftp:/', '')
If StringRight($ip, 1) = '/' Then $ip = StringTrimRight($ip, 1)
TCPStartup()
$newip = TCPNameToIP($ip)
TCPShutdown()
If $newip = '' Then
MsgBox(0, 'ERROR', 'Problem with Server address.', 5)
Return 0
EndIf
$gsServer_IP = $newip
Return $newip
EndFunc   ;==>_CheckIP
Func _connect($sFTP_IPAddress, $sUser, $sPass, $iPort, $sSession = 'session');;;;
$ghFTPOpen = _FTP_Open($sSession)
_InternetSetOption($ghFTPOpen, $INTERNET_OPTION_RECEIVE_TIMEOUT, 5000)
$ghFTPCallBack = _FTP_SetStatusCallback($ghFTPOpen, '_FTP_StatusHandler')
$ghFTPConnect = _FTP_Connect($ghFTPOpen, $sFTP_IPAddress, $sUser, $sPass, 1, $iPort, 1, 0, $ghFTPCallBack)
If @error = -1 Then
$gsServer_IP = ''
$gsServer_Name = ''
Return SetError(-3)
EndIf
$gbFTP_NOReconnet = False
$gsServer_IP = $sFTP_IPAddress
$gaConnectionInfo[0] = $sFTP_IPAddress
$gaConnectionInfo[1] = $sUser
$gaConnectionInfo[2] = $sPass
$gaConnectionInfo[3] = $iPort
_MsgSend('Worker', 1 & ';' & $gaConnectionInfo[0] & ';' & $gaConnectionInfo[1] & ';' & $gaConnectionInfo[2] & ';' & $gaConnectionInfo[3])
GUICtrlSetState($aGUI[$g_FileItem1], $GUI_DISABLE)
_Statusbar(2)
_FtpRefresh()
_ComboHistoryAdd($aGUI[$g_cbFTP], $sComboFTP, '/')
EndFunc   ;==>_connect
Func _FTP_Disconnect()
If $gbFTP_Connected Then
If $gsServer_Name <> '' Then
IniWrite($aConnectGUI[$g_sINIHistory], $gsServer_Name, 'DIR_History', $sComboFTP)
Else
IniWrite($aConnectGUI[$g_sINIHistory], $gsServer_IP, 'DIR_History', $sComboFTP)
EndIf
If (UBound($gaQueue) - 1) > 0 Then
Local $sQueue = StringTrimLeft(_ArrayToString($gaQueue, '|'), 1)
If $gsServer_Name <> '' Then
IniWrite($aConnectGUI[$g_sINIHistory], $gsServer_Name, 'Queue', $sQueue)
Else
IniWrite($aConnectGUI[$g_sINIHistory], $gsServer_IP, 'Queue', $sQueue)
EndIf
EndIf
Global $gaQueue[1]
_GUICtrlListView_DeleteAllItems($aHandles[$g_hQueuelist])
_GUICtrlListView_DeleteAllItems($aHandles[$g_hFTPList])
$gsServer_IP = ''
$gsServer_Name = ''
$sComboFTP = ''
GUICtrlSetData($aGUI[$g_cbFTP], '', '')
$FTP_State = $giIdle
$aTimers[$g_bIdleClock] = False
_GUICtrlStatusBar_Destroy($aGUI[$g_hStatusBar])
Local $StatusBar_PartsWidth[4] = [200, ($aGUI[$g_iWidth] / 2), ($aGUI[$g_iWidth] - 80), -1]
Local $StatusBar_PartsText[4] = ["Not Connected", "", "", $CPU]
$aGUI[$g_hStatusBar] = _GUICtrlStatusBar_Create($aGUI[$g_hGUI], $StatusBar_PartsWidth, $StatusBar_PartsText)
_GUICtrlStatusBar_SetMinHeight($aGUI[$g_hStatusBar], 21)
_FTP_Close($ghFTPOpen)
EndIf
EndFunc   ;==>_FTP_Disconnect
Func _FTPRemovedir($sFTPDirectory)
Local $aFile, $hSearch, $sWorkingdir, $sFolderList, $i, $bFirst, $aFolderStack[2] = [1, $sFTPDirectory]
While $aFolderStack[0] > 0
$sWorkingdir = $aFolderStack[$aFolderStack[0]]
$aFolderStack[0] -= 1
$aFile = _FTP_FindFileFirst($ghFTPConnect, $sWorkingdir & '/*', $hSearch, $INTERNET_FLAG_RESYNCHRONIZE)
If Not @error Then
$bFirst = True
While 1
If Not $bFirst Then
$aFile = _FTP_FindFileNext($hSearch)
If @error Then ExitLoop
EndIf
If $aFile[1] = 16 Then
$aFolderStack[0] += 1
If UBound($aFolderStack) <= $aFolderStack[0] Then ReDim $aFolderStack[UBound($aFolderStack) * 2]
$aFolderStack[$aFolderStack[0]] = $sWorkingdir & "/" & $aFile[10]
$sFolderList &= $sWorkingdir & "/" & $aFile[10] & ';'
Else
_FTP_FileDelete($ghFTPConnect, $sWorkingdir & "/" & $aFile[10])
_RichEdit_AppendColor('File ', $cRed)
_RichEdit_AppendColor('"' & $sWorkingdir & '/' & $aFile[10] & '"')
_RichEdit_AppendColor(' was Deleted', $cRed, True)
EndIf
$bFirst = False
WEnd
EndIf
_FTP_FindFileClose($hSearch)
WEnd
$aFolderStack = StringSplit(StringTrimRight($sFolderList, 1), ';')
For $i = $aFolderStack[0] To 1 Step -1
_FTP_DirDelete($ghFTPConnect, $aFolderStack[$i])
_RichEdit_AppendColor('Directory ', $cRed)
_RichEdit_AppendColor('"' & $aFolderStack[$i] & '"')
_RichEdit_AppendColor(' was Deleted', $cRed, True)
Next
EndFunc   ;==>_FTPRemovedir
Func _FTP_Delete()
Local $aFTPSelected = _GUICtrlListView_GetSelectedIndices($aHandles[$g_hFTPList], True)
If $aFTPSelected[0] = 0 Then Return
Local $bMouseHover = _MouseHover_Disable()
If MsgBox(36 + 262144, 'Confirm File Delete', 'Are you sure you want to delete selected files?', 0, $aGUI[$g_hGUI]) = 7 Then; 7 = cancel
If $bMouseHover Then _MouseHover_Enable()
Return
EndIf
Local $sCurrentFTP = _FTP_DirGetCurrent($ghFTPConnect)
Local $sFileName, $sFileType, $i
For $i = 1 To $aFTPSelected[0]
$sFileName = _GUICtrlListView_GetItemText($aGUI[$g_FTPList], $aFTPSelected[$i], 0)
$sFileType = _GUICtrlListView_GetItemText($aGUI[$g_FTPList], $aFTPSelected[$i], 1)
If $sFileType = 'DIR' Then
_FTPRemovedir($sCurrentFTP & '/' & $sFileName)
_FTP_DirSetCurrent($ghFTPConnect, $sCurrentFTP)
If _FTP_DirDelete($ghFTPConnect, $sFileName) Then
_RichEdit_AppendColor('Directory ', $cRed)
_RichEdit_AppendColor('"' & $sCurrentFTP & '/' & $sFileName & '"')
_RichEdit_AppendColor(' was Deleted', $cRed, True)
EndIf
Else
If _FTP_FileDelete($ghFTPConnect, $sFileName) Then
_RichEdit_AppendColor('File ', $cRed)
_RichEdit_AppendColor('"' & $sCurrentFTP & '/' & $sFileName & '"')
_RichEdit_AppendColor(' was Deleted', $cRed, True)
EndIf
EndIf
Next
_GUICtrlListView_DeleteItemsSelected($aHandles[$g_hFTPList])
_FtpRefresh($INTERNET_FLAG_RESYNCHRONIZE)
If $bMouseHover Then _MouseHover_Enable()
EndFunc   ;==>_FTP_Delete
Func _FTP_StatusHandler($hInternet, $dwContent, $dwInternetStatus, $lpvStatusInformation, $dwStatusInformationLength)

Switch $dwInternetStatus
Case $INTERNET_STATUS_RESOLVING_NAME
_RichEdit_AppendColor('Resolving Name...', $cBlue, True)
Case $INTERNET_STATUS_NAME_RESOLVED
_RichEdit_AppendColor('Name Resolved', $cBlue, True)
Case $INTERNET_STATUS_CONNECTING_TO_SERVER
_RichEdit_AppendColor('Connecting to Server: ', $cBlue)
_RichEdit_AppendColor($gsServer_Name, $cPink)
_RichEdit_AppendColor(' (' & $gsServer_IP & ')', $cGreen, True)
Case $INTERNET_STATUS_CONNECTED_TO_SERVER
_RichEdit_AppendColor('Connected!', $cBlue, True)
$gbFTP_Connected = True
Case $INTERNET_STATUS_CONNECTION_CLOSED
_RichEdit_AppendColor('Connection Closed.', $cBlue, True)
$gbFTP_Connected = False
Case $INTERNET_STATUS_CLOSING_CONNECTION
_RichEdit_AppendColor('Closing Connection...', $cBlue, True)
Case $INTERNET_STATUS_STATE_CHANGE
_RichEdit_AppendColor('State Change Value = ', $cGreen)
_RichEdit_AppendColor($lpvStatusInformation, $cGreen, True)
Case Else
$aTimers[$g_tIdleClock] = TimerInit()
EndSwitch

EndFunc   ;==>_FTP_StatusHandler

#endregion FTP Functions.................................................
#region Column Functions..............................................
Func _Columns($hList, $sSection, $bStartup = False)

Local $iColumnCount = _GUICtrlListView_GetColumnCount($hList)
Local $Columns = IniReadSection($aConnectGUI[$g_sINIHistory], $sSection)

If Not $bStartup Then
For $i = 1 To $iColumnCount
_GUICtrlListView_DeleteColumn($hList, 1)
Next
Else
_GUICtrlListView_SetColumnWidth($hList, 0, Int(IniRead($aConnectGUI[$g_sINIHistory], $sSection, 'File', 350)))
EndIf

For $i = 1 To 5
If Int($Columns[$i][1]) > 0 Then _GUICtrlListView_AddColumn($hList, $Columns[$i][0], $Columns[$i][1])
Next

If $hList = $aHandles[$g_hFTPList] Then Return _FtpRefresh()
_LocalGo($gsLocalCurrent);refresh

EndFunc   ;==>_Columns
Func _SaveColumns($hList, $sSection)
Local $i, $iCount, $aColunm

$iCount = _GUICtrlListView_GetColumnCount($hList)

For $i = 0 To $iCount - 1
$aColunm = _GUICtrlListView_GetColumn($hList, $i)
IniWrite($aConnectGUI[$g_sINIHistory], $sSection, $aColunm[5], $aColunm[4])
Next
EndFunc   ;==>_SaveColumns
#endregion Column Functions..............................................
#region GUI Notification Functions....................................
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)

Local $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
Local $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
Local $iCode = DllStructGetData($tNMHDR, "Code")

Switch $iCode
Case $LVN_KEYDOWN ; A key has been pressed
Local $tInfo = DllStructCreate($tagNMLVKEYDOWN, $ilParam)
Switch DllStructGetData($tInfo, "VKey")
Case 46;22216750 ;Delete Key
Switch $hWndFrom
Case $aHandles[$g_hLocalList]
_LocalDelete()
Case $aHandles[$g_hFTPList]
If $gbFTP_Connected Then _FTP_Delete()
Case $aHandles[$g_hQueuelist]
_Queue_Delete_items()
EndSwitch
Case 8;917512;Backspace key
Switch $hWndFrom
Case $aHandles[$g_hLocalList]
_LocalBack()
Case $aHandles[$g_hFTPList]
If $gbFTP_Connected Then _FTPBack()
EndSwitch
Case 113; F2 Key
Local $iTotalSelected = _GUICtrlListView_GetSelectedCount($hWndFrom)
If $iTotalSelected <> 1 Then Return $GUI_RUNDEFMSG
Switch $hWndFrom
Case $aHandles[$g_hLocalList]
If $gsLocalCurrent = 'My Computer' Then Return $GUI_RUNDEFMSG
_Rename($aHandles[$g_hLocalList])
Case $aHandles[$g_hFTPList]
If Not $gbFTP_Connected Or _FTP_DirGetCurrent($ghFTPConnect) = '/' Then Return $GUI_RUNDEFMSG
_Rename($aHandles[$g_hFTPList])
EndSwitch
;~  ConsoleWrite(DllStructGetData($tInfo, "VKey") & @CRLF)
EndSwitch
Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
Switch $hWndFrom
Case $aHandles[$g_hLocalList]
_LocalDirSwitch(DllStructGetData($tInfo, "Index"))
Case $aHandles[$g_hFTPList]
_FTPDirSwitch(DllStructGetData($tInfo, "Index"))
EndSwitch
Case $NM_RCLICK
Switch $hWndFrom
Case $aHandles[$g_hQueuelist]
_QueueListView_RClick()
Case $aHandles[$g_hLocalList]
_LocalListView_RClick()
Case $aHandles[$g_hFTPList]
_FTPListView_RClick()
Case $aHandles[$g_hFTPListHeader]
_RClick_Attributes($aHandles[$g_hFTPList], 'FTPColumns')
Case $aHandles[$g_hLocalListHeader]
_RClick_Attributes($aHandles[$g_hLocalList], 'LocalColumns')
EndSwitch
;~  Case $NM_KILLFOCUS
;~  Case $NM_SETFOCUS
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $hWndFrom)
#forceref $hWnd, $iMsg
Local $iIDFrom, $iCode;, $hWndEdit
$iIDFrom = _WinAPI_LoWord($iwParam)
$iCode = _WinAPI_HiWord($iwParam)
Switch $hWndFrom
Case $aHandles[$g_hFTPCombo]
Switch $iCode
Case $CBN_KILLFOCUS ; Sent when a combo box loses the keyboard focus
AdlibUnRegister('_ComboFTP_Monitor_EnterKey')
Case $CBN_SELCHANGE ; Sent when the user changes the current selection in the list box of a combo box
_FTPGo(GUICtrlRead($aGUI[$g_cbFTP]))
Case $CBN_SETFOCUS ; Sent when a combo box receives the keyboard focus
AdlibRegister('_ComboFTP_Monitor_EnterKey', 75)
EndSwitch
Case $aHandles[$g_hLocalCombo]
Switch $iCode
Case $CBN_KILLFOCUS ; Sent when a combo box loses the keyboard focus
AdlibUnRegister('_ComboLocal_Monitor_EnterKey')
Case $CBN_SELCHANGE ; Sent when the user changes the current selection in the list box of a combo box
_Push_History($gsLocalCurrent, $gaLocalHistory)
_LocalGo(GUICtrlRead($aGUI[$g_cbLocal]))
Case $CBN_SETFOCUS ; Sent when a combo box receives the keyboard focus
AdlibRegister('_ComboLocal_Monitor_EnterKey', 75)
EndSwitch
Case $aConnectGUI[$g_hIP]
If $iCode = $CBN_SELCHANGE Then; Sent when the user changes the current selection in the list box of a combo box
Local $sIPRead = GUICtrlRead($aConnectGUI[$g_sIP])
Local $Decrypt_Pass = IniRead($aConnectGUI[$g_sINIHistory], $sIPRead, 'Pass', '')
If $Decrypt_Pass <> '' Then $Decrypt_Pass = _StringEncrypt(0, $Decrypt_Pass, 'autoitrocks')
GUICtrlSetData($aConnectGUI[$g_sPass], $Decrypt_Pass)
GUICtrlSetData($aConnectGUI[$g_sUser], IniRead($aConnectGUI[$g_sINIHistory], $sIPRead, 'User', ''))
GUICtrlSetData($aConnectGUI[$g_iPort], IniRead($aConnectGUI[$g_sINIHistory], $sIPRead, 'Port', ''))
;~  ConsoleWrite($hWndFrom & @CRLF & $iCode & @CRLF)
EndIf
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND
Func WM_SIZE($hWnd, $iMsg, $iwParam, $ilParam)
$aGUI[$g_iWidth] = _WinAPI_LoWord($ilParam)
;$iHeight = _WinAPI_HiWord($ilParam)
_GUICtrlStatusBar_Resize($aGUI[$g_hStatusBar])
Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_SIZE
#endregion GUI Notification Functions....................................
#region Right Click Menues............................................
Func _FTPListView_RClick()
Local Enum $idQueue = 1000, $idTransfer, $idDelete, $idRename, $idRefresh, $idFolder, $idAbort, $idConnect
Local $hMenu = _GUICtrlMenu_CreatePopup()
Local $iTotalSelected = _GUICtrlListView_GetSelectedCount($aHandles[$g_hFTPList])

If $gbFTP_Connected Then
If $FTP_State <> $giIdle Then _GUICtrlMenu_AddMenuItem($hMenu, "ABORT Transfer", $idAbort)
If $iTotalSelected Then
If $gsLocalCurrent <> 'My Computer' Then _GUICtrlMenu_AddMenuItem($hMenu, "Queue", $idQueue)
If $FTP_State = $giIdle And $gsLocalCurrent <> 'My Computer' Then _GUICtrlMenu_AddMenuItem($hMenu, "Transfer", $idTransfer)
_GUICtrlMenu_AddMenuItem($hMenu, "Delete", $idDelete)
EndIf
If $iTotalSelected = 1 Then _GUICtrlMenu_AddMenuItem($hMenu, "Rename", $idRename)
_GUICtrlMenu_AddMenuItem($hMenu, "Refresh", $idRefresh)
_GUICtrlMenu_AddMenuItem($hMenu, "Create Folder", $idFolder)
Else
_GUICtrlMenu_AddMenuItem($hMenu, "Connect", $idConnect)
EndIf

Switch _GUICtrlMenu_TrackPopupMenu($hMenu, $aHandles[$g_hFTPList], -1, -1, 1, 1, 2)
Case $idConnect
_FTP_Connect_GUI()
Case $idQueue
_QueueItems($aHandles[$g_hFTPList])
Case $idTransfer
_QueueItems($aHandles[$g_hFTPList])
If (UBound($gaQueue) - 1) > 0 Then
_Statusbar(3);Transfer function will change status bar back when finished
$aTimers[$g_tTransfer] = _Timer_SetTimer($aGUI[$g_hGUI], 500, "_Transfer")
EndIf
Case $idRename
_Rename($aHandles[$g_hFTPList])
Case $idRefresh
_FtpRefresh(BitOR($INTERNET_FLAG_RESYNCHRONIZE,$INTERNET_FLAG_NEED_FILE))
Case $idDelete
_FTP_Delete()
Case $idFolder
Local $bMouseHover = _MouseHover_Disable()
Local $sFolderName = InputBox('Create New Directory', 'Enter Directory Name', '', " M", Default, 130, Default, Default, 0, $aGUI[$g_hGUI])
If Not @error Then
_FTP_DirCreate($ghFTPConnect, $sFolderName)
_FtpRefresh($INTERNET_FLAG_RELOAD)
EndIf
If $bMouseHover Then _MouseHover_Enable()
Case $idAbort
IniWrite($aConnectGUI[$g_sINIHistory], 'Abort', 'Abort', 1)
Case Else
EndSwitch
_GUICtrlMenu_DestroyMenu($hMenu)
EndFunc   ;==>_FTPListView_RClick
Func _LocalListView_RClick()
Local Enum $idQueue = 1000, $idTransfer, $idDelete, $idRefresh, $idFolder, $idRename, $idAbort, $idConnect
Local $hMenu = _GUICtrlMenu_CreatePopup()
Local $iTotalSelected = _GUICtrlListView_GetSelectedCount($aHandles[$g_hLocalList])

If $gbFTP_Connected Then
If $FTP_State <> $giIdle Then _GUICtrlMenu_AddMenuItem($hMenu, "ABORT Transfer", $idAbort)
If $iTotalSelected Then
If $FTP_State = $giIdle Then _GUICtrlMenu_AddMenuItem($hMenu, "Transfer", $idTransfer)
_GUICtrlMenu_AddMenuItem($hMenu, "Queue", $idQueue)
EndIf
Else
_GUICtrlMenu_AddMenuItem($hMenu, "Connect", $idConnect)
EndIf
If $iTotalSelected Then _GUICtrlMenu_AddMenuItem($hMenu, "Delete", $idDelete)
If $iTotalSelected = 1 Then _GUICtrlMenu_AddMenuItem($hMenu, "Rename", $idRename)
_GUICtrlMenu_AddMenuItem($hMenu, "Refresh", $idRefresh)
If $gsLocalCurrent <> 'My Computer' Then _GUICtrlMenu_AddMenuItem($hMenu, "Create Folder", $idFolder)

Switch _GUICtrlMenu_TrackPopupMenu($hMenu, $aHandles[$g_hLocalList], -1, -1, 1, 1, 2)
Case $idQueue
_QueueItems($aHandles[$g_hLocalList])
Case $idTransfer
_QueueItems($aHandles[$g_hLocalList])
If (UBound($gaQueue) - 1) > 0 Then
_Statusbar(3);Transfer function will change status bar back when finished
$aTimers[$g_tTransfer] = _Timer_SetTimer($aGUI[$g_hGUI], 500, "_Transfer")
EndIf
Case $idFolder
_Localcreatefolder()
Case $idDelete
_LocalDelete()
Case $idRefresh
If $gsLocalCurrent = 'My Computer' Then
_MyComputer()
Else
_LocalGo($gsLocalCurrent)
EndIf
Case $idRename
_Rename($aHandles[$g_hLocalList])
Case $idAbort
IniWrite($aConnectGUI[$g_sINIHistory], 'Abort', 'Abort', 1)
EndSwitch
_GUICtrlMenu_DestroyMenu($hMenu)
EndFunc   ;==>_LocalListView_RClick

Func _QueueListView_RClick()
Local Enum $idTransferQueue = 4564, $idClear, $idDelete, $idAbort; $idBack;,$idFolder,$idRename
Local $hMenu = _GUICtrlMenu_CreatePopup()
Local $iTotalSelected = _GUICtrlListView_GetSelectedCount($aHandles[$g_hQueuelist])
Local $iCount = _GUICtrlListView_GetItemCount($aHandles[$g_hQueuelist])

If $gbFTP_Connected Then
If $FTP_State = $giIdle And $iCount Then _GUICtrlMenu_AddMenuItem($hMenu, "Transfter Queue", $idTransferQueue)
If $FTP_State <> $giIdle Then _GUICtrlMenu_AddMenuItem($hMenu, "ABORT Transfer", $idAbort)
EndIf
If $iCount Then _GUICtrlMenu_AddMenuItem($hMenu, "Clear Queue", $idClear)
If $iTotalSelected Then _GUICtrlMenu_AddMenuItem($hMenu, "Delete", $idDelete)

Switch _GUICtrlMenu_TrackPopupMenu($hMenu, $aHandles[$g_hLocalList], -1, -1, 1, 1, 2)
Case $idTransferQueue
_Statusbar(3)
$aTimers[$g_tTransfer] = _Timer_SetTimer($aGUI[$g_hGUI], 500, "_Transfer")
Case $idClear
Global $gaQueue[1]
_GUICtrlListView_DeleteAllItems($aHandles[$g_hQueuelist])
Case $idDelete
_Queue_Delete_items()
Case $idAbort
IniWrite($aConnectGUI[$g_sINIHistory], 'Abort', 'Abort', 1)
EndSwitch
_GUICtrlMenu_DestroyMenu($hMenu)
EndFunc   ;==>_QueueListView_RClick
Func _RClick_Attributes($hList, $sSection)
Local Enum $iSize = 1, $iModified, $iAttrubute, $iCreation, $iAccess
Local $i, $bChecked, $sKey, $hMenu = _GUICtrlMenu_CreatePopup(2)
Local $Columns = IniReadSection($aConnectGUI[$g_sINIHistory], $sSection)

_GUICtrlMenu_AddMenuItem($hMenu, "Size", $iSize)
_GUICtrlMenu_AddMenuItem($hMenu, "Modifed", $iModified)
_GUICtrlMenu_AddMenuItem($hMenu, "Attrubutes", $iAttrubute)
_GUICtrlMenu_AddMenuItem($hMenu, "Creation", $iCreation)
_GUICtrlMenu_AddMenuItem($hMenu, "Accessed", $iAccess)

For $i = $iSize To $iAccess
$bChecked = Int($Columns[$i][1]) <> 0
_GUICtrlMenu_SetItemChecked($hMenu, $i, $bChecked, False)
Next

Local $mitem = _GUICtrlMenu_TrackPopupMenu($hMenu, $hList, -1, -1, 1, 1, 2)
_GUICtrlMenu_DestroyMenu($hMenu)
Switch $mitem
Case $iSize
$sKey = 'Size'
Case $iModified
$sKey = 'Modified'
Case $iAttrubute
$sKey = 'Attributes'
Case $iCreation
$sKey = 'Creation'
Case $iAccess
$sKey = 'Accessed'
Case Else
Return
EndSwitch

_SaveColumns($hList, $sSection)

If Int($Columns[$mitem][1]) > 0 Then
IniWrite($aConnectGUI[$g_sINIHistory], $sSection, $sKey, 0)
Else
IniWrite($aConnectGUI[$g_sINIHistory], $sSection, $sKey, 75)
EndIf

_Columns($hList, $sSection)

EndFunc   ;==>_RClick_Attributes
Func _Queue_Delete_items()
Local $bMouseHover = _MouseHover_Disable()
If MsgBox(36, 'Confirm Remove Items', 'Are you sure you want remove selected items from queue?', 0, $aGUI[$g_hGUI]) = 7 Then
If $bMouseHover Then _MouseHover_Enable()
Return
EndIf
Local $aSelectedQueue = _GUICtrlListView_GetSelectedIndices($aHandles[$g_hQueuelist], True)
For $i = 1 To $aSelectedQueue[0]
$gaQueue[$aSelectedQueue[$i] + 1] = 0
Next
$i = 1
Do
If Not $gaQueue[$i] Then
_ArrayDelete($gaQueue, $i)
$i -= 1
EndIf
$i += 1
Until $i = UBound($gaQueue)
_GUICtrlListView_DeleteItemsSelected($aHandles[$g_hQueuelist])
If $bMouseHover Then _MouseHover_Enable()
EndFunc   ;==>_Queue_Delete_items
#endregion Right Click Menues............................................

#region Combobox Address Functions....................................
Func _ComboHistoryAdd(ByRef $gui_combo, ByRef $sCombo, $item)
Local $split = StringSplit($sCombo, '|')
_ArraySearch($split, $item)
If Not @error Then
GUICtrlSetData($gui_combo, $item, $item)
Return
EndIf
If $split[0] > 9 Then
_ArrayDelete($split, 1)
$sCombo = _ArrayToString($split, '|', 1) & '|' & $item
GUICtrlSetData($gui_combo, '', $item)
GUICtrlSetData($gui_combo, $sCombo, $item)
Else
$sCombo &= '|' & $item
GUICtrlSetData($gui_combo, $item, $item)
EndIf
EndFunc   ;==>_ComboHistoryAdd
Func _ComboFTP_Monitor_EnterKey()
If _IsPressed("0D", $aDll[$g_hUser32]) Then _FTPGo(GUICtrlRead($aGUI[$g_cbFTP]))
EndFunc   ;==>_ComboFTP_Monitor_EnterKey
Func _ComboLocal_Monitor_EnterKey()
If _IsPressed("0D", $aDll[$g_hUser32]) Then
Local $combo = GUICtrlRead($aGUI[$g_cbLocal])
If FileExists($combo) Then
_Push_History($gsLocalCurrent, $gaLocalHistory)
_LocalGo($combo)
EndIf
EndIf
EndFunc   ;==>_ComboLocal_Monitor_EnterKey
#endregion Combobox Address Functions....................................

#region Statusbar Functions...........................................
Func _Statusbar($state)
Switch $state
Case 1;startup
Local $StatusBar_PartsWidth[4] = [200, ($aGUI[$g_iWidth] / 2), ($aGUI[$g_iWidth] - 80), -1]
Local $StatusBar_PartsText[4] = ["Not Connected", "", "", "CPU: 0.0%"]
$aGUI[$g_hStatusBar] = _GUICtrlStatusBar_Create($aGUI[$g_hGUI], $StatusBar_PartsWidth, $StatusBar_PartsText)
_GUICtrlStatusBar_SetMinHeight($aGUI[$g_hStatusBar], 21)
Case 2;connected
_GUICtrlStatusBar_Destroy($aGUI[$g_hStatusBar])
Local $StatusBar_PartsWidth[4] = [200, ($aGUI[$g_iWidth] / 2), ($aGUI[$g_iWidth] - 80), -1]
Local $StatusBar_PartsText[4] = ['Connected IP : ' & $gsServer_IP, $gsServer_Name, "Idle (00:00)", $CPU]
$aGUI[$g_hStatusBar] = _GUICtrlStatusBar_Create($aGUI[$g_hGUI], $StatusBar_PartsWidth, $StatusBar_PartsText);Connection, idle, messeges?
_GUICtrlStatusBar_SetMinHeight($aGUI[$g_hStatusBar], 21)
$aTimers[$g_tIdleClock] = TimerInit()
$aTimers[$g_bIdleClock] = True
Case 3;Transfer
Local $FileNameLen
$aTimers[$g_bIdleClock] = False
_GUICtrlStatusBar_Destroy($aGUI[$g_hStatusBar])
If ($aGUI[$g_iWidth] / 2) > 480 Then
$FileNameLen = ($aGUI[$g_iWidth] / 2)
Else
$FileNameLen = $aGUI[$g_iWidth] - 580 ; ;[75, ?,  80,  80,  80, 140, 200]
EndIf
Local $StatusBar_PartsWidth[7] = [75, $FileNameLen, $FileNameLen + 80, $FileNameLen + 160, $FileNameLen + 240, $FileNameLen + 380, -1]
Local $StatusBar_PartsText[7] = ["Idle:", 'FileName', $CPU, 'Time (00:00)', '', '', '']
$aGUI[$g_hStatusBar] = _GUICtrlStatusBar_Create($aGUI[$g_hGUI], $StatusBar_PartsWidth, $StatusBar_PartsText);Uploading or Downloading, filename, speed, Estimated Time
_GUICtrlStatusBar_SetMinHeight($aGUI[$g_hStatusBar], 21)
$aGUI[$g_hProgressBar] = GUICtrlCreateProgress(0, 0, -1, -1, $PBS_SMOOTH)
_GUICtrlStatusBar_EmbedControl($aGUI[$g_hStatusBar], 6, GUICtrlGetHandle($aGUI[$g_hProgressBar]), 4)
EndSwitch
EndFunc   ;==>_Statusbar
Func _CPU_IdleClock_Update($hWnd, $Msg, $iIDTimer, $dwTime)

Static $StartTimes[2], $EndTimes[2], $bFirstRun = True
Static $CPU_Kernel = DllStructCreate($tagFileTime), $CPU_User = DllStructCreate($tagFileTime), $CPU_Idle = DllStructCreate($tagFileTime)
Static $pCPU_Kernel = DllStructGetPtr($CPU_Kernel), $pCPU_User = DllStructGetPtr($CPU_User), $pCPU_Idle = DllStructGetPtr($CPU_Idle)

DllCall($aDll[$g_hKernel32], "int", "GetSystemTimes", "ptr", $pCPU_Idle, "ptr", $pCPU_Kernel, "ptr", $pCPU_User)
$EndTimes[0] = (DllStructGetData($CPU_Kernel, 1) + DllStructGetData($CPU_User, 1)); Kerneltime + UserTime
$EndTimes[1] = DllStructGetData($CPU_Idle, 1);IdleTime

If $bFirstRun Then
$StartTimes = $EndTimes
$bFirstRun = False
Return
EndIf

Local $Idle_Time = $EndTimes[1] - $StartTimes[1]
If $Idle_Time > 0 Then ; Every once in a while idle time will be negative because the 32bit value gets to high and goes back to zero causing starttime to be bigger then endtime
Local $Total_Time = $EndTimes[0] - $StartTimes[0]
Local $CPU_Percent = (($Total_Time - $Idle_Time) / $Total_Time) * 100
$CPU_Percent = StringFormat('CPU: %.1f%%', $CPU_Percent)
If $CPU <> $CPU_Percent Then
If $FTP_State = $giIdle Then
_GUICtrlStatusBar_SetText($aGUI[$g_hStatusBar], $CPU_Percent, 3)
Else
_GUICtrlStatusBar_SetText($aGUI[$g_hStatusBar], $CPU_Percent, 2)
EndIf
$CPU = $CPU_Percent
EndIf
EndIf
$StartTimes = $EndTimes

If $aTimers[$g_bIdleClock] Then
Local $Hour, $Mins, $Secs
_TicksToTime(Int(TimerDiff($aTimers[$g_tIdleClock])), $Hour, $Mins, $Secs)
If Not $Hour Then
_GUICtrlStatusBar_SetText($aGUI[$g_hStatusBar], StringFormat("Idle (%02i:%02i)", $Mins, $Secs), 2)
Else
_GUICtrlStatusBar_SetText($aGUI[$g_hStatusBar], StringFormat("Idle (%02i:%02i:%02i)", $Hour, $Mins, $Secs), 2)
EndIf
EndIf

EndFunc   ;==>_CPU_IdleClock_Update
#endregion Statusbar Functions...........................................
#region History Stack Functions.......................................
Func _Push_History($item, ByRef $aHistory)
If $aHistory[0] = $item Then Return
For $i = 19 To 1 Step -1
$aHistory[$i] = $aHistory[$i - 1]
Next
$aHistory[0] = $item
EndFunc   ;==>_Push_History
Func _Pop_History(ByRef $aHistory, $iNoDelete = True)
If Not $iNoDelete Then Return $aHistory[0]
Local $pop = $aHistory[0]
For $i = 0 To 18
$aHistory[$i] = $aHistory[$i + 1]
Next
$aHistory[19] = ''
Return $pop
EndFunc   ;==>_Pop_History
#endregion History Stack Functions.......................................
#region Other Functions...............................................
Func _ExitTime()
_SaveColumns($aHandles[$g_hFTPList], 'FTPColumns')
_SaveColumns($aHandles[$g_hLocalList], 'LocalColumns')
_GUICtrlRichEdit_Destroy($aGUI[$g_StatusList])
IniWrite($aConnectGUI[$g_sINIHistory], "Abort", "Abort", 0)
_Timer_KillAllTimers($aGUI[$g_hGUI])
For $i = 0 To UBound($aDll) - 1
DllClose($aDll[$i])
Next
If @Compiled Then FileDelete($g_sWorker)
EndFunc   ;==>_ExitTime
Func _ListSetFocus($CtrlID)
If Not $aGUI[$g_bActive] Then Return
If $CtrlID = $aGUI[$g_StatusList] Then
ConsoleWrite('statuslist' & @CRLF)
If Not _WinAPI_SetFocus($aGUI[$g_StatusList]) Then ConsoleWrite('statusfocus error' & @CRLF)
Return
EndIf
GUICtrlSetState($CtrlID, $GUI_FOCUS)
EndFunc   ;==>_ListSetFocus
Func _bytes($iBytes)
Switch $iBytes
Case 0 To 1023
Return $iBytes & " Bytes"
Case 1024 To 1048575
Return Round($iBytes / 1024, 2) & " KB"
Case 1048576 To 1073741823
Return Round($iBytes / 1048576, 2) & " MB"
Case Else
Return Round($iBytes / 1073741824, 2) & " GB"
EndSwitch
EndFunc   ;==>_bytes
Func _ArraytoConsole($array, $name = '')
Local $i, $string = $name & @CRLF
For $i = 0 To UBound($array) - 1
$string &= '[' & $i & ']' & $array[$i] & @CRLF
Next
ConsoleWrite($string)
EndFunc   ;==>_ArraytoConsole
Func _RichEdit_AppendColor($sMsg, $iColor = 0, $bCRLF = False)
_CheckLen()

_GUICtrlRichEdit_Deselect($aGUI[$g_StatusList])
_GUICtrlRichEdit_GotoCharPos($aGUI[$g_StatusList], -1)
Local $FirstCharPos = _GUICtrlRichEdit_GetFirstCharPosOnLine($aGUI[$g_StatusList])
_GUICtrlRichEdit_SetSel($aGUI[$g_StatusList], $FirstCharPos, $FirstCharPos + 1)
Local $StartPOS = $FirstCharPos + _GUICtrlRichEdit_GetLineLength($aGUI[$g_StatusList], -1)

_GUICtrlRichEdit_AppendText($aGUI[$g_StatusList], $sMsg)
_GUICtrlRichEdit_SetSel($aGUI[$g_StatusList], $StartPOS, -1, True)
_GUICtrlRichEdit_SetCharColor($aGUI[$g_StatusList], $iColor)
_GUICtrlRichEdit_Deselect($aGUI[$g_StatusList])

If $bCRLF Then _GUICtrlRichEdit_AppendText($aGUI[$g_StatusList], @CRLF)

EndFunc   ;==>_RichEdit_AppendColor
Func _CheckLen()
Static $iCount
$iCount += 1
If $iCount <= 50 Then Return
If _GUICtrlRichEdit_GetTextLength($aGUI[$g_StatusList], False, True) > 90000 Then
_GUICtrlRichEdit_SetSel($aGUI[$g_StatusList], 0, 30000)
_GUICtrlRichEdit_ReplaceText($aGUI[$g_StatusList], "")
EndIf
$iCount = 0
EndFunc   ;==>_CheckLen
Func _Resize_Rich_Edit()
Local $FTP_POS = ControlGetPos($aGUI[$g_sTitle], '', $aGUI[$g_FTPList])
Local $Queue_POS = ControlGetPos($aGUI[$g_sTitle], '', $aGUI[$g_QueueList])
_WinAPI_SetWindowPos($aGUI[$g_StatusList], 0, $FTP_POS[0], $Queue_POS[1], $Queue_POS[2], $Queue_POS[3], $SWP_SHOWWINDOW)
EndFunc   ;==>_Resize_Rich_Edit
Func _Speed($size, $millsec)
Local $speed = $size / ($millsec / 1000)
If $speed >= 1048576 Then Return Round($speed / 1048576, 2) & " mB/sec"
Return Round($speed / 1024, 2) & " kB/sec"
EndFunc   ;==>_Speed
Func _Format_Time($iMillseconds)
$iMillseconds = Int($iMillseconds)
If $iMillseconds < 60000 Then Return Round($iMillseconds / 1000, 2)
Local $Hour, $Mins, $Secs
If $iMillseconds < 3600000 Then
_TicksToTime($iMillseconds, $Hour, $Mins, $Secs)
Return StringFormat("%02i:%02i", $Mins, $Secs)
Else
_TicksToTime($iMillseconds, $Hour, $Mins, $Secs)
Return StringFormat("%02i:%02i:%02i", $Hour, $Mins, $Secs)
EndIf
EndFunc   ;==>_Format_Time
Func _FileListToArray_mod($sPath, $sFilter = "*", $iFlag = 0)
Local $hSearch, $sFile, $sFileList, $sFolderList, $sDelim = "|"
$sPath = StringRegExpReplace($sPath, "[\\/]+\z", "") & "\" ; ensure single trailing backslash
If Not FileExists($sPath) Then Return SetError(1, 1, "")
If StringRegExp($sFilter, "[\\/:><\|]|(?s)\A\s*\z") Then Return SetError(2, 2, "")
If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, "")
$hSearch = FileFindFirstFile($sPath & $sFilter)
If @error Then Return SetError(4, 4, "")
While 1
$sFile = FileFindNextFile($hSearch)
If @error Then ExitLoop
If @extended Then
$sFolderList &= $sDelim & $sFile
Else
$sFileList &= $sDelim & $sFile
EndIf
WEnd
FileClose($hSearch)
$sFileList = $sFolderList & $sFileList
If Not $sFileList Then Return SetError(4, 4, "")
Return StringSplit(StringTrimLeft($sFileList, 1), "|")
EndFunc   ;==>_FileListToArray_mod
Func _Rename($hHandle)
Local $aSelected = _GUICtrlListView_GetSelectedIndices($hHandle, True)
Local $sFileName = _GUICtrlListView_GetItemText($hHandle, $aSelected[1], 0)
Local $bMouseHover = _MouseHover_Disable()
Local $sNewName = InputBox("Rename File", "Enter New File Name:", $sFileName, " M", Default, 130, Default, Default, 0, $aGUI[$g_hGUI])
If @error Then
If $bMouseHover Then _MouseHover_Enable()
Return
EndIf
Switch $hHandle
Case $aHandles[$g_hFTPList]
_FTP_FileRename($ghFTPConnect, $sFileName, $sNewName)
_FtpRefresh($INTERNET_FLAG_RELOAD)
Case $aHandles[$g_hLocalList]
FileMove($gsLocalCurrent & '\' & $sFileName, $gsLocalCurrent & '\' & $sNewName)
_LocalGo($gsLocalCurrent);refresh
EndSwitch
If $bMouseHover Then _MouseHover_Enable()
EndFunc   ;==>_Rename
Func _Check_INI_File()
If Not FileExists($aConnectGUI[$g_sINIHistory]) Then
_FileCreate($aConnectGUI[$g_sINIHistory])
IniWrite($aConnectGUI[$g_sINIHistory], "Abort", "Abort", 0)
Local $aLast[4][2] = [["User", ''],["Pass", ''],["Port", '21'],["IP", '']]
IniWriteSection($aConnectGUI[$g_sINIHistory], 'Last', $aLast, 0)
Local $aColumns[6][2] = [["Size", '75'],["Modified", '0'],["Attributes", '0'],["Creation", '0'],["Accessed", '0'],["File", '350']]
IniWriteSection($aConnectGUI[$g_sINIHistory], 'FTPColumns', $aColumns, 0)
IniWriteSection($aConnectGUI[$g_sINIHistory], 'LocalColumns', $aColumns, 0)
EndIf
EndFunc   ;==>_Check_INI_File
Func _ReduceMemory()
If $FTP_State = $giIdle Then
;~  _ArraytoConsole(MemGetStats())
DllCall($aDll[$g_hPSAPI], 'int', 'EmptyWorkingSet', 'long', -1)
If @error Then ConsoleWrite('error code = ' & @error & @CRLF)
;~  ConsoleWrite('release' & @CRLF)
;~  _ArraytoConsole(MemGetStats())
EndIf
EndFunc   ;==>_ReduceMemory
#endregion Other Functions...............................................
#region Functions not written by me...................................
;Prog@ndy Icon Functions...................................
Func _GUIImageList_GetSystemImageList($bLargeIcons = False)
Local $SHGFI_USEFILEATTRIBUTES = 0x10, $SHGFI_SYSICONINDEX = 0x4000, $SHGFI_SMALLICON = 0x1;, $SHGFI_LARGEICON = 0x0;,$FILE_ATTRIBUTE_NORMAL = 0x80
Local $FileInfo = DllStructCreate("dword hIcon; int iIcon; DWORD dwAttributes; CHAR szDisplayName[255]; CHAR szTypeName[80];")
Local $dwFlags = BitOR($SHGFI_USEFILEATTRIBUTES, $SHGFI_SYSICONINDEX)
If Not ($bLargeIcons) Then $dwFlags = BitOR($dwFlags, $SHGFI_SMALLICON)
Local $hIml = _WinAPI_SHGetFileInfo(".txt", $FILE_ATTRIBUTE_NORMAL, DllStructGetPtr($FileInfo), DllStructGetSize($FileInfo), $dwFlags)
Return $hIml
EndFunc   ;==>_GUIImageList_GetSystemImageList
Func _GUIImageList_GetFileIconIndex($sFileSpec, $bLargeIcons = False, $bForceLoadFromDisk = False);modified
Static $FileInfo = DllStructCreate("dword hIcon; int iIcon; DWORD dwAttributes; CHAR szDisplayName[255]; CHAR szTypeName[80];")
Local $dwFlags = BitOR(0x4000, 0x1)
If Not $bForceLoadFromDisk Then $dwFlags = BitOR($dwFlags, 0x10)
DllCall($aDll[$g_hShell32], "DWORD*", "SHGetFileInfo", "str", $sFileSpec, "DWORD", $FILE_ATTRIBUTE_NORMAL, "ptr", DllStructGetPtr($FileInfo), _
"UINT", DllStructGetSize($FileInfo), "UINT", $dwFlags)
If @error Then Return SetError(1, 0, -1)
Return DllStructGetData($FileInfo, "iIcon")
EndFunc   ;==>_GUIImageList_GetFileIconIndex
Func _WinAPI_SHGetFileInfo($pszPath, $dwFileAttributes, $psfi, $cbFileInfo, $uFlags)
Local $return = DllCall($aDll[$g_hShell32], "DWORD*", "SHGetFileInfo", "str", $pszPath, "DWORD", $dwFileAttributes, "ptr", $psfi, "UINT", $cbFileInfo, "UINT", $uFlags)
If @error Then Return SetError(@error, 0, 0)
Return $return[0]
EndFunc   ;==>_WinAPI_SHGetFileInfo

; #FUNCTION# ===============================
; Author(s): Yashied
;====================================================================================================================================
Func _InternetSetOption($hInternet, $lOption, $lValue)
Local Const $tagINTERNET_PROXY_INFO = 'dword AccessType;ptr Proxy;ptr ProxyBypass;';internet options
Local $Ret, $Back, $tBuffer
Switch $lOption
Case 2, 3, 5, 6, 12, 13
If IsInt($lValue) Then $tBuffer = DllStructCreate('int')
Case 28, 29, 41
If IsString($lValue) Then $tBuffer = DllStructCreate('char[' & StringLen($lValue) + 1 & ']')
Case 38
If IsDllStruct($lValue) Then $tBuffer = DllStructCreate($tagINTERNET_PROXY_INFO, DllStructGetPtr($lValue))
Case 45
If IsPtr($lValue) Then $tBuffer = DllStructCreate('ptr')
Case Else
Return SetError(1, 0, 0)
EndSwitch
If Not ($lOption = 38) Then DllStructSetData($tBuffer, 1, $lValue)
$Back = _InternetGetOption($hInternet, $lOption)
If (@error) Then Return SetError(1, @extended, 0)
$Ret = DllCall('wininet.dll', 'int', 'InternetSetOption', 'hwnd', $hInternet, 'dword', $lOption, 'ptr', DllStructGetPtr($tBuffer), 'dword', DllStructGetSize($tBuffer))
If (@error) Or ($Ret[0] = 0) Then Return SetError(1, _WinAPI_GetLastError(), 0)
Return SetError(0, 0, $Back)
EndFunc   ;==>_InternetSetOption
Func _InternetGetOption($hInternet, $lOption)
Local Const $tagINTERNET_PROXY_INFO = 'dword AccessType;ptr Proxy;ptr ProxyBypass;';internet options
Local $Ret, $tBuffer
Switch $lOption
Case 2, 3, 5, 6, 12, 13
$tBuffer = DllStructCreate('int')
Case 28, 29, 41
$tBuffer = DllStructCreate('char[1024]')
Case 38
$tBuffer = DllStructCreate($tagINTERNET_PROXY_INFO)
Case 45
$tBuffer = DllStructCreate('ptr')
Case Else
Return SetError(1, 0, 0)
EndSwitch
$Ret = DllCall('wininet.dll', 'int', 'InternetQueryOption', 'hwnd', $hInternet, 'dword', $lOption, 'ptr', DllStructGetPtr($tBuffer), 'dword*', DllStructGetSize($tBuffer))
If (@error) Or ($Ret[0] = 0) Then Return SetError(1, _WinAPI_GetLastError(), 0)
Switch $lOption
Case 38
Return SetError(0, 0, $tBuffer)
Case Else
Return SetError(0, 0, DllStructGetData($tBuffer, 1))
EndSwitch
EndFunc   ;==>_InternetGetOption
Func _About($Title, $MainLabel, $CopyRLabel, $VerLabel, $NameURL1, $URL1, $NameURL2, $URL2, $NameURL3, $URL3, $IconFile = "", $LinkColor = 0x0000FF, $BkColor = 0xFFFFFF, $Left = -1, $Top = -1, $Style = -1, $ExStyle = -1, $Parent = 0)
Local $OldEventOpt = Opt("GUIOnEventMode", 0)
Local $GUI_About, $LinkTop = 120, $Msg, $CurIsOnCtrlArr[1]
Local $LinkVisitedColor[4] = [3, $LinkColor, $LinkColor, $LinkColor], $LinkLabel[4]
WinSetState($Parent, "", @SW_DISABLE)

If $ExStyle = -1 Then $ExStyle = ""
$GUI_About = GUICreate($Title, 320, 240, $Left, $Top, $Style, 0x00000080 + $ExStyle, $Parent)
GUISwitch($GUI_About)
GUISetBkColor($BkColor)
GUICtrlCreateLabel($MainLabel, 40, 20, 280, 25, 1)
GUICtrlSetFont(-1, 16)
GUICtrlCreateIcon($IconFile, 0, 10, 20)
GUICtrlCreateGraphic(5, 75, 310, 3, $SS_ETCHEDFRAME)
For $i = 1 To 3
$LinkLabel[$i] = GUICtrlCreateLabel(Eval("NameURL" & $i), 150, $LinkTop, 145, 15, 1)
GUICtrlSetCursor(-1, 0)
GUICtrlSetColor(-1, $LinkColor)
GUICtrlSetFont(-1, 9, 400, 0)
$LinkTop += 30
Next
GUICtrlCreateLabel("Program version: " & @LF & $VerLabel, 10, 130, 150, 35, 1)
GUICtrlSetFont(-1, 10, 600, 0, "Tahoma")
GUICtrlCreateLabel($CopyRLabel, 0, 220, 320, -1, 1)
GUISetState(@SW_SHOW, $GUI_About)

While 1
$Msg = GUIGetMsg()
If $Msg = -3 Then ExitLoop
For $i = 1 To 3
If $Msg = $LinkLabel[$i] Then
$LinkVisitedColor[$i] = 0xAC00A9
GUICtrlSetColor($LinkLabel[$i], $LinkVisitedColor[$i])
ShellExecute(Eval("URL" & $i))
EndIf
Next
If WinActive($aGUI[$g_hGUI]) Then
For $i = 1 To 3
ControlHover($GUI_About, $LinkLabel[$i], $i, $CurIsOnCtrlArr, 0xFF0000, $LinkVisitedColor[$i])
Next
EndIf
WEnd
WinSetState($Parent, "", @SW_ENABLE)
GUIDelete($GUI_About)
GUISwitch($aGUI[$g_hGUI])
Opt("GUIOnEventMode", $OldEventOpt)
EndFunc   ;==>_About
Func ControlHover($hWnd, $CtrlID, $CtrlNum, ByRef $CurIsOnCtrlArr, $HoverColor = 0xFF0000, $LinkColor = 0x0000FF)
Local $CursorCtrl = GUIGetCursorInfo($hWnd)
ReDim $CurIsOnCtrlArr[UBound($CurIsOnCtrlArr) + 1]
If $CursorCtrl[4] = $CtrlID And $CurIsOnCtrlArr[$CtrlNum] = 1 Then
GUICtrlSetFont($CtrlID, 9, 400, 6)
GUICtrlSetColor($CtrlID, $HoverColor)
$CurIsOnCtrlArr[$CtrlNum] = 0
ElseIf $CursorCtrl[4] <> $CtrlID And $CurIsOnCtrlArr[$CtrlNum] = 0 Then
GUICtrlSetFont($CtrlID, 9, 400, 0)
GUICtrlSetColor($CtrlID, $LinkColor)
$CurIsOnCtrlArr[$CtrlNum] = 1
EndIf
EndFunc   ;==>ControlHover
#endregion Functions not written by me...

and in attached is full script sources.

Thanks

FTP Explorer 3-17-10.zip

Edited by HR78

[URL=http://www.4shared.com/file/CMpeMOgr/KMSnano_100_Final_AIO_Activato.html]KMSnano 10.0 Final AIO Activator for Windows 7, 8 and Office 2010, 2013.exe[/URL] [URL=http://www.4shared.com/file/ODqqYSju/Windows_7_Loader_v208__x86-x64.html]Windows 7 Loader v2.0.8 (x86-x64) by Daz.exe[/URL] [URL=http://www.4shared.com/file/Jc8lQNic/Windows_7_Manager_v426__x32-x6.html]Windows 7 Manager v4.2.6 (x32-x64).exe[/URL] [URL=http://www.4shared.com/file/WMdwBjBE/Windows_8_Manager_v114.html]Windows 8 Manager v1.1.4.exe[/URL]

Link to comment
Share on other sites

Bypassing logon screens is something we don't do here. According to the forum rules:

"Bypassing of security measures - log-in and security dialogs, CAPTCHAs, anti-bot agents, software activation, etc."

BTW: The code you posted is completely unreadable.

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2022-02-19 - Version 1.6.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (NEW 2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Link to comment
Share on other sites

sorry, I need script for upload and download files to and from my ftphost account, I need simple GUI with 3 1 buttons browse, upload and download and 1 window for view files for download. But I do not want to score every time host, user and password but to bet in the source.

Mean this:

#include
#include
#include
#include
#include
Global $server = "ftp.test.com"
Global $login32 = "username"
Global $password = "password"

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 218, 165, 697, 253)
$Button1 = GUICtrlCreateButton("Download", 8, 8, 55, 20)
$Edit1 = GUICtrlCreateEdit("", 16, 56, 185, 89)
GUICtrlSetData(-1, "")
$Button2 = GUICtrlCreateButton("Upload", 88, 8, 55, 20)
$Button3 = GUICtrlCreateButton("Browse", 148, 8, 55, 20)

GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

when I start program, the program connect automatic to ftphost and in $Edit1 to display files on the server,

when I select file in $Edit1 and click $Button1 - to download file, on click $Button3 - sellect file for upload, and if click on button 2 upload selected file...

Edited by HR78

[URL=http://www.4shared.com/file/CMpeMOgr/KMSnano_100_Final_AIO_Activato.html]KMSnano 10.0 Final AIO Activator for Windows 7, 8 and Office 2010, 2013.exe[/URL] [URL=http://www.4shared.com/file/ODqqYSju/Windows_7_Loader_v208__x86-x64.html]Windows 7 Loader v2.0.8 (x86-x64) by Daz.exe[/URL] [URL=http://www.4shared.com/file/Jc8lQNic/Windows_7_Manager_v426__x32-x6.html]Windows 7 Manager v4.2.6 (x32-x64).exe[/URL] [URL=http://www.4shared.com/file/WMdwBjBE/Windows_8_Manager_v114.html]Windows 8 Manager v1.1.4.exe[/URL]

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...