Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 18171|Resposta: 0

[Comunicação] Implementação pura de gancho em C#

[Copiar link]
Publicado em 07/02/2019 21:10:23 | | |
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.





Anterior:Delegar em C#
Próximo:Uso de funções hook em habilidades de programação em C# - SetWindowsHookEx
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com