基本信息
源码名称:C# 自动锁屏 实例源码
源码大小:0.07M
文件格式:.rar
开发语言:C#
更新时间:2014-12-26
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍
设定规定时间自动锁屏和解屏

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Reflection;
using System.ComponentModel;

namespace GeneralFramework
{
    public class MouseKeyHook
    {
        [StructLayout(LayoutKind.Sequential)]
        private class POINT
        {
            public int x;
            public int y;
        }

        [StructLayout(LayoutKind.Sequential)]
        private class MouseHookStruct
        {
            public POINT pt;
            public int hwnd;
            public int wHitTestCode;
            public int dwExtraInfo;
        }
        [StructLayout(LayoutKind.Sequential)]
        private class MouseLLHookStruct
        {
            public POINT pt;
            public int mouseData;
            public int flags;
            public int time;
            public int dwExtraInfo;
        }
        [StructLayout(LayoutKind.Sequential)]
        private class KeyboardHookStruct
        {
            public int vkCode;
            public int scanCode;
            public int flags;
            public int time;
            public int dwExtraInfo;
        }
        [DllImport("kernel32.dll")]
        static extern int GetCurrentThreadId(); //取得当前线程编号的API 

        [DllImport("user32.dll", CharSet = CharSet.Auto,
           CallingConvention = CallingConvention.StdCall, SetLastError = true)]
        private static extern int SetWindowsHookEx(

            int idHook,

            HookProc lpfn,

            IntPtr hMod,

            int dwThreadId);

        [DllImport("user32.dll", CharSet = CharSet.Auto,
            CallingConvention = CallingConvention.StdCall, SetLastError = true)]
        private static extern int UnhookWindowsHookEx(int idHook);
        [DllImport("user32.dll", CharSet = CharSet.Auto,
             CallingConvention = CallingConvention.StdCall)]
        private static extern int CallNextHookEx(

            int idHook,

            int nCode,

            int wParam,

            IntPtr lParam);
        private delegate int HookProc(int nCode, int wParam, IntPtr lParam);
        [DllImport("user32")]
        private static extern int ToAscii(

            int uVirtKey,

            int uScanCode,

            byte[] lpbKeyState,

            byte[] lpwTransKey,

            int fuState);
        [DllImport("user32")]
        private static extern int GetKeyboardState(byte[] pbKeyState);
        [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        private static extern short GetKeyState(int vKey);
        private const int WH_MOUSE_LL = 14;
        private const int WH_KEYBOARD_LL = 13;
        private const int WH_MOUSE = 7;
        private const int WH_KEYBOARD = 2;
        private const int WM_MOUSEMOVE = 0x200;
        private const int WM_LBUTTONDOWN = 0x201;
        private const int WM_RBUTTONDOWN = 0x204;
        private const int WM_MBUTTONDOWN = 0x207;
        private const int WM_LBUTTONUP = 0x202;
        private const int WM_RBUTTONUP = 0x205;
        private const int WM_MBUTTONUP = 0x208;
        private const int WM_LBUTTONDBLCLK = 0x203;
        private const int WM_RBUTTONDBLCLK = 0x206;
        private const int WM_MBUTTONDBLCLK = 0x209;
        private const int WM_MOUSEWHEEL = 0x020A;
        private const int WM_KEYDOWN = 0x100;
        private const int WM_KEYUP = 0x101;
        private const int WM_SYSKEYDOWN = 0x104;
        private const int WM_SYSKEYUP = 0x105;
        private const byte VK_SHIFT = 0x10;
        private const byte VK_CAPITAL = 0x14;
        private const byte VK_NUMLOCK = 0x90;


        public MouseKeyHook()
        {

            Start();

        }
        public MouseKeyHook(bool InstallMouseHook, bool InstallKeyboardHook)
        {

            Start(InstallMouseHook, InstallKeyboardHook);

        }
        ~MouseKeyHook()
        {

            Stop(true, true, false);

        }
        public event MouseEventHandler OnMouseActivity;
        public event KeyEventHandler KeyDown;
        public event KeyPressEventHandler KeyPress;
        public event KeyEventHandler KeyUp;
        private int hMouseHook = 0;
        private int hKeyboardHook = 0;
        private static HookProc MouseHookProcedure;
        private static HookProc KeyboardHookProcedure;
        public void Start()
        {

            this.Start(true, true);

        }
        public void Start(bool InstallMouseHook, bool InstallKeyboardHook)
        {

            if (hMouseHook == 0 && InstallMouseHook)
            {

                MouseHookProcedure = new HookProc(MouseHookProc);

                hMouseHook = SetWindowsHookEx(

                    WH_MOUSE,

                    MouseHookProcedure,

                    IntPtr.Zero,

                    GetCurrentThreadId());

                if (hMouseHook == 0)
                {

                    int errorCode = Marshal.GetLastWin32Error();

                    Stop(true, false, false);

                    //throw new Win32Exception(errorCode);

                }

            }



            if (hKeyboardHook == 0 && InstallKeyboardHook)
            {

                KeyboardHookProcedure = new HookProc(KeyboardHookProc);

                hKeyboardHook = SetWindowsHookEx(

                    WH_KEYBOARD,

                    KeyboardHookProcedure,

                    IntPtr.Zero,

                     GetCurrentThreadId());

                if (hKeyboardHook == 0)
                {

                    int errorCode = Marshal.GetLastWin32Error();

                    Stop(false, true, false);

                    //throw new Win32Exception(errorCode);

                }

            }

        }



        public void Stop()
        {

            this.Stop(true, true, true);

        }



        public void Stop(bool UninstallMouseHook, bool UninstallKeyboardHook, bool ThrowExceptions)
        {

            if (hMouseHook != 0 && UninstallMouseHook)
            {

                int retMouse = UnhookWindowsHookEx(hMouseHook);

                hMouseHook = 0;

                if (retMouse == 0 && ThrowExceptions)
                {

                    int errorCode = Marshal.GetLastWin32Error();

                    throw new Win32Exception(errorCode);

                }

            }



            if (hKeyboardHook != 0 && UninstallKeyboardHook)
            {

                int retKeyboard = UnhookWindowsHookEx(hKeyboardHook);

                hKeyboardHook = 0;

                if (retKeyboard == 0 && ThrowExceptions)
                {

                    int errorCode = Marshal.GetLastWin32Error();

                    throw new Win32Exception(errorCode);

                }

            }

        }





        private int MouseHookProc(int nCode, int wParam, IntPtr lParam)
        {

            if ((nCode >= 0) && (OnMouseActivity != null))
            {

                MouseLLHookStruct mouseHookStruct = (MouseLLHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseLLHookStruct));



                MouseButtons button = MouseButtons.None;

                short mouseDelta = 0;

                switch (wParam)
                {

                    case WM_LBUTTONDOWN:

                        button = MouseButtons.Left;

                        break;

                    case WM_RBUTTONDOWN:

                        button = MouseButtons.Right;

                        break;

                    case WM_MOUSEWHEEL:

                        mouseDelta = (short)((mouseHookStruct.mouseData >> 16) & 0xffff);

                        break;

                }



                int clickCount = 0;

                if (button != MouseButtons.None)

                    if (wParam == WM_LBUTTONDBLCLK || wParam == WM_RBUTTONDBLCLK) clickCount = 2;

                    else clickCount = 1;



                MouseEventArgs e = new MouseEventArgs(

                                                   button,

                                                   clickCount,

                                                   mouseHookStruct.pt.x,

                                                   mouseHookStruct.pt.y,

                                                   mouseDelta);

                OnMouseActivity(this, e);

            }

            return CallNextHookEx(hMouseHook, nCode, wParam, lParam);

        }



        private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)
        {
            try
            {
                if (nCode < 0)
                {
                    return CallNextHookEx(hMouseHook, nCode, wParam, lParam);
                }

                KeyDown(this, null);

                return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam);
            }
        }
    }
}