设为首页 收藏本站
查看: 610|回复: 0

[AU3]Backup Switch Config

[复制链接]

尚未签到

发表于 2015-5-24 06:49:36 | 显示全部楼层 |阅读模式
  原因:网上找一个备份交换机的软件,竟然要钱,,晕晕。。还不如自己写一个。
  通过tftp备份交换机,支持cisco huawei h3c,只完成基本功能,界面之类的大家可以扩展 ,命令里支持正则表达式。效果如图
  
DSC0000.jpg
  
  ;by onepc 153785587
  #include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#Include
#include
Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=f:\myziliao\2011-8-3\au3\telnet\form1.kxf
;HKEY_CURRENT_USER\Software\Cisco Systems Inc.\Cisco TFTP Server\1.1\Options TFTPRootDirectory tftp保存的路径 LogFileName日志名称(TFTPServer.log)需要带名称  reg_sz
;Global $switchname="onepc"
Global $hTreeView,$iContext,$hContext,$menudel,$menuexit,$ArrItem[256],$k=0 ;设置数据保存treeview的item句柄 $k表示数组的数量
;Global $k1 = 0,$ArrTree[256]
Global $cfg = @ScriptDir & "\cfg.ini"
;Global $maincfg = @ScriptDir & "\maincfg.ini"
Global $swcfg = @ScriptDir & "\Switch\"
Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS)
;$ArrTree[0] = $k1 ;根节点
$ArrItem[0]= $k ;根的子节点
;If Not FileExists($maincfg) Then
; _CreateIniCfg($maincfg,1)
;EndIf
;_LoadINI($maincfg) ;读取tftp user pass
$Form1 = GUICreate("BackSwitch", 513, 341, -1, -1,-1,$WS_EX_TOPMOST)
GUISetOnEvent($GUI_EVENT_CLOSE, "GuiEvent")
$hTreeView = GUICtrlCreateTreeView(8, 8, 161, 321,$iStyle, $WS_EX_CLIENTEDGE)
GUICtrlSetOnEvent(-1, "GuiEvent")
$Group1 = GUICtrlCreateGroup("", 176, 56, 329, 89)
$Label1 = GUICtrlCreateLabel("Switchip", 192, 82, 54, 17)
$Input1 = GUICtrlCreateInput("", 248, 78, 241, 21)
$Input6 = GUICtrlCreateInput("", 247, 110, 113, 21)
$Button1 = GUICtrlCreateButton("Backup",  367, 108, 59, 25)
GUICtrlSetOnEvent(-1, "GuiEvent")
$Button3 = GUICtrlCreateButton("BackAll", 432, 108, 59, 25)
GUICtrlSetOnEvent(-1, "GuiEvent")
$Label2 = GUICtrlCreateLabel("SwitchM", 192, 112, 53, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("Add Switch", 176, 152, 329, 177)
$Label3 = GUICtrlCreateLabel("Switchip", 200, 232, 52, 17)
$Label4 = GUICtrlCreateLabel("SwitchName", 192, 200, 64, 17)
$Button2 = GUICtrlCreateButton("AddSwitch", 416, 296, 75, 25)
GUICtrlSetOnEvent(-1, "GuiEvent")
$Label5 = GUICtrlCreateLabel("Address", 200, 176, 42, 17)
$Input4 = GUICtrlCreateInput("", 272, 168, 217, 21)
$Label6 = GUICtrlCreateLabel("SwitchMode", 192, 264, 63, 17)
$Input5 = GUICtrlCreateInput("", 272, 232, 217, 21)
$Combo1 = GUICtrlCreateCombo("", 272, 264, 137, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "Cisco|Huawei|H3C", "Cisco")
$Input2 = GUICtrlCreateInput("", 272, 200, 217, 21)
$Input3 = GUICtrlCreateInput("", 216, 294, 73, 21)
$Input7 = GUICtrlCreateInput("", 328, 294, 73, 21)
$Label7 = GUICtrlCreateLabel("U", 200, 296, 12, 17)
$Label8 = GUICtrlCreateLabel("P", 304, 296, 11, 17)
$Checkbox1 = GUICtrlCreateCheckbox("Privilege", 424, 264, 73, 17)
GUICtrlSetState($Checkbox1,$GUI_CHECKED)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group3 = GUICtrlCreateGroup("", 176, 2, 329, 49)
$Button4 = GUICtrlCreateButton("Start", 336, 16, 43, 25)
GUICtrlSetOnEvent(-1, "GuiEvent")
$Button5 = GUICtrlCreateButton("Stop", 384, 16, 43, 25)
GUICtrlSetOnEvent(-1, "GuiEvent")
$Button6 = GUICtrlCreateButton("BackupPath", 432, 16, 67, 25)
GUICtrlSetOnEvent(-1, "GuiEvent")
$Input8 = GUICtrlCreateInput(@IPAddress1, 224, 18, 105, 21)
$Label9 = GUICtrlCreateLabel("TFTP", 192, 21, 31, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
If Not FileExists($cfg) Then
    _CreateIniCfg($swcfg & "192.168.15.196" &".txt",11,"root","wen")
    _CreateIniCfg($cfg,2,"","","机房大楼", "Switch196","192.168.15.196","Cisco")   
EndIf
_InitTreeView($hTreeView,$cfg)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
;$Menu = _GUICtrlMenu_CreatePopup()
;_GUICtrlMenu_InsertMenuItem($Menu, 0, "删除", $menudel)
;_GUICtrlMenu_InsertMenuItem($Menu, 1, "退出", $menuexit)
$iContext = GUICtrlCreateContextMenu(GUICtrlCreateDummy())
$hContext = GUICtrlGetHandle($iContext)
$menudel = GUICtrlCreateMenuItem("删除", $iContext)
$menuexit = GUICtrlCreateMenuItem("退出", $iContext)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
    Sleep(100)
WEnd
Func GuiEvent()
        Switch @GUI_CtrlId
            Case $GUI_EVENT_CLOSE
                _StopTFTP() ;关闭ftp
                Exit
            Case $Button1 ;backup
                _ExistsTFTP()
                _BackupSwitch(GUICtrlRead($Input1),GUICtrlRead($Input6),$swcfg & GUICtrlRead($Input1) & ".txt")
            Case $Button2 ;addswitch
                If GUICtrlRead($Input4)="" Or GUICtrlRead($Input2)="" Or GUICtrlRead($Input5)="" Then
                    MsgBox(0,"提示","请全部填写")
                    Return
                EndIf
                Switch GUICtrlRead($Combo1)
                    Case "Cisco"
                        _CreateIniCfg($swcfg & GUICtrlRead($Input5) &".txt",11,GUICtrlRead($Input3),GUICtrlRead($Input7))
                        _CreateIniCfg($cfg,2,"","",GUICtrlRead($Input4), GUICtrlRead($Input2), GUICtrlRead($Input5),GUICtrlRead($Combo1));_CreateIniCfg($path,$main = 0,$user="",$pass="",$swadd="",$swname="",$swi="",$swmo="")
                    Case "Huawei"
                        _CreateIniCfg($swcfg & GUICtrlRead($Input5) &".txt",12,GUICtrlRead($Input3),GUICtrlRead($Input7))
                        _CreateIniCfg($cfg,2,"","",GUICtrlRead($Input4), GUICtrlRead($Input2), GUICtrlRead($Input5),GUICtrlRead($Combo1))   
                    Case "H3C"
                        _CreateIniCfg($swcfg & GUICtrlRead($Input5) &".txt",13,GUICtrlRead($Input3),GUICtrlRead($Input7))
                        _CreateIniCfg($cfg,2,"","",GUICtrlRead($Input4), GUICtrlRead($Input2), GUICtrlRead($Input5),GUICtrlRead($Combo1))   
                EndSwitch
                _InitTreeView($hTreeView,$cfg)
            Case $Button3
                ;$xxx = _MySimpleEncry( _Base64Encode("onepc"))
                ;MsgBox(0,"",$xxx )
                ;MsgBox(0,"",BinaryToString(_Base64Decode(_MySimpleDeEncry($xxx))) )
            Case $Button4 ;starttftp
                _StartTFTP()
            Case $Button5
                _StopTFTP()
            Case $Button6 ;backuppath
                _SetBackupPath()
            
        EndSwitch
EndFunc
Func _InitTreeView($handTree,$path) ;初始化
    Local $i,$SectionName,$SecValue,$j,$item
    _GUICtrlTreeView_DeleteAll($handTree)
    _GUICtrlTreeView_BeginUpdate($handTree)
    $SectionName = IniReadSectionNames($path) ;所以字段名
    If @error Then
        MsgBox(4096, "", "错误, 读取INI文件失败.")
        exit
    Else
        For $i = 1 To $SectionName[0]
            ;$k1 = $k1+1
            ;If $k1 telnet开始
    TCPStartup()
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    $socket = TCPConnect($swip, 23) ;固定23,因为用的是telnet
    If $socket = -1 Then
        MsgBox(0,"Connect Error","连接交换机ip地址出错")
        Return
    EndIf
    Sleep($sleep)
    ;$recvstr = TCPRecv($socket,4096) ;返回telnet接受的数据
    ;;;;================================================
    Switch $swmode
        Case "Cisco"
            $iniresult=IniReadSection($path,$swmode) ;从ini读取交换机型号的模板
                For $i=1 To $iniresult[0][0] ;[0][0]存放的是个数 关键字=$var[$i][0] 值=$var[$i][1]
                    Sleep($sleep)
                    $recvstr = _ReadEndLine(TCPRecv($socket,4096))
                    ;MsgBox(0,"",$recvstr)
                    ;MsgBox(0,$iniresult[$i][0],$iniresult[$i][1])
                    Sleep($sleep)
                    If StringRegExp($recvstr,"(?i)" & $iniresult[$i][1],0) Then
                        Switch $iniresult[$i][0] ;左边的命令,当user pass 等固定的字符串时会执行别的命令 user pass tftpip backname
                            Case "user"
                                TCPSend($socket, $swuser & @CRLF) ;发送用户名
                                Sleep($sleep)
                            Case "pass"                    
                                TCPSend($socket, $swpass & @CRLF) ;发送密码
                                Sleep($sleep)
                            Case "tftpip"                    
                                TCPSend($socket, $tftp & @CRLF) ;发送tftp ip address
                                Sleep($sleep)                        
                            Case "backname"                    
                                TCPSend($socket, $swip & @HOUR & @MIN & @SEC & ".txt" & @CRLF) ;发送 文件名 @YEAR & @MON & @MDAY
                                Sleep($sleep)                           
                            Case Else ;其它
                                TCPSend($socket, $iniresult[$i][0] & @CRLF)
                                Sleep($sleep)
                        EndSwitch
                    EndIf
                Next
        Case "Huawei"
            $iniresult=IniReadSection($path,$swmode) ;从ini读取交换机型号的模板
                For $i=1 To $iniresult[0][0]   
                    Sleep($sleep)
                    $recvstr = _ReadEndLine(TCPRecv($socket,4096))
                    ;MsgBox(0,"",$recvstr)
                    ;MsgBox(0,$iniresult[$i][0],$iniresult[$i][1])
                    Sleep($sleep)
                    If StringRegExp($recvstr,"(?i)" & $iniresult[$i][1],0) Then ;右边可以正则表达式
                        Switch $iniresult[$i][0] ;左边的关键值
                            Case "user"
                                TCPSend($socket, $swuser & @CRLF) ;发送用户名
                                Sleep($sleep)
                            Case "pass"                    
                                TCPSend($socket, $swpass & @CRLF) ;发送密码
                                Sleep($sleep)
                            Case Else ;其它
                                If StringRegExp($iniresult[$i][0],"(?i)tftp",0) Then ;即是最后一条 tftp上传命令
                                    TCPSend($socket,StringRegExpReplace(StringRegExpReplace($iniresult[$i][0],"serviceip",$tftp),"desfile",$swip & @HOUR & @MIN & @SEC & ".txt") & @CRLF  )
                                Else
                                    TCPSend($socket, $iniresult[$i][0] & @CRLF)
                                    Sleep($sleep)
                                EndIf
                        EndSwitch
                    EndIf
                Next
        Case "H3C"
            $iniresult=IniReadSection($path,$swmode) ;从ini读取交换机型号的模板
            For $i=1 To $iniresult[0][0]   
                Sleep($sleep)
                $recvstr = _ReadEndLine(TCPRecv($socket,4096))   
                Sleep($sleep)
                If StringRegExp($recvstr,"(?i)" & $iniresult[$i][1],0) Then
                        Switch $iniresult[$i][0] ;左边的关键值
                            Case "user"
                                TCPSend($socket, $swuser & @CRLF) ;发送用户名
                                Sleep($sleep)
                            Case "pass"                    
                                TCPSend($socket, $swpass & @CRLF) ;发送密码
                                Sleep($sleep)
                            Case "crlf"   
                                TCPSend($socket, @CRLF) ;发送回车
                                Sleep($sleep)                                
                            Case Else ;其它
                                If StringRegExp($iniresult[$i][0],"(?i)tftp",0) Then ;即是最后一条 tftp上传命令
                                    TCPSend($socket,StringRegExpReplace(StringRegExpReplace($iniresult[$i][0],"serviceip",$tftp),"desfile",$swip & @HOUR & @MIN & @SEC & ".txt") & @CRLF  )
                                Else
                                    TCPSend($socket, $iniresult[$i][0] & @CRLF)
                                    Sleep($sleep)
                                EndIf
                        EndSwitch                    
                EndIf
            Next
               
    EndSwitch            
   
   
    ;检查是否完成 开始只备份思科的,后来加入华为,所以这里需要改。比如华为交换机那里这里完成的标志是[\w]这种格式。
    $check = 50
    While $check
        $recvstr = _ReadEndLine(TCPRecv($socket,4096))
        If StringRegExp($recvstr,"(?i)\w#",0) Then
            ExitLoop
        EndIf
        Sleep($sleep)
        $check = $check -1
    WEnd
    ;MsgBox(0,"",$check)
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;关闭连接
    TCPCloseSocket($Socket)
    TCPShutdown()
    GUICtrlSetState($Button1,$GUI_ENABLE)
EndFunc
Func _ReadEndLine($str) ;返回从tcprecv接收到的数据最后一行字符串
    Local $resarr
    $resarr = StringSplit($str,@CRLF)
    Return $resarr[$resarr[0]]
EndFunc
;Func _LoadINI($path) ;读取一些tftp地址 用户与密码
; $tftp = IniRead($path,"main","tftp","")
; $user = IniRead($path,"main","user","")
; $pass = IniRead($path,"main","pass","")
; If $tftp ="" Or $user="" Or $pass="" Then
; MsgBox(0,"Error","请配置tftp,user,pass")
; Exit
; EndIf
;EndFunc
Func _ExistsTFTP()
    Local $process = "TFTPServer.exe"
    Local $PID = ProcessExists($process)
    If Not $PID Then
        _StartTFTP()
    EndIf
EndFunc
Func _StartTFTP()
    Local $path = @ScriptDir & "\TFTPServer\TFTPServer.exe"
    ;Local $check = 10
    Local $process = "TFTPServer.exe"
    Local $PID; = ProcessExists($process)
    ;Local $winname
    ;GUICtrlSetState($Button4,$GUI_DISABLE)
    If Not FileExists($path) Then
        MsgBox(0,"Error","请检查TFTPServer文件夹下是否有TFTPServer.exe文件")
        Return
    EndIf
    Run($path)
    Sleep(500)
    ;While $check
    ; $PID = ProcessExists($process)
    ; Sleep(200)
    ; If $PID Then
    ; $winname=_WinGetByPID($PID)
    ; Sleep(200)
    ; WinSetState($winname, "", @SW_HIDE)
    ; ExitLoop
    ; EndIf
    ; $check = $check -1
    ;WEnd
    ;MsgBox(0,"","dd")
    ;GUICtrlSetState($Button4,$GUI_ENABLE)
EndFunc
Func _StopTFTP()
    Local $process = "TFTPServer.exe"
    Local $PID = ProcessExists($process)
    If $PID Then
        ProcessClose($PID)
    EndIf
EndFunc
Func _SetBackupPath() ;备份路径
    Local $regpath = "HKEY_CURRENT_USER\Software\Cisco Systems Inc.\Cisco TFTP Server\1.1\Options"
    ;Local $process = "TFTPServer.exe"
    ;Local $PID = ProcessExists($process)
    ;If $PID Then
    ; ProcessClose($PID)
    ;EndIf
    Local $path = FileSelectFolder("选择交换机配置保存文件夹.", "", 1)
    If $path  "" Then
        _StopTFTP()
        RegWrite($regpath,"TFTPRootDirectory","REG_SZ",$path) ;TFTPRootDirectory
        _StartTFTP()
    EndIf
EndFunc
Func _WinGetByPID($iPID, $nArray = 1);0 will return 1 base array; leaving it 1 will return the first visible window it finds
    If IsString($iPID) Then $iPID = ProcessExists($iPID)
    Local $aWList = WinList(), $sHold
    For $iCC = 1 To $aWList[0][0]
        If WinGetProcess($aWList[$iCC][1]) = $iPID And _
            BitAND(WinGetState($aWList[$iCC][1]), 2) Then
            If $nArray Then Return $aWList[$iCC][0]
            $sHold &= $aWList[$iCC][0] & Chr(1)
        EndIf
    Next
    If $sHold Then Return StringSplit(StringTrimRight($sHold, 1), Chr(1))
    Return SetError(1, 0, 0)
EndFunc
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndTreeview,$h,$sname,$saddr ,$mche
    $hWndTreeview = $hTreeView
    If Not IsHWnd($hTreeView) Then $hWndTreeview = GUICtrlGetHandle($hTreeView)
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
        Case $hWndTreeview
            Switch $iCode
                Case $NM_CLICK ; The user has clicked the left mouse button within the control
                    
                    Return 0 ; zero to allow the default processing
                Case $NM_DBLCLK ; The user has double-clicked the left mouse button within the control
                    For $h =1 To $ArrItem[0]
                        If _GUICtrlTreeView_GetSelected($hTreeView, $ArrItem[$h]) Then
                            $saddr = _GUICtrlTreeView_GetText($hTreeView, _GUICtrlTreeView_GetParentHandle($hTreeView,  $ArrItem[$h]));从子节点读取到根节点
                            $sname = _GUICtrlTreeView_GetText($hTreeView, $ArrItem[$h])
                            ;$switchname = $sname
                            _GetINIinfo($cfg,$saddr,$sname)
                        EndIf
                    Next
                    
                    Return 0 ; zero to allow the default processing
                Case $NM_RCLICK ; The user has clicked the right mouse button within the control
                    ;MsgBox(0,"","Rigth")
                    ;$mche = _GUICtrlMenu_TrackPopupMenu($Menu, $hWndTreeview, -1, -1, 1, 1, 2)
                    ;If $mche  0 Then
                    ; If $mche = $menudel Then
                    ; MsgBox(0,"","")
                    ; EndIf
                    ;EndIf
                $mche = _GUICtrlMenu_TrackPopupMenu($hContext, $hWndTreeview, -1, -1, 1, 1, 2)
                If ($mche  0) Then
                    Switch $mche
                        Case $menudel
                            ;
                           
                        Case $menuexit
                            Exit
                    EndSwitch
                EndIf
                    Return 0 ; zero to allow the default processing
                Case $NM_RDBLCLK ; The user has clicked the right mouse button within the control
                    Return 0 ; zero to allow the default processing
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_NOTIFY
Func _MySimpleEncry($string)
    Local $i,$rstr = ""
    Local $arraytemp = _StringToArray($string)
    ;_ArrayDisplay($a)
    For $i=0 To UBound($arraytemp)-1
         ;MsgBox(0,"",$arraytemp[$i])
         ;MsgBox(0,"",chr(Asc($arraytemp[$i])+10) ) ;转换成assci码的值加上10,再转成字符
         $rstr = $rstr & ChrW(Asc($arraytemp[$i])+2)
     Next   
     Return $rstr
EndFunc
Func _MySimpleDeEncry($string)
    Local $i,$rstr = ""
    Local $arraytemp = _StringToArray($string)
    For $i=0 To UBound($arraytemp)-1
        $rstr = $rstr & ChrW(Asc($arraytemp[$i])-2)
    Next   
    ;MsgBox(0,"",$rstr)
    Return $rstr
EndFunc
Func _StringToArray($str)
        Local $array[1],$c     ;$c为转换的中间字符
        $length=StringLen($str)        
        $c=StringMid($str,1,1)
        $array[0]=$c
        If $length>1 Then
                For $i=2 To $length
                        $c=StringMid($str,$i,1)
                        _ArrayAdd($array,$c)
                Next
        EndIf
        Return $array
EndFunc
Func _Base64Decode($Data)
        Local $Opcode = "0xC81000005356578365F800E8500000003EFFFFFF3F3435363738393A3B3C3DFFFFFF00FFFFFF000102030405060708090A0B0C0D0E0F10111213141516171819FFFFFFFFFFFF1A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132338F45F08B7D0C8B5D0831D2E9910000008365FC00837DFC047D548A034384C0750383EA033C3D75094A803B3D75014AB00084C0751A837DFC047D0D8B75FCC64435F400FF45FCEBED6A018F45F8EB1F3C2B72193C7A77150FB6F083EE2B0375F08A068B75FC884435F4FF45FCEBA68D75F4668B06C0E002C0EC0408E08807668B4601C0E004C0EC0208E08847018A4602C0E00624C00A46038847028D7F038D5203837DF8000F8465FFFFFF89D05F5E5BC9C21000"
        
        Local $CodeBuffer = DllStructCreate("byte[" & BinaryLen($Opcode) & "]")
        DllStructSetData($CodeBuffer, 1, $Opcode)
        Local $Ouput = DllStructCreate("byte[" & BinaryLen($Data) & "]")
        Local $Ret = DllCall("user32.dll", "int", "CallWindowProc", "ptr", DllStructGetPtr($CodeBuffer), _
                                                                                                        "str", $Data, _
                                                                                                        "ptr", DllStructGetPtr($Ouput), _
                                                                                                        "int", 0, _
                                                                                                        "int", 0)
        Return BinaryMid(DllStructGetData($Ouput, 1), 1, $Ret[0])
EndFunc
Func _Base64Encode($Data, $LineBreak = 76)
        Local $Opcode = "0x5589E5FF7514535657E8410000004142434445464748494A4B4C4D4E4F505152535455565758595A6162636465666768696A6B6C6D6E6F707172737475767778797A303132333435363738392B2F005A8B5D088B7D108B4D0CE98F0000000FB633C1EE0201D68A06880731C083F901760C0FB6430125F0000000C1E8040FB63383E603C1E60409C601D68A0688470183F90176210FB6430225C0000000C1E8060FB6730183E60FC1E60209C601D68A06884702EB04C647023D83F90276100FB6730283E63F01D68A06884703EB04C647033D8D5B038D7F0483E903836DFC04750C8B45148945FC66B80D0A66AB85C90F8F69FFFFFFC607005F5E5BC9C21000"
        Local $CodeBuffer = DllStructCreate("byte[" & BinaryLen($Opcode) & "]")
        DllStructSetData($CodeBuffer, 1, $Opcode)
        $Data = Binary($Data)
        Local $Input = DllStructCreate("byte[" & BinaryLen($Data) & "]")
        DllStructSetData($Input, 1, $Data)
        $LineBreak = Floor($LineBreak / 4) * 4
        Local $OputputSize = Ceiling(BinaryLen($Data) * 4 / 3)
        $OputputSize = $OputputSize + Ceiling($OputputSize / $LineBreak) * 2 + 4
        Local $Ouput = DllStructCreate("char[" & $OputputSize & "]")
        DllCall("user32.dll", "none", "CallWindowProc", "ptr", DllStructGetPtr($CodeBuffer), _
                                                                                        "ptr", DllStructGetPtr($Input), _
                                                                                        "int", BinaryLen($Data), _
                                                                                        "ptr", DllStructGetPtr($Ouput), _
                                                                                        "uint", $LineBreak)
        Return DllStructGetData($Ouput, 1)
EndFunc

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-69956-1-1.html 上篇帖子: Cisco 3550-EMI 交 换 机 配 置 教 程 下篇帖子: CISCO常见问题及解答
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表