이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 18171|회답: 0

[통신] 순수 C# 훅 구현

[링크 복사]
게시됨 2019. 2. 7. 오후 9:10:23 | | |
순수 C# 훅 구현

시스템 훅을 구현하려면 사실 매우 간단합니다. 세 개의 Win32 API를 호출하기만 하면 됩니다.
SetWindowsHookEx는 훅을 설정하는 데 사용됩니다. (필요한 정보를 확인하려면 카드를 설정하세요)

CallNextHookEx는 훅을 전달하는 데 사용됩니다(메시지가 중요하니 메시지가 어디서 왔는지는 차단하려는 곳으로 돌아가야 합니다)




UnhookWindowsHookEx Uninstall 훅 (삭제는 매우 중요합니다. 너무 많은 설정이 멈추면 혼잡이 발생합니다)


"HOW: Setting Window Hooks in Visual C# .NET"라는 기사에서는 다음과 같이 설명합니다:
.NET 프레임워크에서는 글로벌 훅이 지원되지 않습니다
Microsoft .NET 프레임워크에서는 글로벌 훅을 구현할 수 없습니다. 글로벌 훅을 설치하려면, 훅은 다른 프로세스에 삽입할 수 있도록 네이티브 동적 링크 라이브러리(DLL)를 내보내야 하며, 이 프로세스는 유효하고 일관된 함수로 호출되어야 합니다. 이 작업은 DLL 내보내기가 필요한데, .NET 프레임워크에서는 이를 지원하지 않습니다. 관리형 코드에는 함수 포인터에 균일한 값을 갖는 개념이 없는데, 이 함수들은 동적으로 구성된 프록시이기 때문입니다.
인터넷에서 많은 코드를 찾았는데, 대부분은 lpfn이 언급한 서브루틴을 포함하는 DLL을 식별하는 C++ DLL을 포함하고 있어서 이 주장을 입증하는 것 같습니다.

하지만 실제로는 그렇지 않으며, 글로벌 훅은 다음 코드로 구현할 수 있습니다:
IntPtr pInstance = Marshal.GetHINSTANCE( Assembly.GetExecutingAssembly(). ManifestModule );
Win32API.SetWindowsHookEx( WH_MOUSE_LL,m_MouseHookProcedure, pInstance, 0 );
참고: ManifestModule 속성은 .Net Framework 2.0에 새로 추가된 것으로, 여전히 .을 사용할 때는 Net Framework 1.x에서는 GetModules 메서드를 사용해 현재 어셈블리의 모든 모듈을 얻고, 그 중 하나를 GetHINSTAN 메서드의 매개변수로 사용해 적절한 핸들 포인터를 얻을 수 있습니다.





이전의:C#의 대표
다음:C# 프로그래밍 기술에서의 훅 함수 활용 - SetWindowsHookEx
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com