Only YOUng

C#.NET 으로 전역후킹 프로그램 만들때 주의사항..(WH_GETMESSAGE) 본문


C#.NET 으로 전역후킹 프로그램 만들때 주의사항..(WH_GETMESSAGE)

Only Young - 수신 smok95 2008.12.12 00:31

C#으로 전역후킹 프로그램을 구현하시려는 분이 계시면..
WH_GETMESSAGE는 지원이 되지 않는다는 점을 꼭 숙지 하시기 바랍니다.

이걸로 한 3일은 삽질을 했습니다..

아래는 관련 내용입니다.

Dear Alex,

As far as I know to globally hook the unicode characters, we have to hook
the WM_IME_COMPOSITION message, but as explained in this KB article:

How to set a Windows hook in Visual C# .NET;en-us;318804

Except for the WH_KEYBOARD_LL low-level hook and the WH_MOUSE_LL low-level
hook, you cannot implement global hooks in the Microsoft .NET Framework. To
install a global hook, a hook must have a native DLL export to inject
itself in another process that requires a valid, consistent function to
call into. This behavior requires a DLL export. The .NET Framework does not
support DLL exports. Managed code has no concept of a consistent value for
a function pointer because these function pointers are proxies that are
built dynamically.

We can only perform the WH_KEYBOARD_LL and WH_MOUSE_LL low-level hook in
the C# Windows application, the WH_GETMESSAGE hook type is not supported in
the .NET Framework.
So, I think we cannot globally hook the unicode characters in a C# Windows
application. Instead, we can create a separate DLL module, and perform the
WH_GETMESSAGE hook to trap the WM_IME_COMPOSITION message. Once the
WM_IME_COMPOSITION message is trapped, we can call the
ImmGetCompositionString API to retrieve the unicode characters.

For more information about the global hooks and WM_IME_COMPOSITION message,
you can refer to:

Hooks and DLLs


ImmGetCompositionString function

Zhi-Xin Ye
Microsoft Managed Newsgroup Support Team

Delighting our customers is our #1 priority. We welcome your comments and
suggestions about how we can improve the support we provide to you. Please
feel free to let my manager know what you think of the level of service
provided. You can send feedback directly to my manager at:

Get notification to my posts through email? Please refer to

Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
This posting is provided "AS IS" with no warranties, and confers no rights.

댓글쓰기 폼