Interface de API do win32 Ruby

Eu preciso acessar algumas funções da biblioteca win32 em ruby. Eu encontrei informações extremamente esparsas sobre a classe Win32API online, então estou perguntando aqui.

Eu sei que você pode fazer algo assim:

function = Win32API.new('user32','MessageBox',['L', 'P', 'P', 'L'],'I')

Mas parece que não consigo chamar essa função com as ligações atuais do win32:

http://msdn.microsoft.com/pt-br/library/bb762108%28VS.85%29.aspx

O problema está no seu protótipo:

UINT_PTR SHAppBarMessage(      
    DWORD dwMessage,
    PAPPBARDATA pData
);

Eu serei capaz de usar o win32 ruby ​​bindings para pegar o tipo de retorno e o primeiro parâmetro, no entanto, o segundo espera uma estrutura. A definição da estrutura é a seguinte:

typedef struct _AppBarData {
    DWORD cbSize;
    HWND hWnd;
    UINT uCallbackMessage;
    UINT uEdge;
    RECT rc;
    LPARAM lParam;
} APPBARDATA, *PAPPBARDATA;

Eu tentei definir esse método api usando os dois:

api = Win32API.new('shell32','SHAppBarMessage',['L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L'],'I') 

e

api = Win32API.new('shell32','SHAppBarMessage',['L', 'LLLLLLLL'],'I')

mas o primeiro segfaults durante o método "call" e o segundo falha em rodar devido à quantidade incorreta de argumentos especificados na chamada do método "call". Existe alguma maneira de expor esta função api sem recorrer à criação de um módulo externo em C ++?

Obrigado.

questionAnswers(3)

yourAnswerToTheQuestion