如何实现自动关闭计算机 C#

lucky749 2007-12-12 11:25:32
如题。
请大侠们出手相救.小弟不胜感激
...全文
179 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ustbwuyi 2007-12-12
  • 打赏
  • 举报
回复
用C#来执行关机命令呢,试试,没测过

string command = "shutdown -f -s -t 0";
Process newProcess = new Process();
newProcess.StartInfo.FileName = "cmd.exe";
newProcess.StartInfo.UseShellExecute = false;
newProcess.StartInfo.CreateNoWindow = true;
newProcess.StartInfo.RedirectStandardOutput = true;
newProcess.StartInfo.RedirectStandardInput = true;
newProcess.StartInfo.RedirectStandardError = true;
try
{
newProcess.Start();
newProcess.StandardInput.WriteLine(command);
newProcess.StandardInput.Close();
output = newProcess.StandardOutput.ReadToEnd();
newProcess.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
NewUser2008 2007-12-12
  • 打赏
  • 举报
回复
up
lucky749 2007-12-12
  • 打赏
  • 举报
回复
感谢上面的大哥.但是不能实现关机.只是关闭了一些应用程序
是否也可以做到重启.注销?
大侠们.是时候出手啦你们
北京的雾霾天 2007-12-12
  • 打赏
  • 举报
回复
抄别人的一段代码,没有测试,楼主试一下吧:

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);
}
}
lucky749 2007-12-12
  • 打赏
  • 举报
回复
自己帮顶.最好给源代码参考.小弟初学
lucky749 2007-12-12
  • 打赏
  • 举报
回复
都不行啊.我快晕死
lucky749 2007-12-12
  • 打赏
  • 举报
回复
都不行啊.\我快晕死

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧