如何用C#写一个电脑关机程序? 就是点击关机按钮 就能让电脑关机

如何用C#写一个电脑关机程序? 就是点击关机按钮 就能让电脑关机,第1张

你在窗体上添加一个按钮button1,在按钮的单击事件力添加代码。

即:

System.Diagnostics.Process.Start("cmd.exe","/cshutdown -s -t 1000")

这是一个定时关机代码,后面的1000表示倒计时1000秒后关机,如果要立即关机,把1000改为0就可以立即关机。

分类: 电脑/网络 >>程序设计 >>其他编程语言

解析:

下面是我愿来写的关机程序可以适用于98/xp/2000,你可以拷来用.关机和重起函数我写好了,你自己调用即可。现在 *** 作系统多为2000或xp,所以需要特别注意的是应该先得到关机的特权:(你要想弄懂下面的程序,要有调用api函数的知识......)

其中:前面一些Public Declare都是api函数的声明.

Public Sub AdjustToken()子程序用来取得关机特权.

Public Sub Shutdown() '是关机子程序

Public Sub Reboot() '是重启子程序

*********************代码开始了:*****************

Public Structure LUID

Dim UsedPart As Integer

Dim IgnoredForNowHigh32BitPart As Integer

End Structure

Public Structure LUID_AND_ATTRIBUTES

Dim TheLuid As LUID

Dim Attributes As Integer

End Structure

Public Structure TOKEN_PRIVILEGES

Dim PrivilegeCount As Integer

Dim TheLuid As LUID

Dim Attributes As Integer

End Structure

'强制关机函数

Public Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Integer, ByVal dwReserved As Integer) As Integer

'GetLastError函数返回本线程的最后一次错误代码。错误代码是按照线程

'储存的,多线程也不会覆盖其他线程的错误代码。

Public Declare Function GetLastError Lib "kernel32" () As Integer

'GetCurrentProcess函数返回当前进程的一个句柄。

Public Declare Function GetCurrentProcess Lib "kernel32" () As Integer

'OpenProcessToken函数打开一个进程的访问代号。

Public Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Integer, ByVal DesiredAccess As Integer, ByRef TokenHandle As Integer) As Integer

'LookupPrivilegeValue函数获得本地唯一的标示符(LUID),用于在特定的系统中

'表示特定的优先权

'UPGRADE_WARNING: 结构 LUID 可能要求封送处理属性作为此声明语句中的参数传递。 单击以获得更多信息:“ms-helpMS.VSCC.2003/moner/redir/redirect?keyword="vbup1050"”

Public Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA"(ByVal lpSystemName As String, ByVal lpName As String, ByRef lpLuid As LUID) As Integer

'AdjustTokenPrivileges函数使能或者禁用指定访问记号的优先权。

'使能或者禁用优先权需要TOKEN_ADJUST_PRIVILEGES访问权限。

'UPGRADE_WARNING: 结构 TOKEN_PRIVILEGES 可能要求封送处理属性作为此声明语句中的参数传递。 单击以获得更多信息:“ms-helpMS.VSCC.2003/moner/redir/redirect?keyword="vbup1050"”

'UPGRADE_WARNING: 结构 TOKEN_PRIVILEGES 可能要求封送处理属性作为此声明语句中的参数传递。 单击以获得更多信息:“ms-helpMS.VSCC.2003/moner/redir/redirect?keyword="vbup1050"”

Public Declare Function AdjustTokenPrivileges Lib "advapi32" (ByVal TokenHandle As Integer, ByVal DisableAllPrivileges As Integer, ByRef NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Integer, ByRef PreviousState As TOKEN_PRIVILEGES, ByRef ReturnLength As Integer) As Integer

Public Declare Sub SetLastError Lib "kernel32" (ByVal dwErrCode As Integer)

'********************************************************************

'* 这个过程设置正确的优先权,以允许在Windows NT下关机或者重新启动。

'********************************************************************

Public Sub AdjustToken()

Const TOKEN_ADJUST_PRIVILEGES As Short = &H20s

Const TOKEN_QUERY As Short = &H8s

Const SE_PRIVILEGE_ENABLED As Short = &H2s

Dim hdlProcessHandle As Integer

Dim hdlTokenHandle As Integer

Dim tmpLuid As LUID

Dim tkp As TOKEN_PRIVILEGES

Dim tkpNewButIgnored As TOKEN_PRIVILEGES

Dim lBufferNeeded As Integer

'使用SetLastError函数设置错误代码为0。

'这样做,GetLastError函数如果没有错误会返回0

'''''''SetLastError 0

'GetCurrentProcess函数设置 hdlProcessHandle变量

hdlProcessHandle = GetCurrentProcess()

''''' If GetLastError <>0 Then

''''' MsgBox "GetCurrentProcess error==" &GetLastError

''''' End If

OpenProcessToken(hdlProcessHandle, TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, hdlTokenHandle)

''''' If GetLastError <>0 Then

''''' MsgBox "OpenProcessToken error==" &GetLastError

''''' End If

' 获得关机优先权的LUID

LookupPrivilegeValue("", "SeShutdownPrivilege", tmpLuid)

'''''If GetLastError <>0 Then

'''''MsgBox "LookupPrivilegeValue error==" &GetLastError

'''''End If

tkp.PrivilegeCount = 1 ' 设置一个优先权

'UPGRADE_WARNING: 未能解析对象 tkp.TheLuid 的默认属性。 单击以获得更多信息:“ms-helpMS.VSCC.2003/moner/redir/redirect?keyword="vbup1037"”

tkp.TheLuid = tmpLuid

tkp.Attributes = SE_PRIVILEGE_ENABLED

' 对当前进程使能关机优先权

AdjustTokenPrivileges(hdlTokenHandle, False, tkp, Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded)

'''''If GetLastError <>0 Then

'''''MsgBox "AdjustTokenPrivileges error==" &GetLastError

'''''End If

End Sub

Public Sub Shutdown() '关机子程序

'******************根据windows版本来关机************************

If glngWhichWindows32 = mlngWindowsNT Then

AdjustToken() '调用取得优先权子程序

End If

ExitWindowsEx(EWX_SHUTDOWN Or EWX_FORCE, &HFFFFs)

'*****************************************************************

End Sub

Public Sub Reboot() '重启子程序

'******************根据windows版本来关机************************

If glngWhichWindows32 = mlngWindowsNT Then

AdjustToken() '调用取得优先权子程序

End If

ExitWindowsEx(EWX_REBOOT Or EWX_FORCE, &HFFFFs)

'*****************************************************************

End Sub

编写代码:

#include <iostream>

using namespace std

int main()

{

system("shutdown -s -f -t 0")

return 0

}

保存按Ctrl+F9,目录下就会出现一个.exe文件。

扩展资料:

还可以定时关机

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

int main()

{

char cmd[20]="shutdown -s -t "

char t[5]="0"

int c

system("title C语言关机程序")  //设置cmd窗口标题

system("mode con cols=48 lines=25")  //窗口宽度高度

system("color f0")  //可以写成 red 调出颜色组

system("date /T")

system("TIME /T")

printf("----------- C语言关机程序 -----------\n")

printf("1.实现10分钟内的定时关闭计算机\n")

printf("2.立即关闭计算机\n")

printf("3.注销计算机\n")

printf("0.退出系统\n")

printf("-------------------------------------\n")

scanf("%d",&c)

switch(c) {

case 1:

printf("您想在多少秒后自动关闭计算机?(0~600)\n")

scanf("%s",t)

system(strcat(cmd,t))

break

case 2:

system("shutdown -p")

break

case 3:

system("shutdown -l")

break

case 0:

break

default:

printf("Error!\n")

}

system("pause")

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11182979.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存