目前遇到一个项目,要屏蔽截屏功能,想用钩子函数实现,请问在C#中能够实现钩子函数吗,谢谢,在线等!!!

解决方案 »

  1.   

    可以,参看
    http://www.codeproject.com/csharp/globalsystemhook.asp
      

  2.   

    or
    http://www.codeproject.com/info/search.asp?cats=3&cats=5&searchkw=hook&Submit1=Search&author=&sd=15+Nov+1999&ed=21+Aug+2006
      

  3.   

    //Import for SetWindowsHookEx function.
    //Use this function to install a hook.
    [DllImport("user32.dll",CharSet=CharSet.Auto,
    CallingConvention=CallingConvention.StdCall)]
    public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, 
    IntPtr hInstance, int threadId);//Import for UnhookWindowsHookEx.
    //Call this function to uninstall the hook.
    [DllImport("user32.dll",CharSet=CharSet.Auto,
    CallingConvention=CallingConvention.StdCall)]
    public static extern bool UnhookWindowsHookEx(int idHook);//Import for CallNextHookEx.
    //Use this function to pass the hook information to next hook procedure in chain.
    [DllImport("user32.dll",CharSet=CharSet.Auto,
    CallingConvention=CallingConvention.StdCall)]
    public static extern int CallNextHookEx(int idHook, int nCode, 
    Int32 wParam, IntPtr lParam);
      

  4.   

    using System;
    using System.Runtime.InteropServices;
    using System.Reflection;
    using System.Threading;
    using System.Windows.Forms;
    using System.ComponentModel;namespace gma.System.Windows
    {
        /// <summary>
        /// This class allows you to tap keyboard and mouse and / or to detect their activity even when an 
        /// application runes in background or does not have any user interface at all. This class raises 
        /// common .NET events with KeyEventArgs and MouseEventArgs so you can easily retrive any information you need.
        /// </summary>
        public class UserActivityHook
        {
            #region Windows structure definitions        /// <summary>
            /// The POINT structure defines the x- and y- coordinates of a point. 
            /// </summary>
            /// <res>
            /// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/rectangl_0tiq.asp
            /// </res>
            [StructLayout(LayoutKind.Sequential)]
            private class POINT
            {
                /// <summary>
                /// Specifies the x-coordinate of the point. 
                /// </summary>
                public int x;
                /// <summary>
                /// Specifies the y-coordinate of the point. 
                /// </summary>
                public int y;
            }        /// <summary>
            /// The MOUSEHOOKSTRUCT structure contains information about a mouse event passed to a WH_MOUSE hook procedure, MouseProc. 
            /// </summary>
            /// <res>
            /// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookstructures/cwpstruct.asp
            /// </res>
            [StructLayout(LayoutKind.Sequential)]
            private class MouseHookStruct
            {
                /// <summary>
                /// Specifies a POINT structure that contains the x- and y-coordinates of the cursor, in screen coordinates. 
                /// </summary>
                public POINT pt;
                /// <summary>
                /// Handle to the window that will receive the mouse message corresponding to the mouse event. 
                /// </summary>
                public int hwnd;
                /// <summary>
                /// Specifies the hit-test value. For a list of hit-test values, see the description of the WM_NCHITTEST message. 
                /// </summary>
                public int wHitTestCode;
                /// <summary>
                /// Specifies extra information associated with the message. 
                /// </summary>
                public int dwExtraInfo;
            }        /// <summary>
            /// The MSLLHOOKSTRUCT structure contains information about a low-level keyboard input event. 
            /// </summary>
            [StructLayout(LayoutKind.Sequential)]
            private class MouseLLHookStruct
            {
                /// <summary>
                /// Specifies a POINT structure that contains the x- and y-coordinates of the cursor, in screen coordinates. 
                /// </summary>
                public POINT pt;
                /// <summary>
                /// If the message is WM_MOUSEWHEEL, the high-order word of this member is the wheel delta. 
                /// The low-order word is reserved. A positive value indicates that the wheel was rotated forward, 
                /// away from the user; a negative value indicates that the wheel was rotated backward, toward the user. 
                /// One wheel click is defined as WHEEL_DELTA, which is 120. 
                ///If the message is WM_XBUTTONDOWN, WM_XBUTTONUP, WM_XBUTTONDBLCLK, WM_NCXBUTTONDOWN, WM_NCXBUTTONUP,
                /// or WM_NCXBUTTONDBLCLK, the high-order word specifies which X button was pressed or released, 
                /// and the low-order word is reserved. This value can be one or more of the following values. Otherwise, mouseData is not used. 
                ///XBUTTON1
                ///The first X button was pressed or released.
                ///XBUTTON2
                ///The second X button was pressed or released.
                /// </summary>
                public int mouseData;
                /// <summary>
                /// Specifies the event-injected flag. An application can use the following value to test the mouse flags. Value Purpose 
                ///LLMHF_INJECTED Test the event-injected flag.  
                ///0
                ///Specifies whether the event was injected. The value is 1 if the event was injected; otherwise, it is 0.
                ///1-15
                ///Reserved.
                /// </summary>
                public int flags;
                /// <summary>
                /// Specifies the time stamp for this message.
                /// </summary>
                public int time;
                /// <summary>
                /// Specifies extra information associated with the message. 
                /// </summary>
                public int dwExtraInfo;
            }
            /// <summary>
            /// The KBDLLHOOKSTRUCT structure contains information about a low-level keyboard input event. 
            /// </summary>
            /// <res>
            /// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookstructures/cwpstruct.asp
            /// </res>
            [StructLayout(LayoutKind.Sequential)]
            private class KeyboardHookStruct
            {
                /// <summary>
                /// Specifies a virtual-key code. The code must be a value in the range 1 to 254. 
                /// </summary>
                public int vkCode;
                /// <summary>
                /// Specifies a hardware scan code for the key. 
                /// </summary>
                public int scanCode;
                /// <summary>
                /// Specifies the extended-key flag, event-injected flag, context code, and transition-state flag.
                /// </summary>
                public int flags;
                /// <summary>
                /// Specifies the time stamp for this message.
                /// </summary>
                public int time;
                /// <summary>
                /// Specifies extra information associated with the message. 
                /// </summary>
                public int dwExtraInfo;
            }
            #endregion
      

  5.   

    给楼主一个链接吧
    http://www.codeproject.com/csharp/globalsystemhook.asp
    这个列子可以实现所有的屏蔽键盘的作用