C#系统操作汇总

 

 

▲资源包括c#对操作系统的各种操作方法▲ ▲设置桌面背景▲ ▲设置系统时间▲ ▲设置屏幕分辨率▲ ▲设置鼠标样式▲ ▲设置任务栏时间显示方式▲ ▲进入系统前弹出信息▲ ▲内存使用状态 ▲CPU使用率▲ ▲键盘钩子屏保热键▲ ▲获取系统启动后经过的时间▲ ▲检索系统中正在运行的任务▲ 隐藏显示任务栏▲ 隐藏显示开始按钮▲ 隐藏显示桌面图标▲ 使桌面图标文字透明▲ 设置输入法▲ 获取鼠标在任意点的颜色值▲ 限制鼠标的活动区域▲ 获取磁盘序列号▲ 设置映射驱动器路径▲ 判断驱动器类型▲ 获取所有逻辑驱动器▲ 取消磁盘共享▲ 驱动器容量▲ 图标显示磁盘容量▲ 磁盘格式化▲ 打开控制面板的程序▲ 添加磁盘到托盘▲ 任务栏上不出现图标▲ 调用外部EXE文件▲ 关闭外部程序▲ 防止程序多次运行▲ 获取任务栏尺寸▲ 程序运行时禁止关机▲ 改变系统提示信息▲ 获取环境变量▲ 启动屏幕保护▲

 系统设置

磁盘管理程序控制

 

 本文源码下载 

一.系统设置                                                                          

1.1设置桌面背景                                                                      设置桌面背景的关键技术是通过API函数 SystemParametersInfo将指定的图片设置为电脑背景桌面,该函数允许获取或设置windows系统参数。       语法格式如下:
[DllImport("user32.dll", EntryPoint = "SystemParametersInfoA")] static extern Int32 SystemParametersInfo(Int32 uAction, Int32 uParam, string lpvparam, Int32 fuwinIni);
关键代码
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, path, 1); //设置桌面背景 ( SPI_SETDESKWALLPAPER=20     path 图片路径)

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.IO;
using System.Drawing.Imaging;
namespace SystemSettings
{
    public partial class DeskTop101 : Form
    {
        [DllImport("user32.dll", EntryPoint = "SystemParametersInfoA")]
        static extern Int32 SystemParametersInfo(Int32 uAction, Int32 uParam, string lpvparam, Int32 fuwinIni);
        public string picturepath = "";
        private const int SPI_SETDESKWALLPAPER = 20;
        public Image image;
        public DeskTop101()
        {
            InitializeComponent();
        }
        private void button_openfile_Click(object sender, EventArgs e)
        {
            label_show.Visible = false;
            pictureBox_show.Visible = true;
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "*.jpg;*.jpeg;*.gif;*.png;*.bmp|*.jpeg;*.jpg;*.gif;*.png;*.bmp";
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                picturepath = ofd.FileName;
                image = System.Drawing.Image.FromFile(picturepath);
                pictureBox_show.Image = image;
            }
        }
        private void button_setDesktop_Click(object sender, EventArgs e)
        {
            string SFileType = "";
            string filename = "";
            if (picturepath == "")
            {
                MessageBox.Show("请选择图片");
            }
            else
            {
                //获取文件后缀
                SFileType = picturepath.Substring(picturepath.LastIndexOf(".") + 1, (picturepath.Length - picturepath.LastIndexOf(".") - 1));
                SFileType = SFileType.ToLower();
                //获取文件名
                filename = picturepath.Substring(picturepath.LastIndexOf("\\") + 1, (picturepath.LastIndexOf(".") - picturepath.LastIndexOf("\\") - 1));
                if (SFileType == "bmp")
                {
                    SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, picturepath, 1); //设置背景
                }
                else
                {
                    string SystemPath = Environment.SystemDirectory;//获取系统文件路径
                    string path = SystemPath + "\\" + filename + ".bmp";
                    FileInfo fi = new FileInfo(path);
                    if (fi.Exists)
                    {
                        fi.Delete();
                        PictureBox pb = new PictureBox();
                        pb.Image = Image.FromFile(picturepath);
                        pb.Image.Save(SystemPath + "\\" + filename + ".bmp", ImageFormat.Bmp);//实现格式转换
                    }
                    else
                    {
                        PictureBox pb = new PictureBox();
                        pb.Image = Image.FromFile(picturepath);
                        pb.Image.Save(SystemPath + "\\" + filename + ".bmp", ImageFormat.Bmp);//实现格式转换
                    }
                    SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, path, 1); //设置背景
                }
            }
        }

        private void DeskTop101_Load(object sender, EventArgs e)
        {
            pictureBox_show.Visible = false;
        }
        private void button_change_Click(object sender, EventArgs e)
        {
            pictureBox_show.Visible = false;
            label_show.Visible = true;
        }
    }
}




 

1.2 设置系统时间                                   

c# 中修改系统时间可以使用API函数SetSystemTime 和SetLocalTime 来修改系统时间。
本例用SetLocalTime修改系统时间
过程是:
1.创建一个SYSTEMTIME的struct结构  在结构中包括 年,月,一周的第几天,日,小时,分,秒,毫秒
2.调用SetLocalTime即可修改系统时间
关键代码
[DllImport("Kernel32.dll")]
public static extern bool SetLocalTime(ref SYSTEMTIME Time);
[DllImport("Kernel32.dll")]
public static extern void GetLocalTime(ref SYSTEMTIME Time);
...bool v = SetLocalTime(ref t); //调用SetLocalTime函数使设置的时间生效
其中创建一个SystemEvents_TimeChanged(object sender, EventArgs e)来提示时间本修改
在初始化是添加Microsoft.Win32.SystemEvents.TimeChanged+=new EventHandler(SystemEvents_TimeChanged);

 

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 ".Win32;
namespace SystemSettings
{
    public partial class SystemTime102 : Form
    {
        [DllImport("Kernel32.dll")]

        public static extern bool SetLocalTime(ref SYSTEMTIME Time);

        [DllImport("Kernel32.dll")]

        public static extern void GetLocalTime(ref SYSTEMTIME Time);


        [StructLayout(LayoutKind.Sequential)]
        public struct SYSTEMTIME
        {
            public short Year;
            public short Month;
            public short DayOfWeek;
            public short Day;
            public short Hour;
            public short Mintute;
            public short Second;
            public short Miliseconds;
        }
        public SystemTime102()
        {
            InitializeComponent();
        }

        private void button_Setting_Click(object sender, EventArgs e)
        {
            SYSTEMTIME t = new SYSTEMTIME();
            t.Year = (short)(dateTimePicker_date.Value.Year);
            t.Month = (short)(dateTimePicker_date.Value.Month);
            t.Day = (short)(dateTimePicker_date.Value.Day);
            t.Hour = (short)(dateTimePicker_SystemTime.Value.Hour);
            t.Mintute = (short)(dateTimePicker_SystemTime.Value.Minute);
            t.Second = (short)(dateTimePicker_SystemTime.Value.Second);
            bool v = SetLocalTime(ref t);
        }

        private void SystemTime102_Load(object sender, EventArgs e)
        {
            ".Win32.SystemEvents.TimeChanged+=new EventHandler(SystemEvents_TimeChanged);
        }

        private void dateTimePicker_SystemTime_ValueChanged(object sender, EventArgs e)
        {

        }
        private void SystemEvents_TimeChanged(object sender, EventArgs e)
        {
            MessageBox.Show("系统时间被改变了,现在时间为:" + DateTime.Now.ToString());
        }


    }
}


 

1.3 设置屏幕分辨率

切换屏幕分辨率的API函数ChangeDisplaySettings
该函数把缺省显示设备的设置改变为由lpDevMode设定的图形模式
其中关键要加入
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct DEVMODE{..... }
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern int ChangeDisplaySettings([In] ref DEVMODE lpDevMode, int dwFlags);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern bool EnumDisplaySettings(string lpszDeviceName, Int32 iModeNum, ref DEVMODE lpDevMode);
//修改分辨率的方法是
先定义一个DEVMODE DevM = new DEVMODE();
在调用 long result = ChangeDisplaySettings(ref DevM, 0);

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 Microsoft.Win32;
namespace SystemSettings
{
    public partial class ScreenResolution103 : Form
    {
        //获取并保存当前屏幕分辨率  
        public int current_width = Screen.PrimaryScreen.Bounds.Width;
        public int current_height = Screen.PrimaryScreen.Bounds.Height;
        public int S_Width = 800;
        public int S_Hight = 600;
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
        public struct DEVMODE
        {
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
            public string dmDeviceName;
            public short dmSpecVersion;
            public short dmDriverVersion;
            public short dmSize;
            public short dmDriverExtra;
            public int dmFields;
            public short dmOrientation;
            public short dmPaperSize;
            public short dmPaperLength;
            public short dmPaperWidth;
            public short dmScale;
            public short dmCopies;
            public short dmDefaultSource;
            public short dmPrintQuality;
            public short dmColor;
            public short dmDuplex;
            public short dmYResolution;
            public short dmTTOption;
            public short dmCollate;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
            public string dmFormName;
            public short dmLogPixels;
            public int dmBitsPerPel;
            public int dmPelsWidth;
            public int dmPelsHeight;
            public int dmDisplayFlags;
            public int dmDisplayFrequency;
        }
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        static extern int ChangeDisplaySettings([In] ref DEVMODE lpDevMode, int dwFlags);
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        static extern bool EnumDisplaySettings(string lpszDeviceName, Int32 iModeNum, ref DEVMODE lpDevMode);
        /// <summary>
        /// 改变分辨率
        /// </summary>
        public void ChangeRes(int w, int h)
        {
            DEVMODE DevM = new DEVMODE();
            DevM.dmSize = (short)Marshal.SizeOf(typeof(DEVMODE));
            bool mybool;
            mybool = EnumDisplaySettings(null, 0, ref DevM);
            DevM.dmPelsWidth = w;      //设置宽
            DevM.dmPelsHeight = h;       //设置高
            DevM.dmDisplayFrequency = 60;      //刷新频率
            DevM.dmBitsPerPel = 32;          //颜色象素
            long result = ChangeDisplaySettings(ref DevM, 0);
        }
        /// <summary>
        /// 复原屏幕分辨率
        /// </summary>
        void FuYuan()
        {
            DEVMODE DevM = new DEVMODE();
            DevM.dmSize = (short)Marshal.SizeOf(typeof(DEVMODE));
            bool mybool;
            mybool = EnumDisplaySettings(null, 0, ref DevM);
            DevM.dmPelsWidth = current_width;      //恢复宽
            DevM.dmPelsHeight = current_height;     //恢复高
            DevM.dmDisplayFrequency = 60;         //刷新频率
            DevM.dmBitsPerPel = 32;               //颜色象素
            long result = ChangeDisplaySettings(ref DevM, 0);
        }
        public ScreenResolution103()
        {
            InitializeComponent();
        }
        private void button_setting_Click(object sender, EventArgs e)
        {
            ChangeRes(S_Width, S_Hight);
        }

        private void button_fuyuan_Click(object sender, EventArgs e)
        {
            FuYuan();
        }
        private void trackBar_showscreen_Scroll(object sender, EventArgs e)
        {
            switch (trackBar_showscreen.Value)
            {
                case 1:
                    S_Width = 800;
                    S_Hight = 600;
                    break;
                case 2:
                    S_Width = 1024;
                    S_Hight = 768;
                    break;
                case 3:
                    S_Width = 1152;
                    S_Hight = 864;
                    break;
                case 4:
                    S_Width = 1280;
                    S_Hight = 600;
                    break;
                case 5:
                    S_Width = 1280;
                    S_Hight = 720;
                    break;
                case 6:
                    S_Width = 1280;
                    S_Hight = 960;
                    break;
                case 7:
                    S_Width = 1280;
                    S_Hight = 1024;
                    break;
                case 8:
                    S_Width = 1400;
                    S_Hight = 1050;
                    break;
                case 9:
                    S_Width = 1440;
                    S_Hight = 900;
                    break;
                case 10:
                    S_Width = 1600;
                    S_Hight = 900;
                    break;
                case 11:
                    S_Width = 1600;
                    S_Hight = 1200;
                    break;
                case 13:
                    S_Width = 1580;
                    S_Hight = 1050;
                    break;
                default:
                    S_Hight = current_height;
                    S_Width = current_width;
                    break;
            }
            label_show.Text = S_Width + " X " + S_Hight;
        }
    }
}


1.4设置鼠标样式

设置鼠标样式通调用API 下的LoadCursorFromFile和SetSystemCursor实现
[DllImport("user32.dll",EntryPoint="LoadCursorFromFile")]
public static extern int IntLoadCursorFromFile(string fileName);
[DllImport("user32.dll",EntryPoint="SetSystemCursor")]
public static extern void SetSystemCursor(int hcur,int i);
恢复系统图标样式采用
[DllImport("User32.DLL")]
public static extern bool SystemParametersInfo(uint uiAction, uint uiParam, IntPtr pvParam, uint fWinIni);
其中将cur文件加入dll的方法是:
1.双击Resource.resx(如果资源管理器中没有这一项只需右击项目选择添加——>新建项——>资源文件即可)添加要显示的光标文件。添加完成后,资源管理器中会出现Resources文件夹,我们添加的项目就会出现在这里,如user.cur。
2.更改光标
2.1 添加引用  using System.Runtime.InteropServices;
2.2 在程序中声明光标资源加载函数LoadCursorFromFile;
[DllImport("user32")]
private static extern IntPtr LoadCursorFromFile(string fileName);
2.3 声明数组 byte[] cursorbuffer=namespace.Resource .CursorName;
Namespace为资源文件所在项目的命名空间名称,CursorName对应光标资源文件名。
2.4 创建一个临时光标文件tempTest.dat;将cursorbuffer中的数据写入数据文件中;
FileStream fileStream = new FileStream("tempTest.dat", FileMode. Create);
fileStream.Write(cursorbuffer, 0, cursorbuffer.Length);
2.5  关闭文件,利用API 函数LoadCursorFromFile从光标临时文件中创建光标。
fileStream.Close();
Cursor .Current =new Cursor(LoadCursorFromFile("temp001.dat"));

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using SystemSettings.Properties;
using System.IO;
using System.Runtime.InteropServices;
namespace SystemSettings
{
    public partial class MouseStyle104 : Form
    {

        [DllImport("user32.dll", EntryPoint = "LoadCursorFromFile")]
        public static extern int IntLoadCursorFromFile(string fileName);
        [DllImport("user32.dll", EntryPoint = "SetSystemCursor")]
        public static extern void SetSystemCursor(int hcur, int i);
        public const int OCR_NORAAC = 32512;
        public const int OCR_HAND = 32649;
        public const int OCR_NO = 32648;
        public const int OCR_SIZEALL = 32646;
        [DllImport("User32.DLL")]
        public static extern bool SystemParametersInfo(uint uiAction, uint uiParam, IntPtr pvParam, uint fWinIni);

        public MouseStyle104()
        {
            InitializeComponent();
        }
        public string WindowsPath = "";
        public string CursorsPath = "";
        private void MouseStyle104_Load(object sender, EventArgs e)
        {
            WindowsPath = Environment.GetEnvironmentVariable("WinDir");
            CursorsPath = WindowsPath + "\\Cursors";

        }
        private void comboBox_mouseStyle_DrawItem(object sender, DrawItemEventArgs e)
        {
            Graphics GComboBox = e.Graphics;   //声明一个GDI的绘图类对象
            Rectangle RComboBox = e.Bounds;    //表示矩形的位置和大小的对象


        }
        private void comboBox_mouseStyle_SelectedIndexChanged(object sender, EventArgs e)
        {
            DirectoryInfo di = new DirectoryInfo(CursorsPath + @"\Image");
            if (!di.Exists)
            {
                di.Create();
            }
            byte[] cursorbuffer = null;
            switch (comboBox_mouseStyle.SelectedIndex)
            {
                case 0:

                    break;
                case 1:
                    cursorbuffer = Resources.mouse001;
                    break;
                case 2:
                    cursorbuffer = Resources.mouse002;
                    break;
                case 3:
                    cursorbuffer = Resources.mouse003;
                    break;
                case 4:
                    cursorbuffer = Resources.mouse005;
                    break;
                default:
                    cursorbuffer = Resources.mouse001;
                    break;

            }
            if (comboBox_mouseStyle.SelectedIndex != 0)
            {
                FileStream fileStream = new FileStream("tempTest.cur", FileMode.Create);
                fileStream.Write(cursorbuffer, 0, cursorbuffer.Length);
                fileStream.Close();
                File.Copy("tempTest.cur", CursorsPath + @"\Image\" + "tempTest.cur", true);
                int cur = IntLoadCursorFromFile(CursorsPath + @"\Image\tempTest.cur");
                SetSystemCursor(cur, OCR_NORAAC);
            }
            else
            {
                SystemParametersInfo(87, 0, IntPtr.Zero, 2);
                // SetSystemCursor(Cursors.Arrow.CopyHandle().ToInt32(), OCR_NORAAC);
            }
        }
    }
}


1.5设置任务栏时间显示方式

修改时间样式主要通过修改注册表的方法来实现
注册表的地址HKEY_CURRENT_USER\Control Panel\International 添加一个sTimeFormat 为 H:mm:ss  HH:mm:ss tt h:mm:ss tt hh:mm:ss
关键代码
RegistryKey mreg;
mreg = Registry.CurrentUser;
mreg = mreg.CreateSubKey(@"control Panel\International");
mreg.SetValue("sTimeFormat", comboBox_timeStyle.Text.Trim());

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;
using System.Runtime.InteropServices;
using System.Diagnostics;
namespace SystemSettings
{
    public partial class TimeStyle105 : Form
    {
        const uint ULNTERVAL = 400;
        [DllImport("user32")]
        public static extern bool SetDoubleClickTime(uint ulnterval);
        const int WM_SETTINGCHANGE = 0x001A;
        const int HWND_BROADCAST = 0xffff;
        #region public enum HChangeNotifyFlags
        [Flags]
        public enum HChangeNotifyFlags
        {
            SHCNF_DWORD = 0x0003,
            SHCNF_IDLIST = 0x0000,
            SHCNF_PATHA = 0x0001,
            SHCNF_PATHW = 0x0005,
            SHCNF_PRINTERA = 0x0002,
            SHCNF_PRINTERW = 0x0006,
            SHCNF_FLUSH = 0x1000,
            SHCNF_FLUSHNOWAIT = 0x2000
        }
        #endregion // enum HChangeNotifyFlags
        #region enum HChangeNotifyEventID
        [Flags]
        enum HChangeNotifyEventID
        {
            SHCNE_ALLEVENTS = 0x7FFFFFFF,
            SHCNE_ASSOCCHANGED = 0x08000000,
            SHCNE_ATTRIBUTES = 0x00000800,
            SHCNE_CREATE = 0x00000002,
            SHCNE_DELETE = 0x00000004,
            SHCNE_DRIVEADD = 0x00000100,
            SHCNE_DRIVEADDGUI = 0x00010000,
            SHCNE_DRIVEREMOVED = 0x00000080,
            SHCNE_EXTENDED_EVENT = 0x04000000,
            SHCNE_FREESPACE = 0x00040000,
            SHCNE_MEDIAINSERTED = 0x00000020,
            SHCNE_MEDIAREMOVED = 0x00000040,
            SHCNE_MKDIR = 0x00000008,
            SHCNE_NETSHARE = 0x00000200,
            SHCNE_NETUNSHARE = 0x00000400,
            SHCNE_RENAMEFOLDER = 0x00020000,
            SHCNE_RENAMEITEM = 0x00000001,
            SHCNE_RMDIR = 0x00000010,
            SHCNE_SERVERDISCONNECT = 0x00004000,
            SHCNE_UPDATEDIR = 0x00001000,
            SHCNE_UPDATEIMAGE = 0x00008000,
        }

        [DllImport("shell32.dll")]
        static extern void SHChangeNotify(HChangeNotifyEventID wEventId,
                                           HChangeNotifyFlags uFlags,
                                           IntPtr dwItem1,
                                           IntPtr dwItem2);
        #endregion // enum HChangeNotifyEventID
        IntPtr result1;
        public enum SendMessageTimeoutFlags : uint
        {
            SMTO_NORMAL = 0x0000,
            SMTO_BLOCK = 0x0001,
            SMTO_ABORTIFHUNG = 0x0002,
            SMTO_NOTIMEOUTIFNOTHUNG = 0x0008
        }
        [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
        public static extern IntPtr SendMessageTimeout(
        IntPtr windowHandle,
        uint Msg,
        IntPtr wParam,
        IntPtr lParam,
        SendMessageTimeoutFlags flags,
        uint timeout,
        out IntPtr result
        );
        public void ChangeReg()
        {
            //通知所有打开的程序注册表以修改 
            SendMessageTimeout(new IntPtr(HWND_BROADCAST), WM_SETTINGCHANGE, IntPtr.Zero, IntPtr.Zero, SendMessageTimeoutFlags.SMTO_NORMAL, 1000, out result1);
        }
        public TimeStyle105()
        {
            InitializeComponent();
        }
        private void button_setting_Click(object sender, EventArgs e)
        {
            if (comboBox_timeStyle.Text != "")    //如果选择了时间样式
            {
                RegistryKey mreg;
                mreg = Registry.CurrentUser;
                mreg = mreg.CreateSubKey(@"control Panel\International");
                mreg.SetValue("sTimeFormat", comboBox_timeStyle.Text.Trim());
                mreg.Close();
                ChangeReg();
                SHChangeNotify(HChangeNotifyEventID.SHCNE_ASSOCCHANGED, HChangeNotifyFlags.SHCNF_IDLIST, IntPtr.Zero, IntPtr.Zero);
                if (MessageBox.Show("修改成功,重启有效,是否需求强制刷新(有时候会使打开的文件夹消失)", "修改成功", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
                {
                    RefreshSystem();
                }
                SetDoubleClickTime(ULNTERVAL);
            }
        }
        public void RefreshSystem()
        {
            Process[] myProcesses;
            myProcesses = Process.GetProcessesByName("explorer");
            foreach (Process myProcess in myProcesses)
            {

                myProcess.Kill();

            }
            System.Diagnostics.Process.Start("explorer.exe");
        }
    }
}


1.6进入系统前弹出信息

修改时间样式主要通过修改注册表的方法来实现
注册表的地址HKEY_CURRENT_USER\Control Panel\International 添加一个sTimeFormat 为 H:mm:ss  HH:mm:ss tt h:mm:ss tt hh:mm:ss
关键代码
RegistryKey mreg;
mreg = Registry.CurrentUser;
mreg = mreg.CreateSubKey(@"control Panel\International");
mreg.SetValue("sTimeFormat", comboBox_timeStyle.Text.Trim());
删除提示 用DeleteValue 不能用DeleteSubKey 注意区别
手动方法为:找到HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Winlogon
这一个主键,然后在右边窗口中找到“LegalNoticeCaption”和“LegalNoticeText”这两个字符串,删除这两个字符串就可以解决在登陆时出现提示框的现象了。

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 SystemSettings
{
    public partial class OSInformation106 : Form
    {
        public OSInformation106()
        {
            InitializeComponent();
        }
        private void button_setting_Click(object sender, EventArgs e)
        {
            if (textBox_nr.Text == "" || textBox_title.Text == "")
            {
                MessageBox.Show("请输入标题和内容");
            }
            else
            {
                RegistryKey rKey = Registry.LocalMachine;
                RegistryKey rKeyInfo = rKey.CreateSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon");
                rKeyInfo.SetValue("LegalNoticeCaption", textBox_title.Text, RegistryValueKind.String);
                rKeyInfo.SetValue("LegalNoticeText", textBox_nr.Text, RegistryValueKind.String);
                MessageBox.Show("已经完成设置,重启生效", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }
        }
        private void button_cancel_Click(object sender, EventArgs e)
        {
            DeleteRegist("LegalNoticeCaption");
            DeleteRegist("LegalNoticeText");
            MessageBox.Show("删除成功");
        }
        public void DeleteRegist(string name)
        {

            RegistryKey hkml = Registry.LocalMachine;
            RegistryKey software = hkml.OpenSubKey("SOFTWARE", true);
            RegistryKey software1 = software.OpenSubKey("Microsoft", true);
            RegistryKey software2 = software1.OpenSubKey("Windows NT", true);
            RegistryKey software3 = software2.OpenSubKey("CurrentVersion", true);
            RegistryKey aimdir = software3.OpenSubKey("Winlogon", true);
            aimdir.DeleteValue(name.Trim(), false);
            aimdir.Close();
            software3.Close();
            software2.Close();
            software1.Close();
            hkml.Close();
        }
    }
}


二.系统监控

2.1内存使用状态

查看系统内存在本示例中采用了.NET Framework 2.0 版中是新增的命名空间:Microsoft.VisualBasic.Devices
程序集:Microsoft.VisualBasic(在 microsoft.visualbasic.dll 中)
关键代码
Computer myComputer = new Computer();
textBox_TPM.Text = Convert.ToString(myComputer.Info.TotalPhysicalMemory / 1024 / 1024)+"M";
textBox_TVM.Text = Convert.ToString(myComputer.Info.TotalVirtualMemory / 1024 / 1024)+"M";
textBox_APM.Text = Convert.ToString(myComputer.Info.AvailablePhysicalMemory / 1024 / 1024)+"M";
textBox_AVM.Text = Convert.ToString(myComputer.Info.AvailableVirtualMemory / 1024 / 1024)+"M";

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.VisualBasic.Devices;
namespace SystemSettings
{
    public partial class MemoryUsage201 : Form
    {
        public MemoryUsage201()
        {
            InitializeComponent();
        }
        private void MemoryUsage201_Load(object sender, EventArgs e)
        {
            this.timer1.Start();
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            Computer myComputer = new Computer();
            textBox_TPM.Text = Convert.ToString(myComputer.Info.TotalPhysicalMemory / 1024 / 1024) + "M";
            textBox_TVM.Text = Convert.ToString(myComputer.Info.TotalVirtualMemory / 1024 / 1024) + "M";
            textBox_APM.Text = Convert.ToString(myComputer.Info.AvailablePhysicalMemory / 1024 / 1024) + "M";
            textBox_AVM.Text = Convert.ToString(myComputer.Info.AvailableVirtualMemory / 1024 / 1024) + "M";

        }
    }
}


2.2CPU使用率

CPU使用率采用的方法是调用ManagementObjectSearcher类的LoadPercentage属性可以快速的获取CPU使用率
ManagementObjectSearcher所引用的空间是using System.Management; 要添加系统提供的dll
ManagementObjectSearcher seracher = new ManagementObjectSearcher("select * from Win32_Processor");
foreach (ManagementObject myobject in seracher.Get())
{   label_text.Text = myobject["LoadPercentage"].ToString() + "%";   }
采用的是WMI查询 可以查看系统的许多信息

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Management;
using System.Threading;
namespace SystemSettings
{
    public partial class CUP202 : Form
    {

        public CUP202()
        {
            InitializeComponent();
        }
        private void CUP202_Load(object sender, EventArgs e)
        {
            timer1.Start();
        }
        /// <summary>
        /// 获取内存信息
        /// </summary>
        public void MyUser()
        {
            ManagementObjectSearcher seracher = new ManagementObjectSearcher("select * from Win32_Processor");
            foreach (ManagementObject myobject in seracher.Get())
            {
                label_text.Text = myobject["LoadPercentage"].ToString() + "%";

            }
            //CreateImage();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            Thread t = new Thread(MyUser);
            t.Start();
        }
    }
}


2.3键盘钩子屏蔽热键

HooK钩子是windows消息处理机制的一个平台,应用程序可以在上面设置子进程以监视指定窗口的某种消息,
可以监视程序的运行,可以屏蔽一些热键 ALT+F4 Win+D 等等,也可以监视屏蔽软件的热键等等.
1.安装钩子
  [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall)]//安装钩子
public static extern IntPtr SetWindowsHookEx(int idHook,HookProc ipfn,IntPtr pInstance, int threadId);
2.卸载钩子
[DllImport("user32.dll", CallingConvention = CallingConvention.StdCall)]   //卸载钩子
public static extern bool UnhookWindowsHookEx(IntPtr pHookHandle);
关键代码

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;
namespace SystemSettings
{
    public partial class Hook203 : Form
    {
        [StructLayout(LayoutKind.Sequential)]
        public struct KeyMSG
        {
            public int vkCode;
            public int scanCode;
            public int flags;
            public int time;
            public int dwExtraInfo;
        }
        private IntPtr pKeyboardHook = IntPtr.Zero;                            //键盘钩子句柄
        public delegate int HookProc(int nCode, Int32 wParam, IntPtr IParam);   //钩子委托声明
        private HookProc KeyboardHookProcedure;                                //键盘钩子委托实例不能省略的变量       
        public const int idHook = 13;                                          //底层键盘钩子
        [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall)]//安装钩子
        public static extern IntPtr SetWindowsHookEx(int idHook, HookProc ipfn, IntPtr pInstance, int threadId);
        [DllImport("user32.dll", CallingConvention = CallingConvention.StdCall)]   //卸载钩子
        public static extern bool UnhookWindowsHookEx(IntPtr pHookHandle);
        private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr IParam)     //键盘钩子处理函数
        {
            KeyMSG m = (KeyMSG)Marshal.PtrToStructure(IParam, typeof(KeyMSG));
            if (pKeyboardHook != IntPtr.Zero)
            {
                switch (((Keys)m.vkCode))
                {
                    case Keys.LWin:
                    case Keys.RWin:
                    case Keys.Delete:
                    case Keys.Alt:
                    case Keys.Escape:
                    case Keys.F4:
                    case Keys.Control:
                    case Keys.Tab:
                    case Keys.Z:
                    case Keys.ControlKey:

                        return 1;
                }
            }
            return 0;

        }
        /// <summary>
        /// 安装钩子
        /// </summary>
        /// <returns></returns>
        public bool InsertHook()
        {
            IntPtr pIn = (IntPtr)4194304;
            if (this.pKeyboardHook == IntPtr.Zero)
            {

                this.KeyboardHookProcedure = new HookProc(KeyboardHookProc);

                this.pKeyboardHook = SetWindowsHookEx(idHook, KeyboardHookProcedure, pIn, 0);

                if (this.pKeyboardHook == IntPtr.Zero)
                {
                    this.UnInsertHook();
                    return false;
                }
            }

            return true;     //安装成功
        }
        public bool UnInsertHook()
        {
            bool result = true;
            if (this.pKeyboardHook != IntPtr.Zero)
            {
                result = (UnhookWindowsHookEx(this.pKeyboardHook) && result);   //卸载钩子
                this.pKeyboardHook = IntPtr.Zero;
            }
            return result;
        }
        public Hook203()
        {
            InitializeComponent();
        }
        private void button_hack_Click(object sender, EventArgs e)
        {
            InsertHook();
        }
        private void button_unhack_Click(object sender, EventArgs e)
        {
            UnInsertHook();
        }
    }
}


2.4获取系统启动后进过的时间

通过Environment使用TickCount属性可快速获取系统启动后经过的时间

int totals=Environment.TickCount/1000;

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace SystemSettings
{
    public partial class systemstarts204 : Form
    {
        public systemstarts204()
        {
            InitializeComponent();
        }
        public void getTime()
        {
            int totals = Environment.TickCount / 1000;
            label_title.Text = "系统启动后经过的时间:" + (totals / 3600) + "小时" + (totals - (totals / 3600) * 3600) / 60 + "分" + (totals - (totals / 3600) * 3600 - ((totals - (totals / 3600) * 3600) / 60) * 60) + "秒";
        }
        private void systemstarts204_Load(object sender, EventArgs e)
        {
            this.timer1.Start();
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            getTime();
        }
    }
}


2.5检索系统正在运行的任务

主要是使用了Process类中的GetProcesses方法为系统中正在运行的任务创建一个Process对象
所有代码:
richTextBox_task.Text = string.Empty;
            Process[] myProcesses = Process.GetProcesses();
            foreach (Process myProcess in myProcesses)
            {
                if (myProcess.MainWindowTitle.Length > 0)
                {
                    richTextBox_task.Text += "----------------------"+"\n";
                    richTextBox_task.Text += "任务名:" + myProcess.MainWindowTitle + "\n";
                    richTextBox_task.Text += "当前窗口主进程的句柄" + myProcess.MainWindowHandle + "\n";
                }
            }

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;
namespace SystemSettings
{
    public partial class RunningTask205 : Form
    {
        public RunningTask205()
        {
            InitializeComponent();
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            richTextBox_task.Text = string.Empty;
            Process[] myProcesses = Process.GetProcesses();
            foreach (Process myProcess in myProcesses)
            {
                if (myProcess.MainWindowTitle.Length > 0)
                {
                    richTextBox_task.Text += "----------------------" + "\n";
                    richTextBox_task.Text += "任务名:" + myProcess.MainWindowTitle + "\n";
                    richTextBox_task.Text += "当前窗口主进程的句柄" + myProcess.MainWindowHandle + "\n";

                }

            }
        }
        private void RunningTask205_Load(object sender, EventArgs e)
        {
            timer1.Start();
        }
    }
}


三.系统隐藏

3.1 隐藏显示任务栏

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;
namespace SystemSettings
{
    public partial class HideTaskbar301 : Form
    {
        private int SW_HIDE = 0;
        private int SW_RESTORE = 9;
        [DllImport("user32.dll")]
        public static extern int FindWindow(string lpClassName, string lpWindowName);
        [DllImport("user32.dll")]
        public static extern int ShowWindow(int hwnd, int nCmdShow);
        public HideTaskbar301()
        {
            InitializeComponent();
        }
        private void button_show_Click(object sender, EventArgs e)
        {
            ShowWindow(FindWindow("Shell_TrayWnd", null), SW_RESTORE);
        }
        private void button_hide_Click(object sender, EventArgs e)
        {
            ShowWindow(FindWindow("Shell_TrayWnd", null), SW_HIDE);
        }
    }
}


3.2隐藏显示开始按钮

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;
namespace SystemSettings
{
    public partial class HideStart302 : Form
    {
        public const int SW_HIDE = 0;
        public const int SW_SHOW = 5;
        [DllImport("user32.dll")]       //寻找窗口列表中第一个符合指定条件的顶级窗口
        public static extern int FindWindow(string lpClassName, string lpWindowName);
        [DllImport("user32.dll")]      //寻找窗口列表中指定与寻找条件相符的第1个子窗口
        public static extern int FindWindowEx(int hWnd1, int hWnd2, string lpsz1, string lpsz2);
        [DllImport("user32.dll")]      //控制窗口的可见性
        public static extern int ShowWindow(int hwnd, int nCmdShow);

        public HideStart302()
        {
            InitializeComponent();
        }
        private void button_hide_Click(object sender, EventArgs e)
        {
            ShowWindow(FindWindowEx(FindWindow("Shell_TrayWnd", null), 0, "Button", null), SW_HIDE);
        }
        private void button_show_Click(object sender, EventArgs e)
        {
            ShowWindow(FindWindowEx(FindWindow("Shell_TrayWnd", null), 0, "Button", null), SW_SHOW);
        }
        private void HideStart302_Load(object sender, EventArgs e)
        {
        }
    }
}


3.3隐藏显示桌面图标

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;
namespace SystemSettings
{
    public partial class HidedesktopIcos303 : Form
    {
        [DllImport("user32.dll")]
        public static extern bool ShowWindow(int hWnd, short nCmdShow);
        [DllImport("user32.dll")]
        public static extern int FindWindow(string lpClassName, string lpWindowName);
        private const int GW_CHILD = 5;
        private const int SW_HIDE = 0;
        private const int SW_SHOWNORMAL = 1;
        public HidedesktopIcos303()
        {
            InitializeComponent();
        }
        private void button_hide_Click(object sender, EventArgs e)
        {
            int hWnd1;
            hWnd1 = FindWindow("Progman", null);
            ShowWindow(hWnd1, SW_HIDE);
        }
        private void button_show_Click(object sender, EventArgs e)
        {
            int hWnd1;
            hWnd1 = FindWindow("Progman", null);
            ShowWindow(hWnd1, SW_SHOWNORMAL);
        }
        private void HidedesktopIcos303_Load(object sender, EventArgs e)
        {
        }
    }
}


3.4使桌面图标透明

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;
namespace SystemSettings
{
    public partial class DeskTopIco304 : Form
    {
        [DllImport("user32.dll")]
        public static extern int GetDesktopWindow(); //获得一个代表整个窗体(桌面)的句柄
        [DllImport("user32.dll")]
        public static extern int FindWindowEx(int Hwnd1, int Hwnd2, string lpsz1, string lpsz2);//在窗口列表中寻找与指定条件相符的第一个子窗口
        [DllImport("user32.dll")]
        public static extern int SendMessage(int hwnd, int wMg, int wParam, uint lParam);//调用一个窗口函数,将消息发给该窗口
        [DllImport("user32.dll")]    //屏蔽一个窗口客户区的全部或部分区域
        public static extern int InvalidateRect(int hwnd, ref Rectangle lpRect, bool bErase);
        private const int wMsg1 = 0x1026;
        private const int wMsg2 = 0x1024;
        private const uint lParam1 = 0xffffffff;
        private const uint lParam2 = 0x00ffffff;
        Rectangle lpRect = new Rectangle(0, 0, 0, 0);
        public DeskTopIco304()
        {
            InitializeComponent();
        }
        private void button_setting_Click(object sender, EventArgs e)
        {
            int hwnd;
            hwnd = GetDesktopWindow();
            hwnd = FindWindowEx(hwnd, 0, "Progman", null);
            hwnd = FindWindowEx(hwnd, 0, "SHELL_DefView", null);
            hwnd = FindWindowEx(hwnd, 0, "SysListView32", null);
            SendMessage(hwnd, wMsg1, 0, lParam1);
            SendMessage(hwnd, wMsg2, 0, lParam2);
            InvalidateRect(hwnd, ref lpRect, true);
            MessageBox.Show("设置成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
}

四.鼠标相关

4.1设置输入法

InputLanguage类可以设置计算机的输入法

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace SystemSettings
{
    public partial class InputLanguage401 : Form
    {
        public InputLanguage401()
        {
            InitializeComponent();
        }
        private void comboBox_Setting_SelectedIndexChanged(object sender, EventArgs e)
        {
            //获取选择的输入法
            InputLanguage mInput = InputLanguage.InstalledInputLanguages[comboBox_Setting.SelectedIndex];
            //设置当前输入法
            InputLanguage.CurrentInputLanguage = mInput;
            //获取当前输入法信息
            InputLanguage CurrentLanguage = InputLanguage.CurrentInputLanguage;
            this.label_Current.Text = CurrentLanguage.LayoutName;
            //设置输入法语言区域
            this.label_LanguageAreaShow.Text = CurrentLanguage.Culture.DisplayName;
            //获取默认输入法信息
            InputLanguage dInput = InputLanguage.DefaultInputLanguage;
            this.label_DefaultLanguage.Text = dInput.LayoutName;
        }
        private void InputLanguage401_Load(object sender, EventArgs e)
        {
            //获取已经安装的输入法列表
            InputLanguageCollection mInputs = InputLanguage.InstalledInputLanguages;
            foreach (InputLanguage mInput in mInputs)
            { this.comboBox_Setting.Items.Add(mInput.LayoutName); }
            //获取当前输入法信息
            InputLanguage CurrentInput = InputLanguage.CurrentInputLanguage;
            //获取当前输入法
            this.label_Current.Text = CurrentInput.LayoutName;
            //获取输入法区域
            this.label_LanguageAreaShow.Text = CurrentInput.Culture.DisplayName;
            //获取默认输入法
            InputLanguage defaultlanguage = InputLanguage.DefaultInputLanguage;
            this.label_DefaultLanguage.Text = defaultlanguage.LayoutName;
        }
    }
}

4.2获取鼠标在任意点的颜色值

通过API函数获得指定坐标的颜色值来获取屏幕颜色的获取
CreateDC 为专门的设备创建设备场景
GetPixel获取设备场景中一个像素的RGB值

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;
namespace SystemSettings
{
    public partial class MouseRGB402 : Form
    {
        [DllImport("gdi32.dll")]
        static public extern uint GetPixel(IntPtr hDC, int XPos, int YPos);
        [DllImport("gdi32.dll")]
        static public extern IntPtr CreateDC(string driverName, string deviceName, string output, IntPtr ipinitData);
        [DllImport("gdi32.dll")]
        static public extern bool DeleteDC(IntPtr DC);
        static public byte GetRValue(uint color)
        {
            return (byte)color;
        }
        static public byte GetGValue(uint color)
        {
            return ((byte)((short)(color) >> 8));
        }
        static public byte GetBValue(uint color)
        {
            return ((byte)((color) >> 16));
        }
        static public byte GetAValue(uint color)
        {
            return ((byte)((color) >> 24));
        }
        public Color GetColor(Point screenpoint)
        {
            //创建一个屏幕句柄
            IntPtr disPlayDC = CreateDC("DISPLAY", null, null, IntPtr.Zero);
            //取得鼠标所在位置的RGB值
            uint colorref = GetPixel(disPlayDC, screenpoint.X, screenpoint.Y);
            //删除场景
            DeleteDC(disPlayDC);
            //获取R G B值
            byte Red = GetRValue(colorref);
            byte Green = GetGValue(colorref);
            byte Blue = GetBValue(colorref);
            return Color.FromArgb(Red, Green, Blue);

        }
        public MouseRGB402()
        {
            InitializeComponent();
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            //获取鼠标的位置
            textBox_mouse.Text = Control.MousePosition.X.ToString() + "," + Control.MousePosition.Y.ToString();
            //实例化point
            Point pt = new Point(Control.MousePosition.X, Control.MousePosition.Y);
            //获取鼠标位置颜色
            Color cl = GetColor(pt);
            //显示该颜色
            pictureBox_show.BackColor = cl;
            textBox_RGB.Text = cl.R + "," + cl.G + "," + cl.B;
            textBox_color.Text = ColorTranslator.ToHtml(cl).ToString();
            textBox_win.Text = ColorTranslator.ToWin32(cl).ToString();
        }
        private void checkBox_TopMost_MouseUp(object sender, MouseEventArgs e)
        {
            if (this.checkBox_TopMost.Checked)
                this.TopMost = true;
            else
            {
                this.TopMost = false;
            }
        }
        private void MouseRGB402_Load(object sender, EventArgs e)
        {
            timer1.Start();
        }
    }
}


4.3切换鼠标左右键

SwapMouseButton函数用于决定是否切换鼠标左右键
GetSystemMetrics函数返回与windows环境有关的信息

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace SystemSettings
{
    public partial class MouseTab403 : Form
    {
        [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SwapMouseButton")]
        public extern static int SwapMouseButton(int bSwap);
        [System.Runtime.InteropServices.DllImport("user32.dll")]
        public extern static int GetSystemMetrics(int nIndex);
        const int SM_SWAPBUTTON = 23;

        public MouseTab403()
        {
            InitializeComponent();
        }
        private void checkBox_mouse_CheckedChanged(object sender, EventArgs e)
        {
            if (this.checkBox_mouse.Checked)
            {
                SwapMouseButton(1);
            }
            else
            {
                SwapMouseButton(0);

            }
            if (GetSystemMetrics(SM_SWAPBUTTON) == 1)
            {
                MessageBox.Show("右键为主要功能键");
            }
            else
            {
                MessageBox.Show("恢复左键为主要功能键");
            }
        }
    }
}

4.4限制鼠标活动区域

将鼠标限制在一个固定的范围内

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace SystemSettings
{
    public partial class LimitMouseActive404 : Form
    {
        public LimitMouseActive404()
        {
            InitializeComponent();
        }
        private void 限制鼠标活动区域ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Cursor = new Cursor(Cursor.Handle);
            Cursor.Position = new Point(this.Location.X, this.Location.Y);
            Cursor.Clip = new Rectangle(this.Location, this.Size);//设置鼠标的活动区域
        }
        private void 取消限制ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Screen[] screens = Screen.AllScreens;                //获取显示的数组
            this.Cursor = new Cursor(Cursor.Current.Handle);     //创建cursor对象
            Cursor.Clip = screens[0].Bounds;                      //解除限制
        }
    }
}


五.磁盘属性

5.1获取磁盘序列号

.NET相关的获取硬盘物理序列号的方法,主要分为使用WMI方式和API方式。但这些方法均可能有问题。
1.使用WMI方式,有的机器根本取不到硬盘序列号,有的方式在Vista下面会报错。
2.还可以使用另外一WMI方式,就是查询 PNPDeviceID 的 signature
使用WMI方式需要客户机开启WMI服务,但这个往往不能保证,所以使用这种方式有一定局限性。
3.最好的一种是使用API方式。
在网上找到一片资料,说使用 RING3调用 API DeviceIoControl()来获取硬盘信息,下面是原话:
硬盘序列号(Serial Number)不等于卷标号(Volume Name),后者虽然很容易得到,但是格式化分区后就会重写,不可靠。遗憾的是很多朋友往往分不清这一点。
要得到硬盘的物理序列号,可以通过WMI,也就是Win32_PhysicalMedia.SerialNumber。可惜的是Windows 98/ME的WMI并不支持这个类,访问时会出现异常。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Management;
namespace DiskSystem
{
    public partial class DiskSerialNumber101 : Form
    {
        public DiskSerialNumber101()
        {
            InitializeComponent();
        }
        private void DiskSerialNumber101_Load(object sender, EventArgs e)
        {
            textBox_DiskSerialNumber.Text = AtapiDevice.GetHddInfo(0).SerialNumber.ToString();
            textBox_diskid.Text = AtapiDevice.GetHddInfo(0).ModuleNumber.ToString();
        }
    }
}

5.2获取映射驱动器路径

主要是通过WMI查询获取映射驱动器

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Management;
namespace DiskSystem
{
    public partial class Getmappeddrivepath102 : Form
    {
        public Getmappeddrivepath102()
        {
            InitializeComponent();
        }
        private void Getmappeddrivepath102_Load(object sender, EventArgs e)
        {
            listBox_gmdp.Items.Clear();
            SelectQuery selectQuery = new SelectQuery("select * from win32_logicaldisk");
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(selectQuery);
            int i = 0;
            foreach (ManagementObject mo in searcher.Get())
            {
                string DriveType;
                DriveType = mo["DriveType"].ToString();
                if (DriveType == "4")
                {
                    listBox_gmdp.Items.Add(mo["Name"].ToString());
                }
                i++;

            }
        }
    }
}

5.3判断驱动器类型

用WMI获取系统驱动器  通过DriveInfo类来判断驱动器的类型

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Management;
using System.IO;
namespace DiskSystem
{
    public partial class Determinethedrivetype103 : Form
    {
        public Determinethedrivetype103()
        {
            InitializeComponent();
        }
        private void comboBox_d_SelectedIndexChanged(object sender, EventArgs e)
        {
            string DriveType = "";
            MessageBox.Show(comboBox_d.SelectedItem.ToString());
            DriveInfo dinfo = new DriveInfo(comboBox_d.SelectedItem.ToString().Trim());
            try
            {
                DriveType = dinfo.DriveType.ToString();
                switch (DriveType)
                {
                    case "Unknown":
                        textBox_show.Text = "未知设备";
                        break;
                    case "NoRootDirectory":
                        textBox_show.Text = "未知分区";
                        break;
                    case "Removable":
                        textBox_show.Text = "这是可移动磁盘";
                        break;
                    case "NetWork":
                        textBox_show.Text = "这是网络驱动器";
                        break;
                    case "CDRun":
                        textBox_show.Text = "这是光驱";
                        break;
                    case "Fixed":
                        textBox_show.Text = "这是硬盘";
                        break;
                    default:
                        textBox_show.Text = "这是未知类型";
                        break;
                }
            }
            catch
            {
            }
        }
        private void Determinethedrivetype103_Load(object sender, EventArgs e)
        {
            SelectQuery selectQueery = new SelectQuery("select * from win32_logicaldisk");
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(selectQueery);
            foreach (ManagementObject mo in searcher.Get())
            {
                comboBox_d.Items.Add(mo["Name"].ToString());
            }
        }
    }
}

5.4获取所有逻辑驱动器

本例中获取驱动器的方法和前面的方式不一样
使用的是System.IO.Directory.GetLogicalDrives();

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace DiskSystem
{
    public partial class AllLogicalDrive104 : Form
    {
        public AllLogicalDrive104()
        {
            InitializeComponent();
        }
        private void AllLogicalDrive104_Load(object sender, EventArgs e)
        {
            string[] logicdrivces = System.IO.Directory.GetLogicalDrives();
            for (int i = 0; i < logicdrivces.Length; i++)
            {
                listBox_show.Items.Add(logicdrivces[i]);
            }
        }
    }
}

六.磁盘设置

6.1取消磁盘共享

 本例子是通过进程调用其他进程来达到指定的目的

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace DiskSystem
{
    public partial class CancelDiskSharing201 : Form
    {
        public CancelDiskSharing201()
        {
            InitializeComponent();
        }
        private void button_setting_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process myProcess = new System.Diagnostics.Process();
            myProcess.StartInfo.FileName = "cmd.exe";
            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("NET SHARE " + textBox_txt.Text.Trim() + "$/DEL");
            MessageBox.Show("执行成功", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        private void CancelDiskSharing201_Load(object sender, EventArgs e)
        {
        }
    }
}

6.2驱动器容量

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Management;
using System.IO;
namespace DiskSystem
{
    public partial class DriveCapacity202 : Form
    {
        public DriveCapacity202()
        {
            InitializeComponent();
        }
        private void DriveCapacity202_Load(object sender, EventArgs e)
        {
            SelectQuery selectQuery = new SelectQuery("select * from win32_logicaldisk");
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(selectQuery);
            foreach (ManagementObject disk in searcher.Get())
            {
                comboBox_show.Items.Add(disk["Name"].ToString());
            }

        }
        private void comboBox_show_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                DriveInfo dinfo = new DriveInfo(comboBox_show.SelectedItem.ToString().Trim());
                textBox_totals.Text = "驱动器总容量为:" + ((dinfo.TotalSize / 1024) / 1024) + "M";
                textBox_Remaining.Text = "驱动器剩余容量为:" + ((dinfo.TotalFreeSpace / 1024) / 1024) + "M";
            }
            catch
            {

            }
        }
    }
}

6.3图标显示磁盘容量

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Management;
using System.IO;
namespace DiskSystem
{
    public partial class DiskCapacityWithChart203 : Form
    {
        public DiskCapacityWithChart203()
        {
            InitializeComponent();
        }
        private void DiskCapacityWithChart203_Load(object sender, EventArgs e)
        {
            SelectQuery selectQuery = new SelectQuery("select * from win32_logicaldisk");
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(selectQuery);
            foreach (ManagementObject disk in searcher.Get())
            {
                comboBox_show.Items.Add(disk["Name"].ToString());
            }
        }
        private void comboBox_show_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                DriveInfo dinfo = new DriveInfo(comboBox_show.SelectedItem.ToString().Trim());
                float tsize = dinfo.TotalSize;
                float fsize = dinfo.TotalFreeSpace;
                Graphics graphics = this.CreateGraphics();
                Pen pen1 = new Pen(Color.Red);
                Brush brush1 = new SolidBrush(Color.WhiteSmoke);
                Brush brush2 = new SolidBrush(Color.LimeGreen);
                Brush brush3 = new SolidBrush(Color.RoyalBlue);
                Font font1 = new Font("Courier New ", 16, FontStyle.Bold);
                Font font2 = new Font("宋体", 9);
                graphics.DrawString(comboBox_show.SelectedItem.ToString().Trim() + "磁盘容量分析", font1, brush2, new Point(60, 50));
                float angle1 = Convert.ToSingle((360 * (Convert.ToSingle(fsize / 100000000000) / Convert.ToSingle(tsize / 100000000000))));
                float angle2 = Convert.ToSingle((360 * (Convert.ToSingle(tsize - fsize) / 100000000000) / Convert.ToSingle(tsize / 100000000000)));
                graphics.FillPie(brush2, 60, 80, 150, 150, 0, angle1);
                graphics.FillPie(brush3, 60, 80, 150, 150, angle1, angle2);
                graphics.DrawRectangle(pen1, 30, 235, 200, 50);
                graphics.FillRectangle(brush2, 35, 245, 20, 10);
                graphics.DrawString("磁盘剩余容量:" + dinfo.TotalSize / 1000 + "KB", font2, brush2, 55, 245);
                graphics.DrawString("磁盘已用容量" + (dinfo.TotalSize - dinfo.TotalFreeSpace) / 1000 + "KB", font2, brush2, 55, 265);
            }
            catch
            {

            }
        }
    }
}

6.4磁盘格式化

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Management;
using System.Runtime.InteropServices;
namespace DiskSystem
{
    public partial class DiskFormat204 : Form
    {
        [DllImport("shell32.dll")]
        private static extern int SHFormatDrive(IntPtr hWnd, int drive, long fmtID, int Options);
        public const long SHF_ID_DEFAULT = 0xFFFF;
        public DiskFormat204()
        {
            InitializeComponent();
        }
        private void comboBox_show_SelectedIndexChanged(object sender, EventArgs e)
        {
        }
        private void DiskFormat204_Load(object sender, EventArgs e)
        {
            SelectQuery selectQuery = new SelectQuery("select * from win32_logicaldisk");
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(selectQuery);
            foreach (ManagementObject disk in searcher.Get())
            {
                comboBox_show.Items.Add(disk["Name"].ToString());
            }
        }
        private void button_setting_Click(object sender, EventArgs e)
        {
            try
            {
                SHFormatDrive(this.Handle, comboBox_show.SelectedIndex, SHF_ID_DEFAULT, 0);
                MessageBox.Show("格式化成功");
            }
            catch
            {
                MessageBox.Show("格式化失败");
            }
        }
    }
}

七.程序控制

7.1打开控制面板的程序               

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace ApplicationC
{
    public partial class ControlPanel101 : Form
    {
        public ControlPanel101()
        {
            InitializeComponent();
        }
        private void ControlPanel101_Load(object sender, EventArgs e)
        {

        }
        private void comboBox_show_SelectedIndexChanged(object sender, EventArgs e)
        {
            string text = comboBox_show.SelectedItem.ToString().Trim();
            string value = "";
            switch (text)
            {
                case "系统属性":
                    value = "sysdm.cpl";
                    break;
                case "网络连接":
                    value = "ncpa.cpl";
                    break;
                case "显示属性":
                    value = "desk.cpl";
                    break;
                case "鼠标属性":
                    value = "main.cpl";
                    break;
                case "电源选项":
                    value = "powercfg.cpl";
                    break;
                case "用户帐户":
                    value = "nusrmgr.cpl";
                    break;
                case "安全中心":
                    value = "wscui.cpl";
                    break;
                case "辅助功能选项":
                    value = "access.cpl";
                    break;
                case "添加硬件向导":
                    value = "hdwwiz.cpl";
                    break;
                case "Java控制面板":
                    value = "javacpl.cpl";
                    break;
                case "自动更新配置":
                    value = "wuaucpl.cpl ";
                    break;
                case "网络安装向导":
                    value = "netsetup.cpl";
                    break;
                case "Internet属性":
                    value = "inetcpl.cpl ";
                    break;
                case "声音与音频设置":
                    value = "mmsys.cpl";
                    break;
                case "区域与语言设置":
                    value = "intl.cpl";
                    break;
                case "游戏控制器设置":
                    value = "joy.cpl ";
                    break;
                case "时间和日期属性":
                    value = "timedate.cpl";
                    break;
                case "添加或删除程序":
                    value = "appwiz.cpl";
                    break;
                case "nVidia控制面板":
                    value = "firewall.cpl";
                    break;
                case "ODBC数据源管理器":
                    value = "odbccp32.cpl";
                    break;
                case "Intel集成显卡设置":
                    value = "igfxcpl.cpl";
                    break;
                case "Windows防火墙/ICS设置":
                    value = "nvcpl.cpl";
                    break;
                default:
                    value = "";
                    break;
            }
            try
            {
                if (value != "" || value != null)
                {
                    System.Diagnostics.Process.Start(value);
                }
            }
            catch
            {
                MessageBox.Show("系统文件丢失");
            }
        }
    }
}

7.2添加磁盘到托盘               

主要使用NotifyIcon控件

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace ApplicationC
{
    public partial class AddProgramToTheTray102 : Form
    {
        public AddProgramToTheTray102()
        {
            InitializeComponent();
        }
        private void AddProgramToTheTray102_Load(object sender, EventArgs e)
        {
            this.notifyIcon1.Icon = Properties.Resources.accerciser;
            this.notifyIcon1.Visible = false;
        }
        private void button_NotifyIcon_Click(object sender, EventArgs e)
        {
            this.notifyIcon1.Visible = true;
        }
        private void 恢复ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.notifyIcon1.Visible = false;
        }
    }
}

7.3任务栏上不出现图标               

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace ApplicationC
{
    public partial class NoTaskbarIcon103 : Form
    {
        public NoTaskbarIcon103()
        {

            InitializeComponent();
        }

        private void button_setting_Click(object sender, EventArgs e)
        {
            MessageBox.Show("窗体的ShowInTaskbar属性可以用来控制程序是否在任务栏显示");

        }
        private void NoTaskbarIcon103_Load(object sender, EventArgs e)
        {
            this.Icon = Properties.Resources.accerciser;

        }
    }
}

7.4调用外部EXE文件               

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace ApplicationC
{
    public partial class CallEXE104 : Form
    {
        public CallEXE104()
        {
            InitializeComponent();
        }
        private void button_CallEXE_Click(object sender, EventArgs e)
        {
            try
            {
                OpenFileDialog ofd = new OpenFileDialog();
                ofd.Filter = "EXE文件(*.exe)|*.exe";
                ofd.ShowDialog();
                System.Diagnostics.Process.Start(ofd.FileName);
            }
            catch
            {

            }
        }
    }
}

7.5关闭外部程序

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;
namespace ApplicationC
{
    public partial class CloseProgram105 : Form
    {
        public CloseProgram105()
        {
            InitializeComponent();
        }
        private void CloseProgram105_Load(object sender, EventArgs e)
        {
            listBox_show.Items.Clear();
            Process[] myProcess = Process.GetProcesses();
            foreach (Process mp in myProcess)
            {
                if (mp.MainWindowTitle.Length > 0)
                    listBox_show.Items.Add(mp.ProcessName.ToString().Trim());
            }
        }
        private void button_close_Click(object sender, EventArgs e)
        {
            Process[] myProcesses = Process.GetProcessesByName(listBox_show.SelectedItem.ToString().Trim());
            foreach (Process myProcess in myProcesses)
            {
                myProcess.CloseMainWindow();
            }
            listBox_show.Items.RemoveAt(listBox_show.SelectedIndex);
            MessageBox.Show("该进程已关闭");
        }
    }
}

八.程序运行
8.1防止程序多次运行               

Path类的GetFileNameWithoutExtension方法获得指定路径字符串的文件名,然后使用
Process类的GetProcessesByName方法创建一个Process类型数组,并将该数组与本地计算机上共享指定进程的所有进程相关的资源

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.IO;
namespace ApplicationC
{
    public partial class RunOnce201 : Form
    {
        public RunOnce201()
        {
            InitializeComponent();
        }
        private void RunOnce201_Load(object sender, EventArgs e)
        {
            string MName = Process.GetCurrentProcess().MainModule.ModuleName;
            string PName = Path.GetFileNameWithoutExtension(MName);//返回指定字符串的文件名
            Process[] myProcess = Process.GetProcessesByName(PName);//根据文件名创建进程资源数组
            if (myProcess.Length > 1)
            {
                MessageBox.Show("本程序模块只能运行一次!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                this.Close();
            }
        }
    }
}

8.2获取任务栏尺寸               

FindWindow可以用来返回任务栏所在类Shell_TrayWnd的句柄
GetWindowRect是windowAPI提供的拥有获得任意一个窗口的矩阵范围的函数

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;
namespace ApplicationC
{
    public partial class TaskbarSize202 : Form
    {
        [DllImport("user32.dll")]
        public static extern int FindWindow(string ipClassName, string ipWindowName); //声明API函数FindWindow
        [DllImport("user32.dll")]
        public static extern int GetWindowRect(int hwnd, ref Rectangle ipRect);
        Rectangle myrect;
        public TaskbarSize202()
        {
            InitializeComponent();
        }
        private void TaskbarSize202_Load(object sender, EventArgs e)
        {
            if (GetWindowRect(FindWindow("Shell_TrayWnd", null), ref myrect) == 0)
            {
                return;
            }
            else
            {
                this.textBox_left.Text = Convert.ToString(myrect.Left);
                this.textBox_right.Text = Convert.ToString(myrect.Right);
                this.textBox_Bottom.Text = Convert.ToString(myrect.Bottom);
                this.textBox_Top.Text = Convert.ToString(myrect.Top);
            }
        }
    }
}

8.3程序运行时禁止关机               

 windows系统关机时,它会给正在运行的应用程序发送一个WM_QUERYENDSESSION消息
,通知应用程序,系统即将关机,如果应用程序返回的消息为0 ,系统就不会关机 这样就能实现禁止
关机的目的:
重写了 WndProc

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace ApplicationC
{
    public partial class ProhibitionShutDown203 : Form
    {
        private int isClose = 0;                       //声明一个变量表示是否关机
        private const int WM_QUERYENDSESSION = 0x0011; //系统发送的关机命令
        protected override void WndProc(ref Message m) //此方法用于处理Windows消息
        {
            switch (m.Msg)
            {
                case WM_QUERYENDSESSION:
                    m.Result = (IntPtr)isClose;
                    break;
                default:
                    base.WndProc(ref m);
                    break;
            }
        }
        public ProhibitionShutDown203()
        {
            InitializeComponent();
        }
        private void button_AllowedShutdown_Click(object sender, EventArgs e)
        {
            isClose = 1;
            MessageBox.Show("允许关机");
        }
        private void button_ProhibitionShutDown_Click(object sender, EventArgs e)
        {
            isClose = 0;
            MessageBox.Show("禁止关机");
        }
    }
}

8.4改变系统提示信息               

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace ApplicationC
{
    public partial class ChangeTheSystemMessage204 : Form
    {
        public ChangeTheSystemMessage204()
        {
            InitializeComponent();
        }
        private void ChangeTheSystemMessage204_Load(object sender, EventArgs e)
        {
            toolTip1.InitialDelay = 1000;            //设置显示之前经过的时间
            toolTip1.ReshowDelay = 500;              //设置出现提示窗口出现的时间
            toolTip1.ShowAlways = true;              //设置是否显示提示窗口
            toolTip1.SetToolTip(this.groupBox_title, "提示有变化了吧"); //设置文本与控件关联
        }

    }
}


8.5获取环境变量               

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
namespace ApplicationC
{
    public partial class EnvironmentVariable205 : Form
    {
        public EnvironmentVariable205()
        {
            InitializeComponent();
        }
        private void EnvironmentVariable205_Load(object sender, EventArgs e)
        {
            listView_show.View = View.Details;                                //设置控件显示方式
            listView_show.GridLines = true;                                   //是否显示网格
            listView_show.Columns.Add("环境变量", 150, HorizontalAlignment.Left); //添加列表格
            listView_show.Columns.Add("变量值", 150, HorizontalAlignment.Left);    //添加列表格
            ListViewItem myItem;
            foreach (DictionaryEntry DEntry in Environment.GetEnvironmentVariables())
            {
                myItem = new ListViewItem(DEntry.Key.ToString(), 0);
                myItem.SubItems.Add(DEntry.Value.ToString());
                listView_show.Items.Add(myItem);
            }
        }
    }
}

8.6启动屏幕保护

通过SendMessage向窗口发送消息来启动计算机屏幕保护程序

 

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;
namespace ApplicationC
{
    public partial class StartScreenSaver206 : Form
    {
        [DllImport("user32.dll")]
        public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
        private const int WM_SYSCOMMAND = 0x2062;
        private const int SC_SCREENSAVE = 0xf140;
        public StartScreenSaver206()
        {
            InitializeComponent();
        }
        private void button_StartScreenSaver_Click(object sender, EventArgs e)
        {
            //用消息启动屏幕保护程序
            SendMessage(this.Handle, WM_SYSCOMMAND, SC_SCREENSAVE, 0);
        }
        private void StartScreenSaver206_Load(object sender, EventArgs e)
        {
        }
    }
}

本文源码下载  作者其他源码下载


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值