forked from yanw/App_win_iot_V2.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
514 lines
21 KiB
514 lines
21 KiB
using AForge.Video.DirectShow;
|
|
using IOTContainer.Common;
|
|
using IOTContainer.Communication;
|
|
using IOTContainer.Model;
|
|
using IOTContainer.View;
|
|
using Newtonsoft.Json.Linq;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Drawing;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Management;
|
|
using System.Net;
|
|
using System.Windows.Forms;
|
|
|
|
namespace IOTContainer.Common
|
|
{
|
|
public class SystemManage
|
|
{
|
|
public delegate void TouchMeDelegate();
|
|
public static event TouchMeDelegate TouchMeEvent;
|
|
public static void removeDelegate()
|
|
{
|
|
|
|
if (TouchMeEvent != null)
|
|
{
|
|
System.Delegate[] dels = TouchMeEvent.GetInvocationList();
|
|
for (int i = 0; i < dels.Length; i++)
|
|
{
|
|
TouchMeEvent -= dels[i] as TouchMeDelegate;
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 关闭程序
|
|
/// </summary>
|
|
/// <param name="name"></param>
|
|
public static void CloseProgress(string name)
|
|
{
|
|
//关闭信息发布
|
|
Process[] pro = Process.GetProcesses();
|
|
for (int i = 0; i < pro.Length; i++)
|
|
{
|
|
if (pro[i].ProcessName.ToLower().Trim() == "name")
|
|
{
|
|
pro[i].Kill();//结束进程
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 重启程序
|
|
/// </summary>
|
|
public static void RestartContainer()
|
|
{
|
|
System.Diagnostics.Process.Start(System.Reflection.Assembly.GetExecutingAssembly().Location);
|
|
System.Diagnostics.Process.GetCurrentProcess().Kill();
|
|
//System.Windows.Forms.Application.Restart();
|
|
//Application.Current.Shutdown();
|
|
}
|
|
/// <summary>
|
|
/// 获取本地Ip
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public static string GetLocalIp()
|
|
{
|
|
foreach (IPAddress _IPAddress in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
|
|
{
|
|
if (_IPAddress.AddressFamily.ToString() == "InterNetwork")
|
|
{
|
|
return _IPAddress.ToString();
|
|
}
|
|
}
|
|
return string.Empty;
|
|
}
|
|
|
|
public static string GetMac()
|
|
{
|
|
ManagementClass mc;
|
|
string mac = string.Empty;
|
|
mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
|
|
ManagementObjectCollection moc = mc.GetInstances();
|
|
foreach (ManagementObject mo in moc)
|
|
{
|
|
if (mo["IPEnabled"].ToString() == "True")
|
|
mac = mo["MacAddress"].ToString();
|
|
}
|
|
while (mac.IndexOf(":") >= 0)
|
|
mac = mac.Remove(mac.IndexOf(":"), 1);
|
|
|
|
return mac;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 是否存在音频捕捉设备
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public static bool IsSound()
|
|
{
|
|
var devices = SharpDX.DirectSound.DirectSoundCapture.GetDevices(); // 枚举音频捕捉设备
|
|
if (devices.Count > 0)
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 是否存在音频播放
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public static bool IsVideo()
|
|
{
|
|
var videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
|
|
if (videoDevices.Count > 0)
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public static void ShutDown()
|
|
{
|
|
Process MyProcess = new Process();
|
|
//设定程序名
|
|
MyProcess.StartInfo.FileName = "cmd.exe";
|
|
|
|
//关闭Shell的使用
|
|
MyProcess.StartInfo.UseShellExecute = false;
|
|
//重定向标准输入
|
|
MyProcess.StartInfo.RedirectStandardInput = true;
|
|
//重定向标准输出
|
|
MyProcess.StartInfo.RedirectStandardOutput = true;
|
|
//重定向错误输出
|
|
MyProcess.StartInfo.RedirectStandardError = true;
|
|
//设置不显示窗口
|
|
MyProcess.StartInfo.CreateNoWindow = true;
|
|
|
|
string cmdtext = string.Empty;
|
|
cmdtext = @"Shutdown -f -s -t 0"; //关机
|
|
|
|
Log.MyLog.WriteLogFile(cmdtext, "cmdexelog");
|
|
//执行VER命令
|
|
MyProcess.Start();
|
|
MyProcess.StandardInput.WriteLine(cmdtext);
|
|
Log.MyLog.WriteLogFile("关机", "cmdexelog");
|
|
string output = "";
|
|
char[] outl = new char[2048];
|
|
string error = "";
|
|
using (System.IO.StreamReader myOutput = MyProcess.StandardOutput)
|
|
{
|
|
myOutput.Read(outl, 0, 2048);
|
|
output = new string(outl);
|
|
Log.MyLog.WriteLogFile(output, "cmdexelog");
|
|
|
|
}
|
|
using (System.IO.StreamReader myError = MyProcess.StandardError)
|
|
{
|
|
|
|
myError.Read(outl, 0, 1024);
|
|
error = new string(outl);
|
|
Log.MyLog.WriteLogFile(error, "cmdexelog");
|
|
|
|
}
|
|
}
|
|
|
|
public static void TurnOff()
|
|
{
|
|
bool is64Bit;
|
|
is64Bit = Environment.Is64BitOperatingSystem;
|
|
|
|
int i = 0;
|
|
IntPtr p = new IntPtr(i);
|
|
string tpath = System.AppDomain.CurrentDomain.BaseDirectory;
|
|
|
|
string OKorNO = "disable";
|
|
string systemWordLength;
|
|
//检测系统是64位还是32位
|
|
if (is64Bit == true)
|
|
{
|
|
systemWordLength = "x64";
|
|
}
|
|
else
|
|
{
|
|
systemWordLength = "x86";
|
|
}
|
|
WinApi.ShellExecute(p, "runas", tpath + "\\devcon\\" + systemWordLength + "\\devcon.exe", OKorNO + " *HID* /c net user administrator /active:yes", "", (int)WinApi.ShowWindowCommands.SW_HIDE);
|
|
WinApi.ShellExecute(p, "runas", tpath + "\\devcon\\" + systemWordLength + "\\devcon.exe", "enable HID_DEVICE_SYSTEM_MOUSE user administrator /active:yes", "", (int)WinApi.ShowWindowCommands.SW_HIDE);
|
|
|
|
}
|
|
|
|
public static void TurnOn()
|
|
{
|
|
bool is64Bit;
|
|
is64Bit = Environment.Is64BitOperatingSystem;
|
|
|
|
int i = 0;
|
|
IntPtr p = new IntPtr(i);
|
|
string tpath = System.AppDomain.CurrentDomain.BaseDirectory;
|
|
|
|
string OKorNO = "enable";
|
|
string systemWordLength;
|
|
//检测系统是64位还是32位
|
|
if (is64Bit == true)
|
|
{
|
|
systemWordLength = "x64";
|
|
}
|
|
else
|
|
{
|
|
systemWordLength = "x86";
|
|
}
|
|
WinApi.ShellExecute(p, "runas", tpath + "\\devcon\\" + systemWordLength + "\\devcon.exe", OKorNO + " *HID* /c net user administrator /active:yes", "", (int)WinApi.ShowWindowCommands.SW_HIDE);
|
|
|
|
}
|
|
|
|
public static void ReStart()
|
|
{
|
|
try
|
|
{
|
|
Process MyProcess = new Process();
|
|
//设定程序名
|
|
MyProcess.StartInfo.FileName = "cmd.exe";
|
|
|
|
//关闭Shell的使用
|
|
MyProcess.StartInfo.UseShellExecute = false;
|
|
//重定向标准输入
|
|
MyProcess.StartInfo.RedirectStandardInput = true;
|
|
//重定向标准输出
|
|
MyProcess.StartInfo.RedirectStandardOutput = true;
|
|
//重定向错误输出
|
|
MyProcess.StartInfo.RedirectStandardError = true;
|
|
//设置不显示窗口
|
|
MyProcess.StartInfo.CreateNoWindow = true;
|
|
|
|
string cmdtext = string.Empty;
|
|
cmdtext = @"Shutdown -f -r -t 0"; //重启
|
|
|
|
Log.MyLog.WriteLogFile(cmdtext, "cmdexelog");
|
|
//执行VER命令
|
|
MyProcess.Start();
|
|
MyProcess.StandardInput.WriteLine(cmdtext);
|
|
Log.MyLog.WriteLogFile("重启", "cmdexelog");
|
|
string output = "";
|
|
char[] outl = new char[2048];
|
|
string error = "";
|
|
using (System.IO.StreamReader myOutput = MyProcess.StandardOutput)
|
|
{
|
|
myOutput.Read(outl, 0, 2048);
|
|
output = new string(outl);
|
|
Log.MyLog.WriteLogFile(output, "cmdexelog");
|
|
|
|
}
|
|
using (System.IO.StreamReader myError = MyProcess.StandardError)
|
|
{
|
|
|
|
myError.Read(outl, 0, 1024);
|
|
error = new string(outl);
|
|
Log.MyLog.WriteLogFile(error, "cmdexelog");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
Log.MyLog.WriteLogFile("ReStart:" + ex.ToString(), "cmdexelog");
|
|
}
|
|
|
|
}
|
|
/// <summary>
|
|
/// 截屏
|
|
/// </summary>
|
|
public static string PrintScreen(string imgname)
|
|
{
|
|
try
|
|
{
|
|
if (!Directory.Exists(AppDomain.CurrentDomain.BaseDirectory + @"\Screen"))
|
|
{
|
|
Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory + @"\Screen");
|
|
}
|
|
string path = AppDomain.CurrentDomain.BaseDirectory + @"\Screen\" + imgname;
|
|
Bitmap bit = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
|
|
Graphics g = Graphics.FromImage(bit);
|
|
g.CopyFromScreen(new System.Drawing.Point(0, 0), new System.Drawing.Point(0, 0), bit.Size);
|
|
|
|
try
|
|
{
|
|
if (File.Exists(path))
|
|
File.Delete(path);
|
|
bit.Save(path);
|
|
Log.MyLog.WriteLogFile("设备截图:" + path, "cmdexelog");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile(ex.Message, "cmdexelog");
|
|
}
|
|
finally
|
|
{
|
|
g.Dispose();
|
|
bit.Dispose();
|
|
}
|
|
return path;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("设备截图失败:" + ex.Message, "cmdexelog");
|
|
return "";
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 设备注册设备组
|
|
/// </summary>
|
|
public static void AddNewGroup(string data)
|
|
{
|
|
try
|
|
{
|
|
var jo = JObject.Parse(data);
|
|
var cont = jo.Value<JObject>("data");
|
|
if (cont.HasValues)
|
|
{
|
|
var groups = cont.Value<JArray>("group").ToObject<List<string>>();
|
|
var nowGroupList = new List<string>();
|
|
var nowGroups = ComParameters.Parameters.devGroupCodes;
|
|
if (!string.IsNullOrEmpty(nowGroups))
|
|
{
|
|
nowGroupList = nowGroups.Split(',').ToList();
|
|
}
|
|
var newGroups = groups.Except(nowGroupList);
|
|
foreach (var item in newGroups)
|
|
{
|
|
ComParameters.Parameters.MqttClient.SubscribeGroup(item);
|
|
}
|
|
#region 保存到数据库
|
|
var groupstring = string.Join(",", groups);
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.devGroupCodes, groupstring);
|
|
ComParameters.Parameters.devGroupCodes = groupstring;
|
|
#endregion
|
|
Log.MyLog.WriteLogFile("设备分组:[" + string.Join(",", newGroups) + "]", "cmdexelog");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("设备分组失败:" + ex.Message, "cmdexelog");
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 编辑设备信息
|
|
/// </summary>
|
|
public static void MachineConfig(string data)
|
|
{
|
|
try
|
|
{
|
|
var jo = JObject.Parse(data);
|
|
var cont = jo.Value<JObject>("data");
|
|
if (cont.HasValues)
|
|
{
|
|
var model = cont.Value<JObject>("device").ToObject<DeviceEditModel>();
|
|
if (model != null)
|
|
{
|
|
if (ComParameters.Parameters.machineAttrDic.Keys.Contains(model.touch))
|
|
{
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.devAttr, ComParameters.Parameters.machineAttrDic[model.touch]);
|
|
ComParameters.Parameters.devAttr = ComParameters.Parameters.machineAttrDic[model.touch];
|
|
}
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.buildingName, model.building);
|
|
ComParameters.Parameters.buildingName = model.building;
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.floorName, model.floor);
|
|
ComParameters.Parameters.floorName = model.floor;
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.devName, model.name);
|
|
ComParameters.Parameters.devName = model.name;
|
|
|
|
if (ComParameters.Parameters.devType != model.machineTypeName)
|
|
{
|
|
////分屏不需要字幕
|
|
//ComParameters.rwl.EnterReadLock();
|
|
//File.Delete(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Programme", "ProgrammeList.txt"));
|
|
//ComParameters.rwl.ExitReadLock();
|
|
|
|
//ComParameters.srwl.EnterReadLock();
|
|
//File.Delete(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Programme", "SubtitleList.txt"));
|
|
//ComParameters.srwl.ExitReadLock();
|
|
|
|
switch (model.machineTypeName)
|
|
{
|
|
case "导视":
|
|
case "会议室":
|
|
{
|
|
//停止定时任务
|
|
try
|
|
{
|
|
TimeJobs.Jobs.StopQuerySyncMachine();
|
|
WebSocketCom.Socket.StopListen();
|
|
WebSocketCom.Socket.StopWebSocketServer();
|
|
}
|
|
catch (Exception)
|
|
{
|
|
|
|
}
|
|
|
|
if (ComParameters.Parameters.EdgeWindow == null)
|
|
{
|
|
ComParameters.Parameters.MainWindow.Dispatcher.Invoke(() =>
|
|
{
|
|
var web = new EdgeWindow();
|
|
web.Show();
|
|
});
|
|
}
|
|
if (ComParameters.Parameters.ScreenWindowNew != null)
|
|
{
|
|
ComParameters.Parameters.MainWindow.Dispatcher.Invoke(() =>
|
|
{
|
|
ComParameters.Parameters.ScreenWindowNew.Close();
|
|
});
|
|
}
|
|
break;
|
|
}
|
|
case "信发":
|
|
{
|
|
if (ComParameters.Parameters.EdgeWindow != null)
|
|
{
|
|
ComParameters.Parameters.MainWindow.Dispatcher.Invoke(() =>
|
|
{
|
|
ComParameters.Parameters.EdgeWindow.Close();
|
|
});
|
|
}
|
|
if (ComParameters.Parameters.ScreenWindowNew == null)
|
|
{
|
|
ComParameters.Parameters.MainWindow.Dispatcher.Invoke(() =>
|
|
{
|
|
ComParameters.Parameters.IsPlay = true;
|
|
var view = new ScreenWindowNew(0);
|
|
view.Show();
|
|
});
|
|
}
|
|
else
|
|
{
|
|
//开始定时任务
|
|
if (TimeJobs.Jobs._timer == null)
|
|
{
|
|
TimeJobs.Jobs.QuerySyncMachine();
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
LocalStorage.InsertPipTable("infos", ConfigKey.devType, model.machineTypeName);
|
|
ComParameters.Parameters.devType = model.machineTypeName;
|
|
if (ComParameters.Parameters.ScreenWindowNew != null)
|
|
{
|
|
TouchMeEvent?.Invoke();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("编辑设备信息失败:" + ex.Message, "cmdexelog");
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 将一个文件夹下的所有文件复制到另一个文件夹 (可备份文件夹)
|
|
/// </summary>
|
|
/// <param name="sourceDire">源文件夹全名</param>
|
|
/// <param name="destDire">目标文件夹全名</param>
|
|
/// <param name="backupsDire">备份文件夹全名</param>
|
|
public static void CopyDireToDire(string sourceDire, string destDire, string backupsDire = null)
|
|
{
|
|
try
|
|
{
|
|
if (Directory.Exists(sourceDire) && Directory.Exists(destDire))
|
|
{
|
|
DirectoryInfo sourceDireInfo = new DirectoryInfo(sourceDire);
|
|
FileInfo[] fileInfos = sourceDireInfo.GetFiles();
|
|
foreach (FileInfo fInfo in fileInfos)
|
|
{
|
|
string sourceFile = fInfo.FullName;
|
|
string destFile = sourceFile.Replace(sourceDire, destDire);
|
|
if (backupsDire != null && File.Exists(destFile))
|
|
{
|
|
Directory.CreateDirectory(backupsDire);
|
|
string backFile = destFile.Replace(destDire, backupsDire);
|
|
File.Copy(destFile, backFile, true);
|
|
}
|
|
File.Copy(sourceFile, destFile, true);
|
|
}
|
|
DirectoryInfo[] direInfos = sourceDireInfo.GetDirectories();
|
|
foreach (DirectoryInfo dInfo in direInfos)
|
|
{
|
|
string sourceDire2 = dInfo.FullName;
|
|
string destDire2 = sourceDire2.Replace(sourceDire, destDire);
|
|
string backupsDire2 = null;
|
|
if (backupsDire != null)
|
|
{
|
|
backupsDire2 = sourceDire2.Replace(sourceDire, backupsDire);
|
|
}
|
|
Directory.CreateDirectory(destDire2);
|
|
CopyDireToDire(sourceDire2, destDire2, backupsDire2);
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.MyLog.WriteLogFile("将一个文件夹下的所有文件复制到另一个文件夹失败:" + ex.Message, "cmdexelog");
|
|
throw;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|