quarta-feira, 15 de dezembro de 2010

Biblioteca de funções CMD (DOS) para Autoit

Em várias ocasiões, precisei criar ferramentas com o Autoit, que de alguma maneira precisavam executar comandos DOS e retornar o resultado para minha aplicação. Como na época não achei nada que fizesse algo semelhante, resolvi escrever minhas próprias funções, o que resultou na biblioteca CMD.au3, que estou disponibilizando logo abaixo para download.

Para os mais curiosos, estas funções não tem nenhum segredo, não utilizam nenhum COM Object ou DLL, são na verdade uma combinação de funções nativas do Autoit que executam um comando DOS e retornam em buffer o resultado do comando. Para finalizar utilizo várias regras de expressões regulares para conseguir a informação de que preciso.

Se alguém conhecer alguma DLL ou COM Object que trabalhe diretamente com linha de comando e que possa fazer um trabalho semelhante ao desta biblioteca, por favor me avise, pois eu gostaria muito de reescrever esta biblioteca com algum destes recursos, apesar de que a versão atual já ajuda e muito no atendimento de minhas necessidades do dia a dia e quem sabe ela possa te ajudar também.

O que vou precisar?

Para utilizar esta biblioteca, você vai precisar fazer o download dos dois arquivos abaixo, o primeiro é a biblioteca em si e o outro arquivo é um biblioteca com TRIM functions, para eliminar espaços em branco dentro de strings. Esta última não é de autoria minha, você pode conferir o tópico no fórum do Autoit que fala sobre ela: New String TRIM() functions

Download 1: Cmd.au3
Download 2: TRIM Functions

Além disso, a nossa biblioteca depende de algumas UDF´s para que possa ser executada, para estas basta dar um include no seu script, pois são nativas do Autoit:

  • Constants
  • Process
  • Array

Funções Cmd

Todo o código esta comentado e os nomes das funções, em sua maioria, são auto explicativos. De qualquer forma vou explicar um pouco sobre cada uma delas, assim fica mais fácil você entender o que poderá ser feito com cada uma e então decidir se elas atendem ou não suas necessidades.

_Cmd_GetBuffer($s_Command, [$b_GetDataFromClip = False])

O que faz?

Executa um comando DOS e retorna em um array, o buffer com o resultado. São retornados dois índices neste array, um deles com o buffer normal e o outro com o buffer de erros (caso houver)

Parâmetros

  • s_Command - O comando DOS que deseja executar
  • b_GetDataFromClip - [Opcional] Caso seja True, vai utilizar a Área de Transferência do Windows para ler o retorno do comando, ao invés do output Stdout que é o padrão. Você deve utilizar a Área de Transferência (ou Clipboard), caso seu aplicativo esteja travando quando utilizado o output padrão, isso pode acontecer por exemplo, em comandos que acabam solicitando algum input do usuário após o envio do comando, neste caso o Stdout fica na espera e não retorna nada para sua aplicação.

_Cmd_BufferTrim($s_Buffered, [$i_ReturnType = 0])

O que faz?

Remove os espaços em branco dentro de uma string e então retorna, ou uma nova string devidamente formatada ou um array com cada linha do buffer.

Parâmetros

  • s_Buffer - A string com o buffer do comando executado
  • i_ReturnType - [Opcional] Pode ser 0 "zero" para retornar a string inteira ou 1 "um" para retornar um array com as linhas da string.

_Cmd_GetSessionId($s_Usuario, [$s_Server = "localhost"])

O que faz?

Retorna um Integer com o ID de sessão de um usuário em um determinado servidor.

Parâmetros

  • s_Usuario - O nome do usuário do qual deseja descobrir o ID de sessão
  • s_Server - [Opcional] O servidor que se encontra o usuário.

_Cmd_GetUsers([$s_Server = "localhost"])

O que faz?

Retorna um array com uma lista de usuários de um servidor.

Parâmetros

  • s_Server - [Opcional] O servidor que deseja recuperar a lista de usuários.

_Cmd_ProcessExists($s_Process, [$i_Session = 0, [$s_User = "", [$s_RemServer = "", [$s_RemUser = "", [$s_RemPass = ""]]]]])

O que faz?

Retorna um boolean caso um processo informado exista em um determinado servidor. Este servidor pode ser um servidor remoto caso sejam passados os devidos parâmetros.

Parâmetros

  • s_Process - O nome do processo que deseja verificar.
  • i_Session - [Opcional] O número da sessão do usuário que deseja verificar, caso esse valor seja omitido, ele verificará a sessão 0, que costuma ser a sessão principal ou console.
  • s_User - [Opcional] Caso informado, a função irá verificar se determinado usuário esta executando o processo informado.
  • s_RemServer - [Opcional] Informa um servidor remoto para verificar a existência do processo.
  • s_RemUser - [Opcional] Caso seja informado um servidor remoto, você deve passar um usuário existente neste servidor para que o comando possa ser executado.
  • s_RemPass - [Opcional] A senha do usuário no servidor remoto.

_Cmd_ProcessClose($s_Process, [$i_Session = 0, [$b_Force = False, [$s_RemServer = "", [$s_RemUser = "", [$s_RemPass = ""]]]]])

O que faz?

Tenta fechar um processo em um determinado servidor e retorna um boolean com o resultado. Este servidor pode ser um servidor remoto caso sejam passados os devidos parâmetros.

Parâmetros

  • s_Process - O nome do processo que deseja fechar.
  • i_Session - [Opcional] O número da sessão do usuário que deseja verificar, caso esse valor seja omitido, ele verificará a sessão 0, que costuma ser a sessão principal ou console.
  • b_Force - [Opcional] Caso seja True, o processo será fechado a força. O padrão é False, onde ele irá aguardar o fechamento normal da aplicação.
  • s_RemServer - [Opcional] Informa um servidor remoto para fechar o processo.
  • s_RemUser - [Opcional] Caso seja informado um servidor remoto, você deve passar um usuário existente neste servidor para que o comando possa ser executado.
  • s_RemPass - [Opcional] A senha do usuário no servidor remoto.

_Cmd_Logoff($s_Session, [$s_Server = "localhost"])

O que faz?

Efetua o logoff de um usuário (da sessão informada) em um determinado servidor.

Parâmetros

  • s_Session - O nome ou ID da sessão que deseja fazer logoff
  • s_Server - [Opcional] O servidor que se encontra o usuário.

Finalizando

É isso, espero que tenham apreciado, dúvidas e sugestões é só comentar. Caso você sinta necessidade de ter exemplos, basta abrir o fonte da biblioteca e analisar as funções, acredito que é de fácil entendimento, senão é só gritar aí ;).

Um comentário:

  1. Ola boa noite, tentei baixar as biblis mas nao conseguie, gosto de usar o autoit

    ResponderExcluir