Tutorial traduzido do site DreauwLab, acesse o artigo original aqui.
Neste tutorial irei explicar sobre a classe Win32API do ruby.
Esta classe é usada para chamar uma função a partir de uma dll. Então, com isto, você pode facilmente utilizar a API do Windows.
Antes de tudo você precisa importar a classe:
Para chamar uma função de uma dll você precisa saber algumas informações, como tipos de parâmetros e tipo de retorno.
No meu caso, quero chamar a função "Beep" presente em "kernel32.dll". É uma função documentada da API do Windows. Você pode acessar a documentação de toda a API no site "msdn".
Clique [url=msdn.microsoft.com/en-us/library/windows/desktop/ms679277(v=vs.85).aspx]aqui[/url] para a documentação da função "Beep".
Com essas informações você pode criar uma instância da Win32API como esta:
- O primeiro parâmetro é o nome da dll
- O segundo é o nome da função, no caso: "Beep"
- O terceiro é mais complicado, são os tipos de parâmetros, para este você precisa conhecer dois tipos: número e ponteiro.
O número pode ser representado por estes caracteres: N, n, L, l, I, i
O ponteiro: P, p
Particularmente sempre uso "P" e "I"
Aqui, no meu exemplo eu usei "II" porque a função "Beep" recebe dois parâmetros e os dois são números (tipo inteiro).
- O quarto parâmetros é o tipo de retorno da função, é como no terceiro.
"Beep" retorna um valor booleano, mas a Win32API não trabalha com esse valor diretamente, então usamos um número.
E agora, com a função "declarada", você pode chama-la.
Para isso use a função "call" e adicione os parâmetros.
Esse é o código completo:
Irá fazer um beep de frequência correspondente a 750 e durará 350ms.
Outro exemplo, a função "MessageBox". Primeiramente, encontre a documentação (aqui).
Agora o código, declarando a Win32API:
Para usar string, utilize o "P" pois é um ponteiro.
Para chama-la, irei explicar como obter o valor de retorno:
A constante na documentação (MB_YESNOCANCEL) não está definida no ruby. Então você precisa usar diretamente o valor dessa variável. As vezes o valor é escrito na documentação, mas as vezes não. O valor dessa constante é 3. É possível usar várias constantes utilizando o operador "|", por exemplo: MB_ICONASTERISK|MB_YESNOCANCEL|MB_DEFBUTTON1.
O valor dessas constantes é o seguinte: 0x00000003|0x00000040|0x00000000.
O código completo será:
Neste tutorial irei explicar sobre a classe Win32API do ruby.
Esta classe é usada para chamar uma função a partir de uma dll. Então, com isto, você pode facilmente utilizar a API do Windows.
Antes de tudo você precisa importar a classe:
- Código:
require 'Win32API'
Para chamar uma função de uma dll você precisa saber algumas informações, como tipos de parâmetros e tipo de retorno.
No meu caso, quero chamar a função "Beep" presente em "kernel32.dll". É uma função documentada da API do Windows. Você pode acessar a documentação de toda a API no site "msdn".
Clique [url=msdn.microsoft.com/en-us/library/windows/desktop/ms679277(v=vs.85).aspx]aqui[/url] para a documentação da função "Beep".
Com essas informações você pode criar uma instância da Win32API como esta:
- Código:
Win32API.new('kernel32', 'Beep', 'II', 'I')
- O primeiro parâmetro é o nome da dll
- O segundo é o nome da função, no caso: "Beep"
- O terceiro é mais complicado, são os tipos de parâmetros, para este você precisa conhecer dois tipos: número e ponteiro.
O número pode ser representado por estes caracteres: N, n, L, l, I, i
O ponteiro: P, p
Particularmente sempre uso "P" e "I"
Aqui, no meu exemplo eu usei "II" porque a função "Beep" recebe dois parâmetros e os dois são números (tipo inteiro).
- O quarto parâmetros é o tipo de retorno da função, é como no terceiro.
"Beep" retorna um valor booleano, mas a Win32API não trabalha com esse valor diretamente, então usamos um número.
E agora, com a função "declarada", você pode chama-la.
Para isso use a função "call" e adicione os parâmetros.
Esse é o código completo:
- Código:
require 'Win32API'
beep = Win32API.new('kernel32', 'Beep', 'II', 'I')
beep.call(750, 300)
Irá fazer um beep de frequência correspondente a 750 e durará 350ms.
Outro exemplo, a função "MessageBox". Primeiramente, encontre a documentação (aqui).
Agora o código, declarando a Win32API:
- Código:
Win32API.new('user32', 'MessageBox', 'IPPI', 'I')
Para usar string, utilize o "P" pois é um ponteiro.
Para chama-la, irei explicar como obter o valor de retorno:
A constante na documentação (MB_YESNOCANCEL) não está definida no ruby. Então você precisa usar diretamente o valor dessa variável. As vezes o valor é escrito na documentação, mas as vezes não. O valor dessa constante é 3. É possível usar várias constantes utilizando o operador "|", por exemplo: MB_ICONASTERISK|MB_YESNOCANCEL|MB_DEFBUTTON1.
O valor dessas constantes é o seguinte: 0x00000003|0x00000040|0x00000000.
O código completo será:
- Código:
require 'Win32API'
message_box = Win32API.new('user32', 'MessageBox', 'IPPI', 'I')
message_box.call(0, "Test", "Title", 0x00000003|0x00000040|0x00000000)