Aldeia RPG

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

Suporte no desenvolvimento de jogos


    Win32API

    Paulo Soreto
    Paulo Soreto
    Lenda
    Lenda

    Mensagens : 1973
    Créditos : 366

    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)

    Win32API        Empty Win32API

    Mensagem por Paulo Soreto Qua Jul 02, 2014 4: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

      Data/hora atual: Dom Abr 11, 2021 12:44 am