Win32API        Hitskin_logo Hitskin.com

Isto é uma pré-visualização de um tema em Hitskin.com
Instalar o temaVoltar para a ficha do tema

Aldeia RPG
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Win32API

Ir para baixo

Win32API        Empty Win32API

Mensagem por Paulo Soreto Qua Jul 02, 2014 1:53 pm

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:
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)

_________________
Win32API        FwYnoXI
Paulo Soreto
Paulo Soreto
Lenda
Lenda

Mensagens : 1980
Créditos : 367

Ficha do personagem
Nível: 1
Experiência:
Win32API        Left_bar_bleue0/0Win32API        Empty_bar_bleue  (0/0)
Vida:
Win32API        Left_bar_bleue30/30Win32API        Empty_bar_bleue  (30/30)

https://www.aldeiarpg.com/

Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos