wincc怎么退出并关机,c语言实现Windows关机,C#实现控制电脑注销,关机和重启

wincc怎么退出并关机,c语言实现Windows关机,C#实现控制电脑注销,关机和重启

本文主要介绍C#如何实现控制计算机注销、关机和重启的功能。本案例涉及的知识点有:流程、Shell32.dll、User32.dll、Struct数据结构。有兴趣的可以看看。

目录

目标知识点的实现process shell 32 . dlluser 32 . dll struct数据结构实现步骤函数类表单配置事件触发事件程序

实现目标

C#可以实现计算机注销、关机、重启的功能。

知识点

本案例涉及的知识点有:流程、Shell32.dll、User32.dll、Struct数据结构。

Process

本案例主要通过Process类调用cmd.exe,使用shell命令实现电机的关机和重启。

使用的属性和方法是StartInfo(属性)和Start(方法)。

StartInfo.FileName

或者启动应用程序或文档。

过程。StartInfo .文件名

过程。StartInfo.FileName='cmd.exe '

StartInfo.UseShellExecute

真实;启动进程时是否应使用外壳程序;如果进程是直接从可执行文件创建的,则为False。默认值为true。

以下场景值为真:

您需要打开文档、媒体、web文件等。你需要在你电脑上的环境变量的路径下打开URL,打开脚本,打开程序。

以下方案值为假:

显式执行已知程序并重定向输入和输出。

UseShellExecute=调用true Shellexecute。

调用了UseShellExecute=false CreateProcess。

过程。StartInfo.UseShellExecute

过程。StartInfo . UseShellExecute=false

StartInfo.RedirectStandardInput

获取用于写入应用程序输入的流。

真实;如果应从StandardInput读取输入,则为;否则为假。默认值为false。

一个进程可以从它的标准输入流(通常是键盘)中读取输入文本。通过重定向StandardInput流,您可以以编程方式指定流程的输入。例如,您可以从指定文件的内容或另一个应用程序的输出中提供文本,而不使用键盘输入。

StartInfo.RedirectStandardOutput

或者获取一个值,该值指示是否将应用程序的文本输出写入StandardOutput流。

真实;如果输出应写入StandardOutput,则为;否则为假。默认值为false。

当Process将文本写入其标准流时,该文本通常显示在主机上。通过设置RedirectStandardOutputtrue来重定向StandardOutput流,可以操作或取消进程的输出。例如,您可以过滤文本,以不同的方式格式化文本,或者将输出写入控制台和指定的日志文件。

//运行“CSC . exe/r:system . dll/out:sample . exe stdstr . cs”。UseShellExecute为false,因为我们正在指定

//一个可执行文件,在这种情况下取决于它是否在路径文件夹中。通过设置

//RedirectStandardOutput为true,则csc.exe的输出被定向到进程。标准输出流

//然后直接显示在这个控制台窗口中。

使用(Process compiler=new Process())

{

编译器。StartInfo . FileName=' csc.exe

编译器。StartInfo . Arguments='/r:system . dll/out:sample . exe stdstr . cs ';

编译器。StartInfo . UseShellExecute=false;

编译器。StartInfo . redirect standard output=true;

编译器。start();

控制台。WriteLine(编译器。standard output . ReadToEnd());

编译器。wait forexit();

}

StartInfo.RedirectStandardError

或者获取一个值,该值指示是否将应用程序的错误输出写入StandardError流。

真实;如果错误输出应写入StandardError,则为;否则为假。默认值为false。

当Process将文本写入其标准错误流时,该文本通常会显示在主机上。通过重定向StandardError流,可以操作或禁用流程的错误输出。例如,您可以过滤文本,以不同的方式格式化文本,或者将输出写入控制台和指定的日志文件。

StartInfo.CreateNoWindow

或者设置一个值,指示是否在新窗口中开始该过程。

如果进程应该在不创建包含它的新窗口的情况下启动,则为True否则为假。默认值为false。

对控制面板窗口有效,与UseShellExecute结合使用。

useshellexecute=true时此值无效,为正常方式启动。

useshellexecute=false:CreateNoWindow=true时,控制面板窗口不会显示。这种方式下无法通过窗口关闭进程,所以运行的进程最好是可以自己运行完关闭的,不然需要到任务管理器中关闭。

Start美元

启动进程资源并将其与流程(流程)组件关联。

StandardInput.WriteLine(cmd)美元

获取用于写入应用程序输入的流。

串流写入器,可用于写入应用程序的标准输入流。

shell32.dll

公共静态外部bool sendmessage(intpth dn、int wMsg、int mParam、int lparam

//从exe\dll\ico文件中获取指定索引或身份证明号号的图标句柄

[DllImport('shell32.dll ',EntryPoint='ExtractIcon')]

//获取文件图标的美国石油学会函数

[DllImport('shell32.dll ',EntryPoint='SHGetFileInfo')]

公共静态外部intptr shgetfileinfo(字符串pszPath、uint dwfileattribute、ref SHFILEINFO psfi、uint cbsizefileinfo、uint flags);

//从exe\dll\ico文件中生成图标句柄数组

[DllImport('shell32.dll')]

public static external uint extract iconex(string lpsz file,int nIconIndex,int[]phiconarge,int[] phiconSmall,uint nicos);

//清空指定驱动器的回收站

[DllImport('shell32.dll')]

公共静态外部int shemptyryclebin(intpt hwnd,int pszrootpath,int dwf flags);

//打开系统的命令窗口

[DllImport('shell32.dll ',EntryPoint='ShellExecute')]

公共静态外部int ShellExecute(int hwnd、String lpOperation、String lpFile、String lpParameters、String lpDirectory、int nshocmd);

User32.dll

//用来释放被当前线程中某个窗口捕获的光标

[DllImport('user32.dll')]

公共静态外部bool relase capture();

//向指定的窗体发送Windows操作系统操作系统消息

[DllImport('user32.dll')]

公共静态外部bool sendmessage(intpth dn、int wMsg、int mParam、int lparam

//获取文件夹图标的美国石油学会函数

[DllImport('User32.dll ',EntryPoint='DestroyIcon')]

公共静态外部内部销毁图标(intptr hicon);

//查询或设置系统级参数

[DllImport('user32.dll ',入口点=' system parameters symphonoa ')]

公共静态外部int 32系统参数sinfo(int 32 uation,Int32 uParam,string lpvparam,int 32 fuwinini);

//定义系统美国石油学会入口点,用来关闭~我爱你~注销或者重启计算机

[DllImport('user32.dll ',EntryPoint='ExitWindowsEx ',CharSet=CharSet).Ansi)]

公共静态外部内部exitwindowsex

Struct数据结构

页:1中结构(结构)数据类型此处不做更多延伸介绍,这里只说明结构类型的语法定义规则和结构体布局。

语法定义

//公共为修饰符,人为结构体名称,名字"年龄""性"为结构体成员,每个成员包括修饰符~我爱你~数据类型。

公共结构人员

{

公共字符串名称;

公共(同Internationalorganizations)国际组织年龄;

公共坦克性;

}:

结构体布局

*顺序,顺序布局*

[结构布局(布局种类).(连续)

结构编号(结构编号)

{

内部a;

内部b;

}

//默认情况下在内存里是先排一个,再排乙。非政府组织

//也就是如果能取到一个a的地址,和乙。非政府组织的地址,则相差一个内部的类型的长度,4字节

*显式(显式),精确布局*

*需要用FieldOffset()设置每个成员的位置

这样就可以实现类似c。非政府组织的公用体的功能*

[结构布局(布局种类).显式(显式)

结构S1

{

[字段偏移量(0)]

内部a;

[字段偏移量(0)]

内部b;

}

//需要用FieldOffset()设置每个成员的位置

//这样就可以实现类似c。非政府组织的公用体的功能

代码案例

代码案例中-沼泽特性,它用于描述字段~我爱你~方法或参数的封送处理格式。用它作为参数前缀并指定目标需要的数据类型。

[结构布局(布局种类).(连续)

公共结构shfileinfo关于

{

公共intptr hicon//图标句柄

公共intptr iicon//系统图标列表的索引

公共uint dwattributes://文件属性

[沼泽(未受污染的类型)。ByValTStr,sizest=260)]

公共字符串szdisplayname//文件的路径

[MarshalAs(UnmanagedType。ByValTStr,SizeConst=80)]

公共字符串szTypeName//文件的类型名

}

实现步骤

功能类

该功能的实现逻辑:

Logout:调用windows系统API函数(user32.dll)的方法。

//定义系统API入口点,用于关机、注销或重启计算机。

[DllImport('user32.dll ',EntryPoint='ExitWindowsEx ',CharSet=CharSet。Ansi)]

公共静态extern int ExitWindowsEx(int u flags,int dwReserved)

关闭:使用Process创建一个新进程,打开cmd.exe,然后使用shell脚本触发关闭操作。

公共void CMDOperator(字符串cmd)

{

Process my Process=new Process();//创建一个流程对象

我的过程。StartInfo . FileName=' cmd.exe//设置打开cmd命令窗口

我的过程。StartInfo . UseShellExecute=false;//不使用操作系统外壳程序启动进程的值

我的过程。StartInfo . RedirectStandardInput=true;//设置可以从标准输入流中读取的值

我的过程。StartInfo . redirect standard output=true;//设置可以写入标准输出流的值

我的过程。StartInfo . RedirectStandardError=true;//设置以显示iostream中的错误。

我的过程。StartInfo . CreateNoWindow=true//设置在新窗口中启动进程

我的过程。start();//启动进程

我的过程。标准输入.写线(cmd);//传入要执行的命令

}

Restart:除了修改shell脚本之外,它的实现方式与shutdown相同。

窗体组态

label控件在红色边框中,Button控件在绿色边框中。

事件触发

表单中有四个按钮,每个按钮对应四个事件。事件触发属性为:点击。

事件程序

//注销按钮事件程序

//调用win32类中的ExitWindowsEx方法。

私有void button1_Click(对象发送方,EventArgs e)

{

Win32。ExitWindowsEx(0,0);//注销计算机

}

//关机按钮事件程序

//调用Opera类中的CMDOperator方法。使用shell脚本触发

私有void button2_Click(对象发送方,EventArgs e)

{

操作。cmd operator(' shut down-s-t 0 ');//关闭计算机

}

//重新启动按钮事件程序

//调用Opera类中的CMDOperator方法。使用shell脚本触发

私有void按钮3_Click(对象发送方,EventArgs e)

{

操作。cmd operator(' shut down-r-t 0 ');//重新启动计算机

}

以上是C#控制电脑注销、关机、重启的细节。更多关于C#控制计算机的信息,请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: