获取系统本次开机时间 :DateTime.Now.AddMilliseconds(-Environment.TickCount);
通过注册表设置程序开机自启
#region
/// <summary>
/// 开机启动项
/// </summary>
/// <param name="Started">是否启动</param>
/// <param name="name">启动值的名称</param>
/// <param name="path">启动程序的路径 Application.ExecutablePath</param>
public static void RunWhenStart(bool Started, string name, string path)
{
Microsoft.Win32.RegistryKey HKLM = Microsoft.Win32.Registry.LocalMachine;
Microsoft.Win32.RegistryKey Run = HKLM.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run");
if (Started == true)
{
try
{
Run.SetValue(name, path);
HKLM.Close();
}
catch { }
}
else
{
try
{
Run.DeleteValue(name);
HKLM.Close();
}
catch { }
}
}
#endregion
通过运行 msconfig可查看是否成功修改注册表
//——————————————————————————————————————————我是一条一本正经的分割线——————————————————————————————————————————————————————————————————————————————————————————————————————————
//获取系统关机或注销
/// <summary>
/// 窗口过程的回调函数/// </summary>
///<param name="m">
private const int WM_QUERYENDSESSION = 0x0011;
{
switch (m.Msg)
{
//此消息在OnFormClosing之前
case WindowsMessage.WM_QUERYENDSESSION:
//MessageBox.Show(WndProc.WM_QUERYENDSESSION.我要阻止系统关闭!);
//this.Close();
//this.Dispose();
//Application.Exit();
m.Result = (IntPtr)1; //阻止Windows注销、关机或重启
break;
default:
break;
}
base.WndProc(ref m);
}
方法二:
protected override void OnFormClosing(FormClosingEventArgs e)
{
switch (e.CloseReason)
{
case CloseReason.ApplicationExitCall:
e.Cancel = true;
MessageBox.Show(拦截关闭要求事件!);
break;
case CloseReason.FormOwnerClosing:
e.Cancel = true;
MessageBox.Show(拦截自身关闭事件!);
break;
case CloseReason.MdiFormClosing:
e.Cancel = true;
MessageBox.Show(拦截MDI窗体关闭事件!);
break;
case CloseReason.None:
break;
case CloseReason.TaskManagerClosing:
e.Cancel = true;
MessageBox.Show(拦截任务管理器关闭事件!);
break;
case CloseReason.UserClosing:
//注销或关机会触发此事件;
//MessageBox.Show(拦截用户关闭事件!);
e.Cancel = false;
break;
case CloseReason.WindowsShutDown:
e.Cancel = true;
MessageBox.Show(拦截关机事件!);
break;
default:
break;
}
base.OnFormClosing(e);
}
方法三:
//当用户试图注销或关闭系统时发生。
SystemEvents.SessionEnding += new SessionEndingEventHandler(SystemEvents_SessionEnding);
//下面是系统注销或关闭事件处理程序,
private void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e)
{
if (MessageBox.Show(this, 是否允许系统注销!, 系统提示, MessageBoxButtons.YesNo) != DialogResult.Yes)
{
e.Cancel = true;
}
else
{
e.Cancel = false;
}
SessionEndReasons reason = e.Reason;
switch (reason)
{
case SessionEndReasons.Logoff:
MessageBox.Show(用户正在注销。操作系统继续运行,但启动此应用程序的用户正在注销。);
break;
case SessionEndReasons.SystemShutdown:
MessageBox.Show(操作系统正在关闭。);
break;
}
}
//如果把上面的事件处理程序修改成如下
//private void SystemEvents_SessionEnding(object sender, SessionEndingEventArgs e)
// {
// e.Cancel = true;
// }
//那会出现什么情况,你点击开始菜单关机选择注销、关机、或重新启动将会失效,电脑不能正常关机了,进一步的话把程序做成Windows服务,晕,恶作剧?
//SessionEnded事件同上,事件参数类为SessionEndedEventArgs,同SessionEndingEventArgs相比少了Cancel属性,Cancel属性同一些windows下的某些事件差不多,比如Form.Closing事件,Control.Validating事件。
//——————————————————————————————我是分割线————————————————————————————获取盘符信息
工具类:HardDiskPartition.cs
///
/// 盘符信息
///
public class HardDiskPartition
{
#region Data
private string _PartitionName;
private double _FreeSpace;
private double _SumSpace;
#endregion //Data
#region Properties
///
/// 空余大小
///
public double FreeSpace
{
get { return _FreeSpace; }
set { this._FreeSpace = value; }
}
///
/// 使用空间
///
public double UseSpace
{
get { return _SumSpace - _FreeSpace; }
}
///
/// 总空间
///
public double SumSpace
{
get { return _SumSpace; }
set { this._SumSpace = value; }
}
///
/// 分区名称
///
public string PartitionName
{
get { return _PartitionName; }
set { this._PartitionName = value; }
}
///
/// 是否主分区
///
public bool IsPrimary
{
get
{
//判断是否为系统安装分区
if (System.Environment.GetEnvironmentVariable("windir").Remove(2) == this._PartitionName)
{
return true;
}
else
{
return false;
}
}
}
#endregion //Properties
}
//获取盘符信息
private void button1_Click(object sender, EventArgs e)
{
try
{
List<utils.HardDiskPartition> listInfo = GetDiskListInfo();
if (listInfo != null && listInfo.Count > 0)
{
listBox1.Items.Clear();
foreach (HardDiskPartition disk in listInfo)
{
listBox1.Items.Add(string.Format("{0} 总空间:{1} GB,剩余:{2} GB", disk.PartitionName, ManagerDoubleValue(disk.SumSpace, 1), ManagerDoubleValue(disk.FreeSpace, 1)));
}
}
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 处理Double值,精确到小数点后几位
/// </summary>
/// <param name="_value">值</param>
/// <param name="Length">精确到小数点后几位</param>
/// <returns>返回值</returns>
private double ManagerDoubleValue(double _value, int Length)
{
if (Length < 0)
{
Length = 0;
}
return System.Math.Round(_value, Length);
}
/// <summary>
/// 获取硬盘上所有的盘符空间信息列表
/// </summary>
/// <returns></returns>
private List<HardDiskPartition> GetDiskListInfo()
{
List<HardDiskPartition> list = null;
//指定分区的容量信息
try
{
SelectQuery selectQuery = new SelectQuery("select * from win32_logicaldisk");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(selectQuery);
ManagementObjectCollection diskcollection = searcher.Get();
if (diskcollection != null && diskcollection.Count > 0)
{
list = new List<HardDiskPartition>();
HardDiskPartition harddisk = null;
foreach (ManagementObject disk in searcher.Get())
{
int nType = Convert.ToInt32(disk["DriveType"]);
if (nType != Convert.ToInt32(DriveType.Fixed))
{
continue;
}
else
{
harddisk = new HardDiskPartition();
harddisk.FreeSpace = Convert.ToDouble(disk["FreeSpace"]) / (1024 * 1024 * 1024);
harddisk.SumSpace = Convert.ToDouble(disk["Size"]) / (1024 * 1024 * 1024);
harddisk.PartitionName = disk["DeviceID"].ToString();
list.Add(harddisk);
}
}
}
}
catch (Exception)
{
}
return list;
}
//将盘符信息追加保存到指定文件
private void button1_Click_1(object sender, EventArgs e)
{
string data = this.label1.Text.ToString()+"\t\n";
foreach (var item in listBox1.Items)
{
data += item.ToString()+"\t\n";
}
String filePathName=SaveToNativeFile(data,System.Windows.Forms.Application.StartupPath+@"\data.txt",false);
this.label2.Text = filePathName;
}
/// <summary>
/// 保存数据data到原文件filePathName中
/// </summary>
public String SaveToNativeFile(String data, String filePathName, bool mute)
{
try
{
System.IO.StreamWriter file1 = new System.IO.StreamWriter(filePathName, true); //文件已追加方式添加内容
file1.Write(data); //保存数据到文件
file1.Close(); //关闭文件
file1.Dispose(); //释放对象
if (!mute) MessageBox.Show("成功导出数据到:“" + filePathName + "”!");
return filePathName;
}
catch (Exception)
{
}
return null;
/**
FileStream fs = new FileStream("D:\aa.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("add line information");
**/
}