手机
当前位置:查字典教程网 >编程开发 >C#教程 >C#调用windows api关机(关机api)示例代码分享
C#调用windows api关机(关机api)示例代码分享
摘要:复制代码代码如下:usingSystem;usingSystem.Runtime.InteropServices;classshoutdow...

复制代码 代码如下:

using System;

using System.Runtime.InteropServices;

class shoutdown{

[StructLayout(LayoutKind.Sequential, Pack=1)]

internal struct TokPriv1Luid

{

public int Count;

public long Luid;

public int Attr;

}

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

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;

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

}

public static void Main()

{

Console.WriteLine("正在关闭计算机……");

// 修改 EWX_SHUTDOWN 或者 EWX_LOGOFF, EWX_REBOOT等实现不同得功能。

// 在XP下可以看到帮助信息,以得到不同得参数

// SHUTDOWN /?

DoExitWin(EWX_SHUTDOWN);

}

}

【C#调用windows api关机(关机api)示例代码分享】相关文章:

C#求解哈夫曼树,实例代码

C#反射在实际应用中的实例代码

C#使用DllImport调用非托管的代码的方法

C#编写的windows计算器的实例代码

C# 调用Delphi dll 实例代码

C# 汉字转化拼音的简单实例代码

C# zxing二维码写入的实例代码

C#关机小程序源码

使用 C# 动态编译代码和执行的代码

C#生成注册码的实例代码

精品推荐
分类导航