首先,将窗体的FormBorderStyle设置为none,WindowState设为Maximized 让窗体占据整个页面。
form窗体代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Net;
using System.IO;
using System.Security.Cryptography;
using System.Drawing.Drawing2D;
using System.Management;
using System.Management.Instrumentation;namespace UI
{public partial class Form1 : Form{Hook h = new Hook();public Form1(){InitializeComponent();}string password;private void Form1_Load(object sender, EventArgs e){FullScreen();Locations();txt_pwd.Focus();lb_name.Text = this.HostName;showhead();h.Hook_Start();tm_kill.Start();WritePwd();}public void showhead()//头像显示{if (File.Exists(@"C:\Windows\System32\Face.bmp")){pic_head.ImageLocation = @"C:\Windows\System32\Face.bmp";}else{pic_head.Image = UI.Properties.Resources.WIN8Head;}}string pwd2 = null;protected override bool ProcessKeyEventArgs(ref Message m)//禁用任务管理器{KillTaskmgr();return base.ProcessKeyEventArgs(ref m);}protected override void WndProc(ref Message m)//禁用鼠标右键{if (m.Msg == 0x205){}base.WndProc(ref m);}public void WritePwd()//写配置文件{if (File.Exists(@"C:\Windows\System32\lock.pwd")){password = File.ReadAllText(@"C:\Windows\System32\lock.pwd", Encoding.Default);if (File.Exists(@"C:\Windows\System32\unlock.ID")){pwd2 = File.ReadAllText(@"C:\Windows\System32\unlock.ID", Encoding.Default);}elsepwd2 = null;}else{password = MD5(UI.frmLogin.PWD);}}public string HostName//本机名{get{// string hostname = Dns.GetHostName();string hostname = Convert.ToString( UI.frmLogin.CardID);return hostname;}}public void Locations()//控件相对于屏幕位置{Rectangle ScreenArea = System.Windows.Forms.Screen.GetBounds(this);int width = ScreenArea.Width; //屏幕宽度 int height = ScreenArea.Height;pl_login.Location = new Point((width - 480) / 2, (height - 200) / 2);bt_about1.Location = new Point(bt_about1.Location.X, height - 50);pl_about.Location = new Point(pl_about.Location.X, height - 140);}private void KillTaskmgr()//禁用任务管理器{Process[] sum = Process.GetProcesses();foreach (Process p in sum){if (p.ProcessName == "taskmgr" || p.ProcessName == "cmd")try{p.Kill();}catch{;}}}private void FullScreen()//全屏{this.SetVisibleCore(true);}//根据自己的需要添加需要实现的功能private void bt_login_Click(object sender, EventArgs e)//登录解锁{if (pwd2 != null){if (txt_pwd.Text.Trim() == Convert.ToString(UnlockID(), 16).ToUpper()){pwd2 = null;MessageBox.Show("PIN码解锁成功!密码重置为123", "提示");return;}}if (txt_pwd.Text != ""){if (MD5(txt_pwd.Text) == password){pwd2 = null;h.Hook_Clear();// Application.Exit(); //关闭程序bool status = false;bool flag = new Facade.ConsumerFacade().ModifyLineLog(UI.frmLogin.CardID, status);//设置挂机状态this.Hide();}else{pl_info.Visible = true;tm_info.Start();txt_pwd.Text = "";}}}private void timer1_Tick(object sender, EventArgs e)//开始置顶{KillTaskmgr();}public static string MD5(string word)//MD5加密{MD5 md5 = new MD5CryptoServiceProvider();byte[] result = md5.ComputeHash(System.Text.Encoding.Default.GetBytes(word));return System.Text.Encoding.Default.GetString(result);}#region//鼠标点击空白部分设置消失private void Form1_Click(object sender, EventArgs e){this.AcceptButton = bt_login;}#endregionprivate void tm_info_Tick(object sender, EventArgs e)//提示信息消失{pl_info.Visible = false;tm_info.Stop();}private void bt_about1_Click(object sender, EventArgs e){if (pl_about.Visible == false)pl_about.Visible = true;elsepl_about.Visible = false;}public string GetMoAddress()// 获取网卡硬件地址 {return null;}private void bt_about_Click(object sender, EventArgs e)//关于{MessageBox.Show("软件名称:天天见网咖收费系统\n\n作者:杜小鱼\n\n版本:1.0\n\n锁屏密码与登录密码一致\n\n有BUG请发BUG出现的详细情况至\n邮箱18731680163@163.com以便改进", "关于", MessageBoxButtons.OK);}public long UnlockID()//返回PIN码{long a = 123;return a;}private void bt_shutdown_Click(object sender, EventArgs e)//关机{DialogResult dr = MessageBox.Show("确定要关机?", "提示", MessageBoxButtons.OKCancel);if (dr == DialogResult.OK)ApiCalls.ShutDown();}}
}
新建一个HOOK的类,设置钩子
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Reflection;
using System.Diagnostics;namespace UI
{public class Hook{public delegate int HookProc(int nCode, int wParam, IntPtr lParam);static int hHook = 0;public const int WH_KEYBOARD_LL = 13;//LowLevel键盘截获,如果是WH_KEYBOARD=2,并不能对系统键盘截取,Acrobat Reader会在你截取之前获得键盘。 HookProc KeyBoardHookProcedure;//键盘Hook结构函数 [StructLayout(LayoutKind.Sequential)]public class KeyBoardHookStruct{public int vkCode;public int scanCode;public int flags;public int time;public int dwExtraInfo;}#region DllImport//设置钩子 [DllImport("user32.dll")]public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]//抽掉钩子 public static extern bool UnhookWindowsHookEx(int idHook);[DllImport("user32.dll")]//调用下一个钩子 public static extern int CallNextHookEx(int idHook, int nCode, int wParam, IntPtr lParam);[DllImport("kernel32.dll")]public static extern int GetCurrentThreadId();[DllImport("kernel32.dll")]public static extern IntPtr GetModuleHandle(string name);#endregion#region 自定义事件public void Hook_Start(){// 安装键盘钩子 if (hHook == 0){KeyBoardHookProcedure = new HookProc(KeyBoardHookProc);hHook = SetWindowsHookEx(WH_KEYBOARD_LL,KeyBoardHookProcedure,GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);//如果设置钩子失败. if (hHook == 0){Hook_Clear();throw new Exception();}else{}}}//取消钩子事件 public void Hook_Clear(){bool retKeyboard = true;if (hHook != 0){retKeyboard = UnhookWindowsHookEx(hHook);hHook = 0;}//如果去掉钩子失败. if (!retKeyboard) throw new Exception("UnhookWindowsHookEx failed.");}//这里可以添加自己想要的信息处理 public static int KeyBoardHookProc(int nCode, int wParam, IntPtr lParam){if (nCode >= 0){KeyBoardHookStruct kbh = (KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyBoardHookStruct));int v = kbh.vkCode;switch (v){case 27://ESC键case 91://左徽标键case 92://右徽标键case 93://鼠标右键快捷键case 164://case 9://TAB键case 10://Shift键case 17://Ctrl键case 18://Alt键case 162://case 110://.键case 46://Delete键case 115://F4键case 241://F1键return 1;}}return CallNextHookEx(hHook, nCode, wParam, lParam);}#endregion}
}
为了美观,窗体用到了一些控件,需要加一些背景图片放在Resoures文件夹中,当点击左下角的Win图片时会显示“关机”“关于”否则是处于隐藏状态。