Jump to content
joelson0007

Change Mac v1.0

Recommended Posts

Fala pessoal, fiz este mac change, mas não garanto que funciona em todas as placas de rede!! :blush:

 

usem o ipconfig /all para ver a modificação no endereço físico

 

ChangeMac_v1.0.png

 

 

;============================================
;    Desenvolvido por Joelson0007
;    compartilhado com forum autoitbrasil.com
;============================================

#RequireAdmin
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

if (RegRead("HKEY_CURRENT_USER\Software\Change_mac_1.0", "Original_mac") ="") Then
RegWrite("HKEY_CURRENT_USER\Software\Change_mac_1.0", "Original_mac", "REG_SZ", _GetMac())
EndIf

Global $sMacOrigin=RegRead("HKEY_CURRENT_USER\Software\Change_mac_1.0", "Original_mac")
Global $progressbar1
;================================= guia
#Region ### START Koda GUI section ### Form=
$guia = GUICreate("Change Mac 1.0", 284, 218, -1, -1)
$Group1 = GUICtrlCreateGroup("   Change Mac 1.0  ", 8, 8, 265, 175)
$Label1 = GUICtrlCreateLabel("Mac Original", 27, 40, 82, 22)
GUICtrlSetFont(-1, 11, 400, 0, "Tahoma")
$iMacOriginal = GUICtrlCreateInput("", 112, 38, 137, 26,$ES_READONLY)
GUICtrlSetFont(-1, 11, 400, 0, "Tahoma")
$Label2 = GUICtrlCreateLabel("Mac Atual", 27, 77, 68, 22)
GUICtrlSetFont(-1, 11, 400, 0, "Tahoma")
$iMacAtual = GUICtrlCreateInput("00:06:00:95:8D:83", 112, 75, 137, 26,$ES_READONLY)
GUICtrlSetFont(-1, 11, 400, 0, "Tahoma")
$Label3 = GUICtrlCreateLabel("Novo Mac", 27, 113, 70, 22)
GUICtrlSetFont(-1, 11, 400, 0, "Tahoma")
$iNovoMac = GUICtrlCreateInput("", 112, 111, 137, 26)
GUICtrlSetFont(-1, 11, 400, 0, "Tahoma")
$bRestaurar = GUICtrlCreateButton("Restaurar", 48, 152, 75, 25)
$bTrocar= GUICtrlCreateButton("Trocar", 136, 152, 75, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$StatusBar1 = _GUICtrlStatusBar_Create($guia)
Dim $StatusBar1_PartsWidth[1] = [-1]
_GUICtrlStatusBar_SetParts($StatusBar1, $StatusBar1_PartsWidth)
_GUICtrlStatusBar_SetText($StatusBar1, @TAB & "Desenvolvido por Joelson0007", 0)
_GUICtrlStatusBar_SetBkColor($StatusBar1, 0xB4B4B4)
update()
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
;==> fim da guia

GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
    Case $GUI_EVENT_CLOSE
        Exit
    Case $bTrocar
        ChangeMac()
    Case $bRestaurar
        Restaurar()
EndSwitch
WEnd

;================================ Update
Func update()
$sMacOrigin=RegRead("HKEY_CURRENT_USER\Software\Change_mac_1.0", "Original_mac")
Local $sMacUlt=RegRead("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0007", "NetworkAddress")
GUICtrlSetData($iMacOriginal,_Mac_formater($sMacOrigin))
GUICtrlSetData($iMacAtual,_Mac_formater($sMacUlt))
EndFunc

;================================ Trocar mac
Func ChangeMac()
ProgressShow()
Sleep(2000)
RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0007", "NetworkAddress", "REG_SZ", StringRegExpReplace(GUICtrlRead($iNovoMac),"\x3A",""))
_LanEnable(0)
Sleep(2000)
_LanEnable(1)
Sleep(2000)
update()
GUICtrlDelete($progressbar1)
EndFunc

;================================ Restaurar Mac Original
Func Restaurar()
ProgressShow()
Sleep(2000)
RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0007", "NetworkAddress", "REG_SZ", $sMacOrigin)
_LanEnable(0)
Sleep(2000)
_LanEnable(1)
Sleep(2000)
update()
GUICtrlDelete($progressbar1)
EndFunc

;================================ Desabilitar/Habilitar conexão local
Func _LanEnable($ativacte = 1)
If $ativacte Then
$cod = 0
Else
$cod = 1
EndIf
Local $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2")
Local $colItems = $objWMIService.ExecQuery ("SELECT * FROM Win32_NetworkAdapter Where NetEnabled = '"&$cod&"'")
       If IsObj($colItems) Then
           For $objItem In $colItems
        If $ativacte Then
                       $objItem.Enable
                   Else
                       $objItem.Disable
                EndIf
            Next
            EndIf
        EndFunc


;================================ Fomtar Mac address no input
;modificado por @manimal
Func _Mac_formater($fMac)
  Local $fMac_formted = StringLeft(StringRegExpReplace($fMac, "[^0-9A-Z]", ""), 12) ; remove caracteres não permitidos e limita tamanho em 12 caract
  Return StringRegExpReplace($fMac_formted, "((?<=\w{2})\w\w?)", ":$1") ; formata para padrão MAC e devolve
EndFunc

;================================ Checar mundança no input
Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
   Local $hWndFrom, $iIDFrom, $iCode
   $hWndFrom = $ilParam
   $iIDFrom = _WinAPI_LoWord($iwParam)
   $iCode = _WinAPI_HiWord($iwParam)
   Switch $hWndFrom
       Case GUICtrlGetHandle($iNovoMac)
           Switch $iCode
            Case $EN_CHANGE
                Sleep(500)
                  GUICtrlSetData($iNovoMac,_Mac_formater(GUICtrlRead($iNovoMac)))
           EndSwitch
   EndSwitch
   Return $GUI_RUNDEFMSG
EndFunc

;================================ Mostrar progressbar
Func ProgressShow()
$progressbar1 = GUICtrlCreateProgress(0, 185, 284, 10,9)
GUICtrlSetColor(-1, 0x800000)
GUICtrlSetBkColor(-1, 0xE6E6E6)
GUICtrlSendMsg($progressbar1, 1034, True, 10)
EndFunc


Func _GetMac()
Local $oWMI = ObjGet( "winmgmts:\\" & @ComputerName & "\root\cimv2" )
     Local $o_mac = $oWMI.ExecQuery( "SELECT Index, Caption, MACAddress, IPAddress, DefaultIPGateway FROM Win32_NetworkAdapterConfiguration Where IPEnabled = True", "WQL", 0x30 )
If IsObj( $o_mac  ) Then
           Local $o_mac_e
           For $o_mac_e In $o_mac
$o_mac_e.MACAddress
              Next
           EndIf
Return  $o_mac_e.MACAddress
EndFunc

 

 

Download

ChangeMac_v1.0.au3

  • Like 3

Share this post


Link to post
Share on other sites

Excelente trabalho!

 

Aqui funcionou redondinho também, valeu!!!

 

Abraços,

 

João Carlos.

Share this post


Link to post
Share on other sites

Não tenho um Mac nem conhecimento sobre o mesmo, mas mac adress é o mesmo que Ip? AutoIt também pode ser programado no S.O Mac? :o

Share this post


Link to post
Share on other sites

O endereço MAC (Media Access Control) é o endereço físico de 48 bits da estação, ou, mais especificamente, da interface de rede. O protocolo é responsável pelo

controle de acesso de cada estação à rede Ethernet. Este endereço é o utilizado na camada 2 (Enlace) do Modelo OSI.

 

Representa-se um endereço MAC escrevendo, exactamente, 12 dígitos hexadecimais agrupados dois a dois – os grupos são separados por dois pontos. Exemplo:

00:00:5E:00:01:03

 

fonte:wikipedia

 

é como se fosse a identidade da placa de rede B)

  • Like 1

Share this post


Link to post
Share on other sites

Não tenho um Mac nem conhecimento sobre o mesmo, mas mac adress é o mesmo que Ip? AutoIt também pode ser programado no S.O Mac? :o

Você recebeu uma excelente explicação de nosso amigo @joelson0007, o que faltou para agradecê-lo?

Saiba que nossos usuários são analisados nos mínimos detalhes, isso conta bastante!

 

Abraços,

 

João Carlos.

Share this post


Link to post
Share on other sites

@joelson0007

 

Muito bom o programa e interessante o conceito.

Ajudou em relação a como desligar e religar a placa de rede. Obrigado.

 

Aproveitando, sugiro um pequena modificação na função _Mac_formater para deixar o programa mais legal, espero que não se importe.

Porque atualmente está permitindo que o usuário digite mais caracteres que a máscara do MAC permite.

 

Código original:

 

Func _Mac_formater($fMac)
  Local $fMac_formted
  $aMac=StringRegExp($fMac,"(\w{2})",3)
  For $i = 0 To UBound($aMac) - 1
     $fMac_formted&=$aMac[$i]&":"
     Next
  Return StringRegExpReplace($fMac_formted,"\x3A$","")
EndFunc

 

Troque por:

 

Func _Mac_formater($fMac)
  Local $fMac_formted = StringLeft(StringRegExpReplace($fMac, "[^0-9A-Z]", ""), 12) ; remove caracteres não permitidos e limita tamanho em 12 caract
  Return StringRegExpReplace($fMac_formted, "((?<=\w{2})\w\w?)", ":$1") ; formata para padrão MAC e devolve
EndFunc

 

 

E para dar o efeito de edição em tempo real, diminua o tempo do Sleep na função WM_COMMAND para 100 ou elimine o Sleep.

Claro que essas mudanças são apenas cosméticas e não afetam o resultado ou operação do seu excelente programa.

 

Ps.: Editei a máscara de formatação para melhor legibilidade.

Edited by Manimal

Share this post


Link to post
Share on other sites

Excelente adição, fica bem melhor mesmo!

 

Abraços,

 

João Carlos.

Share this post


Link to post
Share on other sites

@Manimal, pode modificar a vontade, corrigir, melhorar, fique a vontade...

 

Já fiz a modificação no script original, usando a nova função :lol:

Share this post


Link to post
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


×