windows主机控制
一、开关机控制
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using System.Runtime.InteropServices; //注销、关机、重启 class shutdown { [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 DoFlag, 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 DoFlag) { 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(DoFlag, 0); } public void Reboot()//重启 { DoExitWin(EWX_FORCE | EWX_REBOOT); } public void PowerOff()//关机 { DoExitWin(EWX_FORCE | EWX_POWEROFF); } public void LogOff()//注销 { DoExitWin(EWX_FORCE | EWX_LOGOFF); } }
二、音量控制
1.user32
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, uint wParam, uint lParam); const uint WM_APPCOMMAND = 0x319; const uint APPCOMMAND_VOLUME_UP = 0x0a; const uint APPCOMMAND_VOLUME_DOWN = 0x09; const uint APPCOMMAND_VOLUME_MUTE = 0x08; public void volumeUp() {//音量加 SendMessage(this.Handle, WM_APPCOMMAND, 0x30292, APPCOMMAND_VOLUME_UP * 0x10000); } public void volumeDown() {//音量减 SendMessage(this.Handle, WM_APPCOMMAND, 0x30292, APPCOMMAND_VOLUME_DOWN * 0x10000); } public void volumeMuet() {//静音或取消 SendMessage(this.Handle, WM_APPCOMMAND, 0x200eb0, APPCOMMAND_VOLUME_MUTE * 0x10000); }
2.CoreAudioApi
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using CoreAudioApi; using System.Runtime.InteropServices; namespace LHProgectClient { class volumeControl { //实例化CoreAudioApi里的类 MMDeviceEnumerator devEnum = new MMDeviceEnumerator(); MMDevice defaultDevice = null; //初始化 public volumeControl() { defaultDevice = devEnum.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia); } //是否静音 public bool MUTE { get { return defaultDevice.AudioEndpointVolume.Mute; } set { defaultDevice.AudioEndpointVolume.Mute = value; } } //音量加 public void volumeUp() { defaultDevice.AudioEndpointVolume.VolumeStepUp(); } //音量减 public void volumeDown() { defaultDevice.AudioEndpointVolume.VolumeStepDown(); } //静音、取消 public void volumeMute() { defaultDevice.AudioEndpointVolume.Mute = !defaultDevice.AudioEndpointVolume.Mute; } } }