咨询区

roomaroo

我查阅资料发现有一些可使用 C# 关闭用户电脑的方法,但我觉得都不是很简洁,所以我想在这里寻找一种简单或者使用原生 .NET 关闭的方式。

回答区

Pop Catalin

很简单,直接用 C# 调用 cmd 执行 shutdown 不就可以了吗? 我觉得这是最简单粗暴的做法,如下代码所示:


Process.Start("shutdown","/s /t 0");

如果不想弹出 cmd 窗口,可以设置属性忽略掉。


var psi = new ProcessStartInfo("shutdown","/s /t 0");psi.CreateNoWindow = true;
psi.UseShellExecute = false;
Process.Start(psi);

当然你也可以通过 P/Invoke 或者 WMI 的方式调用 Win32 API 去搞定。

Ian R. O'Brien

这是我在学校时期写的比较粗糙的代码,主要就是用 C# 调用 Win32 API 中的 ExitWindowsEx 方法。


using System.Runtime.InteropServices;void Shutdown2()
{const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";const short SE_PRIVILEGE_ENABLED = 2;const uint EWX_SHUTDOWN = 1;const short TOKEN_ADJUST_PRIVILEGES = 32;const short TOKEN_QUERY = 8;IntPtr hToken;TOKEN_PRIVILEGES tkp;// Get shutdown privileges...OpenProcessToken(Process.GetCurrentProcess().Handle, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, out hToken);tkp.PrivilegeCount = 1;tkp.Privileges.Attributes = SE_PRIVILEGE_ENABLED;LookupPrivilegeValue("", SE_SHUTDOWN_NAME, out tkp.Privileges.pLuid);AdjustTokenPrivileges(hToken, false, ref tkp, 0U, IntPtr.Zero, IntPtr.Zero);// Now we have the privileges, shutdown WindowsExitWindowsEx(EWX_SHUTDOWN, 0);
}// Structures needed for the API calls
private struct LUID
{public int LowPart;public int HighPart;
}
private struct LUID_AND_ATTRIBUTES
{public LUID pLuid;public int Attributes;
}
private struct TOKEN_PRIVILEGES
{public int PrivilegeCount;public LUID_AND_ATTRIBUTES Privileges;
}[DllImport("advapi32.dll")]
static extern int OpenProcessToken(IntPtr ProcessHandle, int DesiredAccess, out IntPtr TokenHandle);[DllImport("advapi32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool AdjustTokenPrivileges(IntPtr TokenHandle,[MarshalAs(UnmanagedType.Bool)]bool DisableAllPrivileges,ref TOKEN_PRIVILEGES NewState,UInt32 BufferLength,IntPtr PreviousState,IntPtr ReturnLength);[DllImport("advapi32.dll")]
static extern int LookupPrivilegeValue(string lpSystemName, string lpName, out LUID lpLuid);[DllImport("user32.dll", SetLastError = true)]
static extern int ExitWindowsEx(uint uFlags, uint dwReason);

在生产代码中,你应该检查这些 Win32 API 的返回值,这里我为了代码的简洁无视了这些判断。

点评区

哈哈,用C#操控电脑,这本身就是一个很有意思的东西,我感觉这套题目给了我很多的灵感,要学会擅长用 C# 操作 cmd ,刚好我前段时间给 apk 自动打包,就是用 C# 启动 cmd 调用 apktool 去给 apk 反向编译,为了就是把私有sqlite塞进去,然后再 正向编译 成apk,这不又让公司的服务提高了一个档次!????????????

NET问答: 如何使用 C# 自动化关闭电脑 ?相关推荐

  1. ue4 运行禁用鼠标_从零开始——三:关闭电脑无用服务提高运行速度

    我们的电脑在开机后会运行大量服务和程序,运行的服务和程序越多负荷越大,电脑自然会卡顿.在本期分享中,我将教给大家关闭一些我们用不到的服务,来提高电脑的运行速度. 我们的电脑在不经过任何设置的情况下,后 ...

  2. php手机关闭程序,php用手机关闭电脑的方法

    这篇文章主要介绍了php实现用手机关闭电脑的方法,涉及php使用system方法调用系统命令的相关技巧,需要的朋友可以参考下 本文实例讲述了php实现用手机关闭电脑的方法.具体分析如下: 适合有手机和 ...

  3. 远程计算机关闭了怎么办,怎么远程关闭电脑 远程关闭电脑方法【详细步骤】...

    如果你有多台电脑,不管用什么操作系统,都可以远程关闭它们.下面我就来为大家介绍一下远程关闭电脑方法,一起来看看. 方法1 启用远程注册表服务(Windows) 1.打开要远程关闭的电脑上的" ...

  4. Windows如何强制关闭电脑全部代理

    Windows如何强制关闭电脑全部代理 问题背景: 本人公司测试环境接口开启代理的话就访问不了,但是遇到一个奇怪的问题最近,我抓包工具(fiddler)关闭代理之后,接口请求还是走的代理,尽管尝试了卸 ...

  5. w7提示无法关闭计算机,番茄花园windows7关闭电脑关机时提示强制关闭程序怎么办...

    在win7系统中,关机时还有任务在运行的话,系统会等待所有程序自动结束后再执行关机,不过也会给用户提示是否强制关闭程序.很多番茄花园win7用户想取消强制关闭程序的提示,因为有些时候不点击就不会关机, ...

  6. Windows10安装Photoshop CC2018(PS)软件时关闭电脑防火墙

    在按教程下载PS时,到"amtemu.v0.9.2-painter.exe文件需要关闭电脑杀毒软件和防火墙(Windows10系统还需要关闭Defender)后再重新解压一遍安装包" ...

  7. 如何关闭电脑自动更新

    在使用Win10系统过程中,我们常常会遇到系统提示电脑更新的问题,有时电脑也会未经选择自动更新,有时我们关闭了电脑自动更新,但是系统还是会提示更新,或者出现强制更新,这非常的烦人 本篇分享三种关闭电脑 ...

  8. 如何关闭电脑自动更新?方案三部曲带你走出自动更新的阴影

    如何关闭电脑自动更新?电脑的更新会让我们的系统功能更上一层楼,但同时也有弊端,如果你的配置承受不住这个更新后的适配要求的话,电脑会变得非常不稳定.而道理我们都懂,但是每次它偷偷摸摸地更新都让人&quo ...

  9. 用 iPhone 一键重启、关闭电脑

    本文转载自36kr 下班时用手机来关电脑,你就是办公室里最酷的人. 在生活中的一些场景,可能需要使用 iPhone 控制 Mac 的电源.例如在上床后,需要关闭电脑电源,或者是使电脑熄灭屏幕.其实,在 ...

最新文章

  1. 沪深300股指期权和上证所深交所上市的两个沪深300ETF期权的区别
  2. 八大编程知名编程语言或系统的发展简史
  3. 关于群论证明费马小定理?
  4. 微信开发者工具中导入错误 提示请选择含app.json/project.config.json的目录(纪录篇)
  5. MySQL学习记录 (四) ----- SQL数据管理语句(DML)
  6. Oracle EBS 两个严重漏洞可导致企业金融记录遭篡改
  7. 面向对象14:变长数组Vector、static关键字
  8. 2021苏州大学计算机考研分数,2021苏州大学考研分数线已公布
  9. Go语言值不值得学,发展前景怎么样?
  10. 途家2019校招笔试 1 求最大公约数和最小公倍数
  11. MySQL原理与实践(四):由数据库事务引出数据库隔离级别
  12. BIT-Vehicle Dataset - 车辆车型识别数据集
  13. iOS-内购注意 沙盒二次验证
  14. Prometheus监控之PromQL表达式语法学习(1)
  15. html页面怎样打印二分之一,打印二分之一a4纸 大小的纸张 Word该如何设置?
  16. '/',‘\\’与‘\’的区别
  17. 流程控制语句-------条件判断语句(if ,if-else ,if-elif-else)
  18. mysql 主动拿锁_主动锁模
  19. FTP服务的登录方式
  20. NLP语料库构建(corpus)

热门文章

  1. VS2017生成一个简单的DLL文件 和 LIB文件——C语言
  2. ubuntu安装chrome driver
  3. listview嵌套gridview
  4. Excel 用于批量把单元格设置为文本格式保存的数字的宏
  5. WPF里面的常用笔刷
  6. 安卓随机通话记录_Android 通话记录
  7. edge无法上网dns_如何在Microsoft Edge中通过HTTPS启用DNS
  8. Microsoft Desktop Player是IT Pro的宝贵工具
  9. 三阶魔方魔方公式_观看此魔方的自我解决
  10. mac命令行将输出写入文件_如何在Linux中使用命令行将PDF文件转换为可编辑文本...