昨天幫朋友做一個限制他們家小孩上網時間的軟件,覺得很有意義,花了兩個小時,很簡單,還挺管用,針對只會玩游戲的小孩夠用了!呵呵。
下面是源文件下載地址:
http://files.cnblogs.com/mane/WINUSER.zip
XML文件,(應該加密帳號密碼的,太麻煩,就算了)
<?xml version="1.0" encoding="utf-8" ?> <Users> <!--記錄用戶的帳號,密碼,已經可以使用的時間--> <User name="Admin" pwd="123456" role="管理員" date="2012-07-02">10</User> <User name="User" pwd="123456" role="" date="2012-07-02">10</User> </Users>
操作XML的類 (別見怪,重復利用率是個問題)
using System; using System.Collections.Generic; using System.Text; using System.Xml;//引入XML命名空間 namespace WINUSER { class ControlXML { private string filePath; public ControlXML(string XMLFilePath) { filePath = XMLFilePath; } /// <summary> /// 獲取時間值 /// </summary> /// <param name="userName"></param> /// <param name="userPwd"></param> /// <returns></returns> public string GetValue(string userName, string userPwd) { string value=""; XmlDocument XMLDoc = new XmlDocument(); XMLDoc.Load(filePath);//讀取XML文檔 XmlNode xn = XMLDoc.SelectSingleNode("Users"); XmlNodeList xnl = xn.ChildNodes; foreach (XmlNode xnf in xnl) { if (xnf.Name == "User") { XmlElement sonData = (XmlElement)xnf; if (sonData.GetAttribute("name") == userName && sonData.GetAttribute("pwd") == userPwd) { value = sonData.InnerText; } } } return value; } /// <summary> /// 獲取日期 /// </summary> /// <param name="userName"></param> /// <param name="userPwd"></param> /// <returns></returns> public DateTime GetData(string userName, string userPwd) { DateTime dt=new DateTime (); XmlDocument XMLDoc = new XmlDocument(); XMLDoc.Load(filePath);//讀取XML文檔 XmlNode xn = XMLDoc.SelectSingleNode("Users"); XmlNodeList xnl = xn.ChildNodes; foreach (XmlNode xnf in xnl) { if (xnf.Name == "User") { XmlElement sonData = (XmlElement)xnf; if (sonData.GetAttribute("name") == userName && sonData.GetAttribute("pwd") == userPwd) { dt = Convert.ToDateTime(sonData.GetAttribute("date")); } } } return dt; } /// <summary> /// 獲取用戶規則 /// </summary> /// <param name="userName"></param> /// <param name="userPwd"></param> /// <returns></returns> public string GetRole(string userName, string userPwd) { string role = ""; XmlDocument XMLDoc = new XmlDocument(); XMLDoc.Load(filePath);//讀取XML文檔 XmlNode xn = XMLDoc.SelectSingleNode("Users"); XmlNodeList xnl = xn.ChildNodes; foreach (XmlNode xnf in xnl) { if (xnf.Name == "User") { XmlElement sonData = (XmlElement)xnf; if (sonData.GetAttribute("name") == userName && sonData.GetAttribute("pwd") == userPwd) { role = sonData.GetAttribute("role"); } } } return role; } /// <summary> /// 寫入日期 /// </summary> /// <param name="userName"></param> /// <param name="userPwd"></param> public void WriteData(string userName, string userPwd) { XmlDocument XMLDoc = new XmlDocument(); XMLDoc.Load(filePath);//讀取XML文檔 XmlNode xn = XMLDoc.SelectSingleNode("Users"); XmlNodeList xnl = xn.ChildNodes; foreach (XmlNode xnf in xnl) { if (xnf.Name == "User") { XmlElement sonData = (XmlElement)xnf; if (sonData.GetAttribute("name") == userName && sonData.GetAttribute("pwd") == userPwd) { sonData.SetAttribute("date", DateTime.Now.ToShortDateString());//設置為當前日期 } } } XMLDoc.Save(filePath); } /// <summary> /// 寫入時間值 /// </summary> /// <param name="userName"></param> /// <param name="userPwd"></param> public void WriteValue(string userName, string userPwd,string lastTime) { XmlDocument XMLDoc = new XmlDocument(); XMLDoc.Load(filePath);//讀取XML文檔 XmlNode xn = XMLDoc.SelectSingleNode("Users"); XmlNodeList xnl = xn.ChildNodes; foreach (XmlNode xnf in xnl) { if (xnf.Name == "User") { XmlElement sonData = (XmlElement)xnf; if (sonData.GetAttribute("name") == userName && sonData.GetAttribute("pwd") == userPwd) { sonData.InnerText = lastTime;//設置剩余的時間值 } } } XMLDoc.Save(filePath); } } }
主要界面(設置為不能在最小化任務欄顯示,並且隱藏主窗體,防止關閉,但可以在任務管理器關閉,所有必須禁用任務管理器)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using Microsoft.Win32; namespace WINUSER { public partial class Main : Form { public static Main main; public Main() { InitializeComponent(); main = this; } /// <summary> /// 剩余的時間 /// </summary> public static int lastTime = 14400; /// <summary> /// 當前登錄用戶的帳號,密碼 /// </summary> public static string userName, userPwd; /// <summary> /// 初始化 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Main_Load(object sender, EventArgs e) { //隱藏主窗體,防止用戶關閉 this.Visible = false; this.WindowState = FormWindowState.Minimized; //設置為開機啟動,每次開機都自動運行該程序 RegistryKey hkml = Registry.LocalMachine; RegistryKey runKey = hkml.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true); runKey.SetValue("WinUser", Application.StartupPath + "\\WINUSER.exe"); runKey.Close(); //打開用戶登錄 Login login = new Login(); login.ShowDialog(); } /// <summary> /// 設定計時器 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void timer1_Tick(object sender, EventArgs e) { lastTime--; if (lastTime <= 0) { //關閉計時器 timer1.Enabled = false; //重新登錄 Login login = new Login(); login.ShowDialog(); } //保存當前剩余時間 ControlXML cx = new ControlXML(Application.StartupPath + "\\User.xml"); cx.WriteValue(userName, userPwd, lastTime.ToString());//設置新的上網時間值 } } }
登錄界面(需要禁用任務管理器)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using Microsoft.Win32;// namespace WINUSER { public partial class Login : Form { public Login() { InitializeComponent(); } /// <summary> /// 初始化 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Login_Load(object sender, EventArgs e) { //作為頂層窗口,和最大化窗口,屏蔽其他窗口 this.TopMost = true;//頂層窗口 this.WindowState = FormWindowState.Maximized;//最大化窗口 //停用任務管理器,刪除該注冊表即可解除 RegistryKey r = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", true); r.SetValue("DisableTaskMgr", "1"); //屏蔽任務管理器 } /// <summary> /// 阻止程序關閉 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Login_FormClosing(object sender, FormClosingEventArgs e) { //防止意外關閉本窗口 e.Cancel = true;//防止關閉窗口 } /// <summary> /// 登錄 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { ControlXML cx = new ControlXML(Application.StartupPath + "\\User.xml"); //如果用戶輸入成功登錄 string value = cx.GetValue(comboBox1.Text, textBox1.Text); if (value != null && value != "") { //如果當前日期和保存日期不一致則說明是新的一天,刷新最后一次使用日期和新的上網時間值 DateTime dt = cx.GetData(comboBox1.Text, textBox1.Text); if (DateTime.Now.ToShortDateString() != dt.ToShortDateString()) { cx.WriteData(comboBox1.Text, textBox1.Text);//設置新的日期值 cx.WriteValue(comboBox1.Text, textBox1.Text,"14400");//設置新的上網時間值為4小時 } //獲取用戶規則如果為管理員則一天都可以上網 string role = cx.GetRole(comboBox1.Text, textBox1.Text); if (role == "管理員") { cx.WriteValue(comboBox1.Text, textBox1.Text, "86400");//設置新的上網時間值為24小時 } //獲取上網時間值,並關閉本窗口 Main.lastTime = int.Parse(cx.GetValue(comboBox1.Text, textBox1.Text)); Main.userName = comboBox1.Text; Main.userPwd = textBox1.Text; this.Visible = false; //打開計時器 Main .main .timer1.Enabled = true; MessageBox.Show("你還有" + Main.lastTime.ToString() + "秒的上網時間可用!"); } else { MessageBox.Show("密碼錯誤!"); } } /// <summary> /// 關機 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button2_Click(object sender, EventArgs e) { WindowsExit.ExitWin(); } } }
