Como ler o Mac Adress com macro em basic

Como ler com uma macro em basic o mac adress de uma adaptador de rede?
Alguém tém um exemplo um link ou uma pista? Obrigado

essa macro em python faz o que você precisa, testei em um pc Windows com apenas uma placa de rede, não sei o comportamento em pcs com mais de uma placa de rede, ou em outros sistemas operacionais:

import uno
from uuid import getnode

def descobre_mac():
    mac = getnode()
    formated_mac = ':'.join(("%012X" % mac)[i:i+2] for i in range(0, 12, 2))
    return formated_mac


def escreve_mac(*args):
    doc = XSCRIPTCONTEXT.getDocument()
    sheets = doc.Sheets
    minha_planilha = sheets['Planilha1']
    meu_intervalo = minha_planilha['A1']
    meu_intervalo.String = descobre_mac()
    return

veja também:

seção de python

Não conheço nada de Pyton teria que ser Basic mas aquele exemplo rebenta e eu com principiante
não entendo porque?!?!

mrkalvin via Ask LibreOffice <noreply@ask.libreoffice.org> escreveu no dia terça, 4/10/2022 à(s) 14:03:

Na minha versão 7.5.3 o Libre nem abre a possibilidade de criar nada em Pyton!?!?!?

No windows talvez seja possível criando um arquivo .vbs (VBScript).
.
No linux, com um arquivo .sh (Bash).
.
Após criar o script, basta mandar executar usando A função Shell () no BasicIDE.
.
Infelizmente, sei como fazer usando o terminal, mas ainda não sei criar um script onde consiga obter e retornar a informação.

Filipe , Tive uma pista que corre no VB mas aqui a aplicação rebenta:
Para macadress:

Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Private Declare Function GetAdaptersInfo Lib "iphlpapi" (lpAdapterInfo As Any, lpSize As Long) As Long
Public Function GetMacAddress() As String
    Const OFFSET_LENGTH As Long = 400

    Dim lSize           As Long

    Dim baBuffer()      As Byte

    Dim lIdx            As Long

    Dim sRetVal         As String

   

    Call GetAdaptersInfo(ByVal 0, lSize)

    If lSize <> 0 Then

        ReDim baBuffer(0 To lSize - 1) As Byte

        Call GetAdaptersInfo(baBuffer(0), lSize)

        Call CopyMemory(lSize, baBuffer(OFFSET_LENGTH), 4)

        For lIdx = OFFSET_LENGTH + 4 To OFFSET_LENGTH + 4 + lSize - 1

            sRetVal = IIf(LenB(sRetVal) <> 0, sRetVal & ":", vbNullString) & Right$("0" & Hex$(baBuffer(lIdx)), 2)

        Next

    End If

    GetMacAddress = sRetVal

End Function

Alguma ideia. Estoura parece problema de memória!?

Isso que você esta precisando fazer não é possível usando macros em basic!

Para usar macros em python:

Se estiver usando linux ubuntu precisa instalar esse pacote:
sudo apt-get install libreoffice-script-provider-python -y

No windows já vem tudo instalado. Libreoffice executa macros em python sim. E python é muito mais poderoso que vba, pois permite instalar módulos externos e manipular o sistema com facilidade.

Para testar suas macros em python no seu pc vc precisa criar a pasta dos scripts python.

Primeiro vc precisa descobrir qual o caminho do usuario do libreoffice. Essa janela exibe o caminho do seu usuário do libreoffice:
Menu Ferramentas > Opções > Caminhos

Normalmente no windows acho que é:
C:\Users\SEU_USUARIO\AppData\Roaming\LibreOffice\4\user

Feito isso crie uma pasta Scripts e dentro dela uma pasta python assim:
C:\Users\SEU_USUARIO\AppData\Roaming\LibreOffice\4\user\Scripts\python


Pronto é aí que voce vai escrever seus scripts python. Tudo que vc escrever aqui vai aparecer em ‘Minhas macros’

Vc pode criar um atalho de teclado para executar sua macro, enquanto vc estiver escrevendo e testando seu código.

Dica: quando for criar uma função em python que será executada diretamente por um botão ou evento do libreoffice precisa adicionar: *args
exemplo, vamos ter um botão que chama a função ‘escreve_texto’, essa função precisa do *args, as outras funções acessórias não precisam:

def cria_texto(): #aqui não precisa do *args
    return 'Olá mundo'

def escreve_texto(*args): #aqui precisa do *args
    meu_texto = cria_texto()
    print(meu_texto)

veja aqui os tutoriais do Mauricio Baeza sobre macros em python:
My Files


Em um segundo momento, quando já aprendeu como usar os scripts python. Também é possível embutir as macros em python no documento do libreoffice, mas vai precisar instalar a extensão
apso.oxt


Para instalar módulos python externos vai precisar da extensão ZAZPip_v0.10.2.oxt, com ela consegue instalar todos os modulos python disponiveis no repositorio https://pypi.org/

video tutorial da extensão zazpip:


Ps: para usar macros em python embutidas é um pouco chatinho, você precisa se atentar que precisa editar o script python no editor externo, salvar esse script, fechar esse script. Salvar o documento do libreoffice, fechar o documento do libreoffice, reabrir o documento e executar a macro nova que foi editada anteriormente. Por isso normalmente um crio os scripts na pasta do usuário e vou fazendo os testes, so vou embutir esse script no documento depois que já está numa versão quase final onde não preciso fazer tantos testes.

1 Like