在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例桌面应用界面/GUI → C# 自动锁屏 实例源码

C# 自动锁屏 实例源码

桌面应用界面/GUI

下载此实例
  • 开发语言:C#
  • 实例大小:0.07M
  • 下载次数:58
  • 浏览次数:987
  • 发布时间:2014-12-26
  • 实例类别:桌面应用界面/GUI
  • 发 布 人:exg
  • 文件格式:.rar
  • 所需积分: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);
            }
        }
    }
}


标签: 锁屏

实例下载地址

C# 自动锁屏 实例源码

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

第 1 楼 desmondcb 发表于: 2014-12-26 11:51 41
值得学习,GUI控制的好例子

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有1条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警