using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; using System.IO; using Microsoft.Win32; using System.Windows.Forms; namespace Ella.ToolKit { /// <summary> /// XP系统辅助类 /// <para/>Author : AnDequan /// <para/>Date : 2010-12-23 /// </summary> public sealed class XpSystemHelper : Singleton<XpSystemHelper> { [DllImport("user32.dll", EntryPoint = "ExitWindowsEx", CharSet = CharSet.Ansi)] private static extern int ExitWindowsEx(int uFlags, int dwReserved); /// <summary> /// 注销计算机 /// <para/>技术要点:使用API函数ExitWindowsEx /// <para/>主要方法:Windows API作为Windows操作系统的动态链接库(DLL),当难以编写等效的过程时,可以用来执行任务 /// <para/>Author : AnDequan /// <para/>Date : 2010-10-27 /// </summary> public void Logout() { ExitWindowsEx(0, 0); } /// <summary> /// 关闭计算机 /// <para/>技术要点:使用DOS命令"shutdown -s -t 0" /// <para/>主要方法: /// <para/>Author : AnDequan /// <para/>Date : 2010-10-28 /// </summary> public void Close() { OperationSystemByCmd("shutdown -s -t 0"); } /// <summary> /// 重启计算机 /// <para/>技术要点:使用DOS命令"shutdown -r -t 0" /// <para/>主要方法: /// <para/>Author : AnDequan /// <para/>Date : 2010-10-28 /// </summary> public void ReSet() { OperationSystemByCmd("shutdown -r -t 0"); } [DllImport("user32.dll")] private static extern void LockWorkStation(); /// <summary> /// 锁定计算机 /// <para/>技术要点:使用API函数LockWorkStation类实现锁定计算机功能。LockWorkStation时Windows API提供的一个用于锁定计算机的函数, /// 该函数位于"user32.dll"动态链接库中,声明方法如下: /// <para/>主要方法:[DllImport("user32.dll")] /// private static extern void LockWorkStation(); /// <para/>Author : AnDequan /// <para/>Date : 2010-10-29 /// </summary> public void Lock() { LockWorkStation(); } /// <summary> /// 开机自动运行 /// <para/>技术要点:主要通过设置注册表中的"HKEY_LOCAl_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run"的键值来实现 /// <para/>主要方法:RegistryKey类的OpenSubKey()方法 /// 方法语法:public RegistryKey OpenSubKey(string name) /// 参数:name —》 以只读方法打开的子项的名称后者路径 /// 返回值:请求的子项,如果操作失败,则为空引用 /// <para/>Author : AnDequan /// <para/>Date : 2010-10-27 /// </summary> /// <param name="path">启动了应用程序的可执行文件的路径,包括可执行文件的名称</param> public void StartRun(string path) { if (!File.Exists(path)) return; string sNewName = path.Substring(path.LastIndexOf("//") + 1); RegistryKey RKey = Registry.LocalMachine.OpenSubKey(@"HKEY_LOCAl_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run", true); if (null == RKey) { RKey = Registry.LocalMachine.CreateSubKey(@"SOFTWARE/Microsoft/Windows/CurrentVersion/Run"); RKey.SetValue(sNewName, path);//[ 通过修改注册表,是程序在开始是自动运行 ] MsgHelper.Instance.InformationOK("程序设置完成,重启计算机后立即生效!"); } } /// <summary> /// 获取系统用户名 /// <para/>技术要点:使用Environment类的GetEnvironmentVariable()方法类获取当前系统的用户名称 /// Environment类提供了有关当前环境和平台的信息以及操作它们的方法。 /// <para/>主要方法: /// <para/>Author : AnDequan /// <para/>Date : 2010-10-29 /// </summary> public string GetComputerUser() { return "系统名称:" + Environment.GetEnvironmentVariable("UserName"); } /// <summary> /// 取得系统目录 /// <para/>技术要点:使用Environment类SystemDirectory属性类获取计算机的系统目录 /// <para/>主要方法:SystemDirectory属性 /// <para/>Author : AnDequan /// <para/>Date : 2010-10-29 /// </summary> public string GetSystemDir() { return "计算机系统目录:" + Environment.SystemDirectory; } /// <summary> /// 隐藏鼠标 /// <para/>技术要点:Cursor类的静态方法Hide() /// <para/>主要方法:主要使用Cursor类的Hide()方法 /// <para/>Author : AnDequan /// <para/>Date : 2010-10-28 /// </summary> public void HiddenMouse() { Cursor.Hide(); } /// <summary> /// 显示鼠标 /// <para/>技术要点:Cursor类的静态方法Show() /// <para/>主要方法:主要使用Cursor类的Show()方法 /// <para/>Author : AnDequan /// <para/>Date : 2010-10-28 /// </summary> public void ShowMouse() { Cursor.Show(); } [DllImport("winmm.dll", EntryPoint = "mciSendString")] private static extern int mciSendString(string lpstrCommand, string lpstrReturnString, System.UInt16 uRetrunLength, System.IntPtr HwndCallback); /// <summary> /// 打开CD /// <para/>Author : AnDequan /// <para/>Date : 2010-11-12 /// </summary> /// <param name="HwndCallback">当前窗口的句柄(一般为this.Handle)</param> public void OpenCDROM(System.IntPtr HwndCallback) { mciSendString("Set cdaudio door open wait", "", 0, HwndCallback); } /// <summary> /// 关闭CD /// <para/>Author : AnDequan /// <para/>Date : 2010-11-12 /// </summary> /// <param name="HwndCallback">当前窗口的句柄(一般为this.Handle)</param> public void CloseCDROM(System.IntPtr HwndCallback) { mciSendString("Set cdaudio door closed wait", "", 0, HwndCallback); } [DllImport("kernel32.dll", EntryPoint = "GetDiskFreeSpaceEx")] private static extern int GetDiskFreeSpaceEx(string lpDirectoryName, out long lpFreeBytesAvailable, out long lpTotalNumberOfBytes, out long lpTotalNumberOfFreeBytes); /// <summary> /// 计算磁盘空间 /// <para/>Author : AnDequan /// <para/>Date : 2010-12-23 /// </summary> /// <param name="path">磁盘路径</param> /// <param name="totalspace">总空间</param> /// <param name="usespace">可用空间</param> /// <param name="freespace">总剩余空间</param> public void GetDiskSpace(string path, out long totalspace, out long usespace, out long freespace) { totalspace = 0; usespace = 0; freespace = 0; long lTotalSpace, lUseSpace, lFreeSpace; if (GetDiskFreeSpaceEx(path, out lTotalSpace, out lUseSpace, out lFreeSpace) != 0) { usespace = lTotalSpace / 1024 / 1024;//可用空间 totalspace = lUseSpace / 1024 / 1024;//总空间 freespace = lFreeSpace / 1024 / 1024;//总剩余空间 } } const int SHERB_NOCONFIRMATION = 0x00001;//整型常量在API中表示删除时没有确认对话框 const int SHERB_NOPROGRESSUI = 0x000002;//在API中表示不显示删除进度条 const int SHERB_NOSOUND = 0x000004;//在API中表示删除完毕时不播放声音 [DllImportAttribute("shell32.dll")]//声明API函数 private static extern int SHEmptyRecycleBin(IntPtr handle, string root, int falgs); /// <summary> /// 清空回收站 /// <para/>Author : AnDequan /// <para/>Date : 2010-12-29 /// </summary> public void ClearRecycle(IntPtr handle) { SHEmptyRecycleBin(handle, "", SHERB_NOCONFIRMATION + SHERB_NOPROGRESSUI + SHERB_NOSOUND); } /// <summary> /// 获取桌面的大小 /// <para/>Author : AnDequan /// <para/>Date : 2011-1-5 /// </summary> /// <param name="width">宽</param> /// <param name="height">高</param> public void GetDesktopSize(out int width, out int height) { width = Screen.PrimaryScreen.WorkingArea.Width; height = Screen.PrimaryScreen.WorkingArea.Height; } /// <summary> /// 随机更换壁纸 /// <para/>Author : AnDequan /// <para/>Date : 2011-1-5 /// </summary> /// <returns>true - 成功,false - 失败</returns> public bool RandomChangeWallpaper() { bool bIsSuccess = false; try { string strPath = Application.StartupPath.Substring(0, Application.StartupPath.Substring(0, Application.StartupPath.LastIndexOf("//")).LastIndexOf("//")) + @"/Image/"; DirectoryInfo DInfo = new DirectoryInfo(strPath); FileInfo[] FInfo = DInfo.GetFiles(); Random rand = new Random(); int i = rand.Next(FInfo.Length); RegistryKey myRKey = Registry.CurrentUser; using (myRKey = myRKey.OpenSubKey("Control Panel//Desktop", true)) { //用过调用RegistryKey对象的SetValue()方法随机设置桌面壁纸 myRKey.SetValue("WallPaper", strPath + FInfo[i].Name); myRKey.SetValue("Title WallPaper", "2"); bIsSuccess = true; } } catch (Exception ex) { bIsSuccess = false; LogHelper.Instance.Add(ex); } return bIsSuccess; } #region 隐藏和显示开始按钮 private const int SW_HIDE = 0; private const int SW_SHOW = 5; [DllImport("user32.dll")] private static extern int FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll")] private static extern int FindWindowEx(int hWnd1, int hWnd2, string lpsz1, string lpsz2); [DllImport("user32.dll")] private static extern int ShowWindow(int hwnd, int nCmdShow); /// <summary> /// 隐藏系统开始按钮 /// <para/>Author : AnDequan /// <para/>Date : 2010-12-29 /// </summary> public void HiddenStartButton() { ShowWindow(FindWindowEx(FindWindow("Shell_TrayWnd", null), 0, "Button", null), SW_HIDE); } /// <summary> /// 显示系统开始按钮 /// <para/>Author : AnDequan /// <para/>Date : 2010-12-29 /// </summary> public void ShowStartButton() { ShowWindow(FindWindowEx(FindWindow("Shell_TrayWnd", null), 0, "Button", null), SW_SHOW); } #endregion #region 隐藏和显示桌面图标 /// <summary> /// 隐藏桌面图标 /// <para/>Author : AnDequan /// <para/>Date : 2010-12-29 /// </summary> public void HiddenDesktopIco() { RegistryKey rgk = Registry.CurrentUser.CreateSubKey(@"Software/Microsoft/Windows/CurrentVersion/Policies/Explorer"); rgk.SetValue("NoDeskTop", 1, RegistryValueKind.DWord); } /// <summary> /// 显示桌面图标 /// <para/>Author : AnDequan /// <para/>Date : 2010-12-29 /// </summary> public void ShowDesktopIco() { RegistryKey rgk = Registry.CurrentUser.CreateSubKey(@"Software/Microsoft/Windows/CurrentVersion/Policies/Explorer"); rgk.SetValue("NoDeskTop", 0, RegistryValueKind.DWord); } #endregion #region User-Defined Assistant Method (辅助方法) /// <summary> /// 执行不同的DOS命令 /// <para/>Author : AnDequan /// <para/>Date : 2010-10-28 /// </summary> /// <param name="cmd">DOS命令</param> private void OperationSystemByCmd(string cmd) { System.Diagnostics.Process myProcess = new System.Diagnostics.Process(); myProcess.StartInfo.FileName = "cmd.exe";//[ 启动DOS命令 ] myProcess.StartInfo.UseShellExecute = false; myProcess.StartInfo.RedirectStandardInput = true; myProcess.StartInfo.RedirectStandardOutput = true; myProcess.StartInfo.RedirectStandardError = true; myProcess.StartInfo.CreateNoWindow = true; myProcess.Start();//[ 启动进程 ] myProcess.StandardInput.WriteLine(cmd);//执行关机命令 } #endregion } }