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

咨询区

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,这不又让公司的服务提高了一个档次!????????????

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303173.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这表白代码让我虎躯一震!

大家都见过哪些让你虎躯一震的代码?就是瞬间让你怀疑人生的那种靠着这个代码成功脱单........那天边和自己喜欢的姑娘聊天 边刷微博,碰巧就刷到了这个图,结果当时脑袋一热就给人发过去了,但没想到对方直接就同意啦哈哈哈哈至于现在…

android cpp做成so库,android so库、jar包生成和使用

搞了很久的Android开发了,一直在使用别人(第三方的sdk),所以今天突发奇想,自己搞一个NDK项目提供给其他app使用。本篇文章就从ndk环境到SDK生成、使用一起说说。废话 不多少开始动起来吧!!一、Android studio ndk环境点…

菜鸟修炼C语言小设计之——工资统计

本设计完成一个工资统计的小设计,涉及的C语言重点知识有: 1,结构体 2,结构体指针数组 3,枚举类型 1.1 设计题目 本课程设计要求设计一个公司职员的数据结构,并使用结构指针数组存储职员信息,统计…

AgileConfig - 轻量级配置中心1.2.0发布,全新的UI

AgileConfig自发布以来有个“大问题”-UI太丑。因为当初这个项目是给自己用的,连UI界面都没有,全靠手动在数据库里改配置。后来匆匆忙忙使用bootstrap3简单的码了一些界面就发布出来了,易用性上也做的不够好。对此我一直耿耿于怀。终于在过年…

android 无法安装测试版本,在测试应用更新时,安装无提示阻止Android版本构建签名APK...

当我尝试更新我的应用程序(在已经从playstore安装的应用程序上手动安装带有更高版本的已签名APK)时,它未被安装(“应用程序未安装“)并在Studio中显示以下错误:I/Finsky: [1144] com.google.android.finsky.verifier.impl.en.c(263): Verifying id8,result-1I/Finsk…

如何解开机器学习的面纱?

目前,人工智能的应用日渐广泛。而作为人工智能核心的机器学习,是一门多领域的交叉学科,专门研究计算机模拟或实现人类学习行为的方法,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。简单来说&a…

Net与Flex入门

开源项目FluorineFx就是专门针对.NET平台与Flex通信提供的AMF(ActionScript Message Format)协议通信网关,我们可以通过FluorineFx很方便的完成与.NET的通信。 另外还可以轻松的实现及时文字沟通、视频语音通信等及时交互系统的开发。 Fluori…

MAUI来了

各位很久没有和大家说端的开发了,技术发展特别快,我不知道还有多少国内的开发人员还坚守用Xamarin,但是.NET的迭代变化还是让国内.NET社区热闹起来了。去年虽然疫情,但微软还是在Build上发布了MAUI。微软这次把MAUI完全整合到了.N…

编程到底难在哪里? 从一个美国实习生的故事说起

记得之前组里来了一个美国实习生小伙子,很极客的那种,干活快,一天能给你写2000行代码(我复查的速度跟不上他写的速度),让做什么东西,上午告诉做个这个功能,下午就能在测试环境跑起来演示了。跟他单独开会的…

华为平板搭鸿蒙,首款麒麟9000平板入网,全系搭载鸿蒙OS,华为反击了!

虽然华为麒麟芯片存货越来越少了,但是关于华为手机和华为平板的消息还是很多的,这证明华为的大招估计还没有放完。最近一款新的华为平板入网,比较让人惊讶的是,这款平板竟然依旧搭载了麒麟9000处理器,并且在其它配置上…

oop1

1、面向过程编程方法,是将程序看成一个个步骤;而面向对象编程(OOP)方法是将程序看成一个个具有不同功能的部件在协同工作,类就是描述这些部件的数据结构和行为方式,而对象就是这些具体的部件。 2、对象的定义:一个对象…

温故知新,DotNet Core SDK和.Net CLI十八般武艺

简介.NET命令行接口 (CLI) 工具是用于开发、生成、运行和发布.NET应用程序的跨平台工具链。https://docs.microsoft.com/zh-cn/dotnet/core/tools/SDK.NET SDK (Software Development Kit) v5.0.201.exe里程碑发布日期.NET Core 2.1.x (servicing)LTS (Long Term Support) rele…

android bitmap string,Android Bitmap到Base64字符串(Android Bitmap to Base64 String)

Android Bitmap到Base64字符串(Android Bitmap to Base64 String)如何将一个大的Bitmap(用手机相机拍摄的照片)转换为Base64 String?How do I convert a large Bitmap (photo taken with the phones camera) to a Base64 String?原文:https://stackover…

谁说数学没用,一旦我们用在赚钱上,全世界都害怕

今天来说说“量化”投资这个门派的开山祖师、美国“赌神”——爱德华 索普。爱德华 索普是一位大教授,天才数学家,非常喜欢扑克牌博弈游戏。一般人玩扑克也就只盯着眼前输赢,爱德华 索普却花了两年时间利用早期的IBM计算机和概率论中的凯利…

网络工程师要如何选择?

09年,迷茫的我走上了IT这条路子. 一年的时间,自己边学习边工作,在学习的同时实践那些技术. 不停的学习,脚步一直都都没停止的向前走. 学习着各种各样的技术,LINUX\CISCO\SQL\等等等等...... 一开始因为不懂,本身想学习的是JAVA\C\C#\等关于编程的技术...可是莫名的就走到的服务…

2021年春招Elasticsearch面试题

1、Elasticsearch是如何实现master选举的?1、对所有可以成为master的节点根据nodeId排序,每次选举每个节点都把自己所知道节点排一次序,然后选出第一个(第0位)节点,暂且认为它是master节点。 2、如果对某个…

android qq红包,Android实现QQ抢红包插件

又想到快要过年了,到时候还不知道群里要发好多红包,所以我将之前在网上宕的一份微信抢红包的代码修改了一下,实现了QQ抢红包!可以支持抢QQ拼手气红包,普通红包,口令红包,现在再也不怕20年单身手…

8个Python高效数据分析的技巧

不管是参加Kaggle比赛,还是开发一个深度学习应用,第一步总是数据分析。这篇文章介绍了8个使用Python进行数据分析的方法,不仅能够提升运行效率,还能够使代码更加“优美”。一行代码定义List定义某种列表时,写For 循环过…

NET问答: 如何在 ASP.NET Core Web API 的 Response 中添加自定义的 Header ?

咨询区 JDawg:我正在将 Web API 2 移植到 ASP.NET Core Web API 上,以前我都直接在 Response 属性上添加自定义的 Header,如下代码所示:HttpResponseMessage response new HttpResponseMessage(HttpStatusCode.OK); response.Hea…

一个免费兑换iPhone X的机会,就这样被你错过了

嗨~我是大家最爱的小树,第一次写文,有点小鸡冻!!!小树此行是带着超模君的礼物来的哦!上周准备会员周回馈粉丝的时候,超模君突然决定要送模友们:iPhone X !!&a…