Implementação pura de Gancho C#
Para implementar ganchos de sistema, é na verdade muito simples, basta chamar as três APIs do Win32. SetWindowsHookEx é usado para configurar ganchos. (Configure um cartão para verificar as informações que precisa)
O CallNextHookEx é usado para passar ganchos (mensagens são importantes, então de onde elas vêm, devem voltar para onde você quer bloqueá-las)
DesconecteWindowsHookEx Desinstale ganchos (desinstalar é muito importante, configurações travadas demais causam congestionamento)
O artigo "HOW TO: Setting Window Hooks in Visual C# .NET" descreve a seguinte forma: Ganchos globais não são suportados no framework .NET Você não pode implementar ganchos globais no framework Microsoft .NET. Para instalar um hook global, o hook deve ter uma exportação nativa de biblioteca de link dinâmico (DLL) para que possa ser inserido em outro processo que precise ser chamado para uma função válida e consistente. Isso requer uma exportação de DLL, que não é suportada pelo framework .NET. O código gerenciado não tem o conceito de ter um valor uniforme para ponteiros de função, porque essas funções são proxies construídos dinamicamente. Encontrei muito código na Internet, e a maioria deles contém uma DLL em C++ para identificar a DLL que contém a sub-rotina referida por lpfn, o que parece validar essa afirmação.
Mas, na realidade, isso não é verdade, e o gancho global pode ser implementado usando o seguinte código: IntPtr pInstance = Marshal.GetHINSTANCE( Assembly.GetExecutingAssembly(). ManifestModule ); Win32API.SetWindowsHookEx( WH_MOUSE_LL,m_MouseHookProcedure, pInstance, 0 ); Nota: A propriedade ManifestModule é uma adição nova no .Net Framework 2.0, então quando você ainda usa . No Net Framework 1.x, você pode usar o método GetModules para obter todos os módulos do conjunto atual e então usar um deles como parâmetro para o método GetHINSTAN para obter o ponteiro de handle apropriado.
|