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.