首页 新闻 会员 周边 捐助

求一个C#写的自动开机/关机/倒计时关机的程序

0
[已解决问题] 解决于 2008-12-10 16:51

最好有能编辑的吧!

麻烦了  发到我的邮箱

hbhdwjz@qq.com

谢谢

描述问题:用c#写个倒计时关机的程序/

 

Jinzhi的主页 Jinzhi | 菜鸟二级 | 园豆:240
提问于:2008-12-09 22:40
< >
分享
最佳答案
0

  using System;
  using System.Runtime.InteropServices;
  
  class shoutdown{
   [StructLayout(LayoutKind.Sequential, Pack=1)]
   internal struct TokPriv1Luid
   {
   public int Count;
   public long Luid;
   public int Attr;
   }
  
   [DllImport("kernel32.dll", ExactSpelling=true) ]
   internal static extern IntPtr GetCurrentProcess();
  
   [DllImport("advapi32.dll", ExactSpelling=true, SetLastError=true) ]
   internal static extern bool OpenProcessToken( IntPtr h, int acc, ref IntPtr phtok );
  
   [DllImport("advapi32.dll", SetLastError=true) ]
   internal static extern bool LookupPrivilegeValue( string host, string name, ref long pluid );
  
   [DllImport("advapi32.dll", ExactSpelling=true, SetLastError=true) ]
   internal static extern bool AdjustTokenPrivileges( IntPtr htok, bool disall,
  ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen );
  
   [DllImport("user32.dll", ExactSpelling=true, SetLastError=true) ]
   internal static extern bool ExitWindowsEx( int flg, int rea );
  
   internal const int SE_PRIVILEGE_ENABLED = 0x00000002;
   internal const int TOKEN_QUERY = 0x00000008;
   internal const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;
   internal const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
   internal const int EWX_LOGOFF = 0x00000000;
   internal const int EWX_SHUTDOWN = 0x00000001;
   internal const int EWX_REBOOT = 0x00000002;
   internal const int EWX_FORCE = 0x00000004;
   internal const int EWX_POWEROFF = 0x00000008;
   internal const int EWX_FORCEIFHUNG = 0x00000010;
  
   private static void DoExitWin(int flg)
   {
   bool ok;
   TokPriv1Luid tp;
   IntPtr hproc = GetCurrentProcess();
   IntPtr htok = IntPtr.Zero;
   ok = OpenProcessToken( hproc, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, ref htok );
   tp.Count = 1;
   tp.Luid = 0;
   tp.Attr = SE_PRIVILEGE_ENABLED;
   ok = LookupPrivilegeValue( null, SE_SHUTDOWN_NAME, ref tp.Luid );
   ok = AdjustTokenPrivileges( htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero );
   ok = ExitWindowsEx( flg, 0 );
   }
  
   public static void Main()
   {
   Console.WriteLine("正在关闭计算机……");
   // 修改 EWX_SHUTDOWN 或者 EWX_LOGOFF, EWX_REBOOT等实现不同得功能。
   // 在XP下可以看到帮助信息,以得到不同得参数
   // SHUTDOWN /?
   DoExitWin(EWX_SHUTDOWN);
   }
  }

Astar | 高人七级 |园豆:40805 | 2008-12-09 23:32
其他回答(5)
0

这还要源代码?

Timer控件会用不?

如果会用就简单了,用C#创建一个进程,调用CMD,传入参数为“shutdown /s”,一分钟后关机。

/r 是一分钟后重启,/p是立即关机,/g是重启系统后恢复运行的应用程序,/h是休眠,/a是取消上述的任何动作

上不了岸的鱼 | 园豆:4613 (老鸟四级) | 2008-12-09 22:58
0

自动开机?压根不可能了

Gray Zhang | 园豆:17610 (专家六级) | 2008-12-10 09:20
0

有一定的硬件支持和配备相应的软件,企业内部自动开机也是可能!例如英特尔博睿技术

GUO Xingwang | 园豆:3885 (老鸟四级) | 2008-12-10 09:33
0

只有想不到,没有做不到...

有所为,有所不为 | 园豆:1200 (小虾三级) | 2008-12-10 10:21
0

  自动开机? 绝对不可能

问天何必 | 园豆:3311 (老鸟四级) | 2008-12-10 10:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册