C#实现电脑定时开关机的源码

powerchuangwai 2011-10-21 10:15:39
如题!

需求:设置电脑每天晚上0点自动关机,8点自动开机!

有没有用c#编写的源码!
...全文
1260 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
shiyouye 2011-12-02
  • 打赏
  • 举报
回复
软件直接肯定不可以,windows有自带的sechedule可以做到。
使用kernel32.dll也可以做到定时开机(不知道具体怎么做)。。。

他们都是通过设置rtc来实现的。。。

powerchuangwai 2011-10-25
  • 打赏
  • 举报
回复
本来想法是,通过软件能够设置好BIOS,这样实现定时开机,其实直接改BIOS是可以的。

还有个思路是定时休眠,然后启动,这个应该可以实现吧。
powerchuangwai 2011-10-25
  • 打赏
  • 举报
回复
31楼可以shut
a78782295 2011-10-24
  • 打赏
  • 举报
回复
定时关机还能实现, 定时开机这肿么搞嘛! 等高手
飞天凤凰601 2011-10-24
  • 打赏
  • 举报
回复
1、定时关机,这个代码有


using System.Runtime.InteropServices; // 提供DllImport等特性,是P/Invoke的关键


// 这个结构体将会传递给API。使用StructLayout(...特性,确保其中的成员是按顺序排列的,C#编译器不会对其进行调整。

[StructLayout(LayoutKind.Sequential, Pack = 1)]
internal struct TokPriv1Luid
{
public int Count;
public long Luid;
public int Attr;
}


// 以下使用DllImport特性导入了所需的Windows API。

// 导入的方法必须是static extern的,并且没有方法体。调用这些方法就相当于调用Windows API。

[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);


// 以下定义了在调用WinAPI时需要的常数。这些常数通常可以从Platform SDK的包含文件(头文件)中找到

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;


// 通过调用WinAPI实现关机,主要代码再最后一行ExitWindowsEx,这调用了同名的WinAPI,正好是关机用的。

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);
}


private void button1_Click(object sender, EventArgs e)
{
DoExitWin(EWX_SHUTDOWN);
}



2、定时开机,要在BIOS时设置电源管理哪设置就行了
触摸屏我们长期这样搞,现在主板都有这功能。
  • 打赏
  • 举报
回复
看来还是有定时开机需求的
足球中国 2011-10-24
  • 打赏
  • 举报
回复
远程开机是windows推nt平台时的广告。但需要主板支持。
后来。windows也承认这个是败笔。几乎没有人用。
kiba518 2011-10-24
  • 打赏
  • 举报
回复
关注~
www_gw 2011-10-24
  • 打赏
  • 举报
回复
学习中
ycagri 2011-10-24
  • 打赏
  • 举报
回复
呵呵,定时开机,一般都是类似于开门狗之类的外设干的
一直监听某个服务或是端口,发生异常重启机器

话说关机了,除非硬件有一部分还在工作,基本上需要电源控制或是主板支持,否则怎么可能工作
player599zxm 2011-10-24
  • 打赏
  • 举报
回复
shutdown.exe-s-t 3600 命令就可以,如果不行,参考一下情况。
1 在运行中键入”services.msc”,查看”Task Scheduler”服务是否被设置成了”已禁用”,若是,要双击它将启动类型改为”自动”;

2 运行”gpedit.msc”来编辑组策略:展开”计算机配置→Windows设置→安全设置→本地计算机策略→安全选项”,找到"域控制器:允许服务器操作员计划任务"并启用它

打开控制面板--任务计划--添加任务计划--
1.打开向导,下一步>在应用程序框中找到C盘里的shutdown.exe程序,然后在shutdown.exe的后面输入“ /s”,不包括引号,下一步>选中"每天"执行任务,下一步输入定时关机时间,日期不变,下一步用户名中使用当前系统默认的不必输入,再输入用户密码,点击"显示任务属性..",再单击完成.

2.在向导中创建完成一个"任务计划"后,再在此任务上右键点"属性">"任务"标签中勾选"仅在登录后运行">"确定","任务计划"就能正常运行了
mjp1234airen4385 2011-10-24
  • 打赏
  • 举报
回复
无人值守的机器,一般是不关机的。
开机一般是通过购买看门狗之类的硬件查到电脑上。
让后定时设置开机的。

用软件实现不了。
种草德鲁伊 2011-10-24
  • 打赏
  • 举报
回复
关机以后谁来开机?
powerchuangwai 2011-10-24
  • 打赏
  • 举报
回复
是无人值守的机器,当然需要自动开机了。晕。
xxiju203 2011-10-24
  • 打赏
  • 举报
回复
用休眠替换关机,可以设定一个时钟 到时间自动起来的 不用去BIOS里面设置 效果跟关机差不多啦。、
啊的发哦 2011-10-24
  • 打赏
  • 举报
回复
这脑子还搞开发呢,靠大腿都能想明白,定时开机,别说C#了,C都不行!

开机要看硬件!
youzelin 2011-10-24
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 powerchuangwai 的回复:]

是无人值守的机器,当然需要自动开机了。晕。
[/Quote]

都关机了,断点了,C# 还运行吗?你怎么让程序知道?
服务器都是不关机的呀。从来没听说过自动开机的机器。
zhouxingyu896 2011-10-23
  • 打赏
  • 举报
回复
定时关机 应该可以吧
定时开机
学习 学习
youzelin 2011-10-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 arnuonly 的回复:]

定时开机?没有见过。
[/Quote]

+1
你太NB了,还有定时开机的呀。
pitsou7 2011-10-23
  • 打赏
  • 举报
回复
自动开机办不到, 不过从睡眠状态转到开机状态可以利用网卡唤醒功能, 给它发送唤醒数据包, 至于怎么做我也不会.
加载更多回复(15)

110,533

社区成员

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

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

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