win自动化分类添加进程管理、注册表管理、服务管理、软件管理和系统工具

This commit is contained in:
fofolee
2025-01-14 16:24:12 +08:00
parent ab5f90ea51
commit 64e231d5cb
12 changed files with 2593 additions and 0 deletions

View File

@@ -0,0 +1,281 @@
using System;
using System.Diagnostics;
using System.Text;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.IO;
public class ProcessManager
{
[DllImport("kernel32.dll")]
private static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, uint dwProcessId);
[DllImport("kernel32.dll")]
private static extern bool CloseHandle(IntPtr hObject);
[DllImport("kernel32.dll")]
private static extern bool TerminateProcess(IntPtr hProcess, uint uExitCode);
private const uint PROCESS_TERMINATE = 0x0001;
private const uint PROCESS_QUERY_INFORMATION = 0x0400;
public static void Main(string[] args)
{
if (args.Length == 0 || args[0] == "-h" || args[0] == "--help")
{
ShowHelp();
return;
}
string type = GetArgumentValue(args, "-type");
if (string.IsNullOrEmpty(type))
{
Console.Error.WriteLine("Error: 必须指定操作类型 (-type)");
return;
}
try
{
switch (type.ToLower())
{
case "list":
ListProcesses();
break;
case "kill":
string target = GetArgumentValue(args, "-target");
if (string.IsNullOrEmpty(target))
{
Console.Error.WriteLine("Error: 必须指定目标进程 (-target)");
return;
}
KillProcess(target);
break;
case "start":
string path = GetArgumentValue(args, "-path");
string arguments = GetArgumentValue(args, "-args");
if (arguments == null)
{
arguments = "";
}
StartProcess(path, arguments);
break;
default:
Console.Error.WriteLine("Error: 不支持的操作类型");
break;
}
}
catch (Exception ex)
{
Console.Error.WriteLine(string.Format("Error: {0}", ex.Message));
}
}
private static void ListProcesses()
{
Console.Write("[");
Process[] processes = Process.GetProcesses();
bool first = true;
foreach (Process proc in processes)
{
try
{
string processPath = "";
DateTime startTime = DateTime.MinValue;
TimeSpan cpuTime = TimeSpan.Zero;
long memorySize = 0;
int threadCount = 0;
ProcessPriorityClass priority = ProcessPriorityClass.Normal;
string description = "";
string company = "";
string version = "";
try
{
if (proc.MainModule != null)
{
processPath = proc.MainModule.FileName;
}
else
{
processPath = "";
}
startTime = proc.StartTime;
cpuTime = proc.TotalProcessorTime;
memorySize = proc.WorkingSet64;
threadCount = proc.Threads.Count;
priority = proc.PriorityClass;
// 获取文件版本信息
if (!string.IsNullOrEmpty(processPath) && File.Exists(processPath))
{
var versionInfo = FileVersionInfo.GetVersionInfo(processPath);
description = versionInfo.FileDescription;
if (description == null) description = "";
company = versionInfo.CompanyName;
if (company == null) company = "";
version = versionInfo.FileVersion;
if (version == null) version = "";
}
}
catch { }
if (!first)
{
Console.Write(",");
}
first = false;
Console.Write(string.Format(
"{{" +
"\"id\": {0}," +
"\"name\": \"{1}\"," +
"\"title\": \"{2}\"," +
"\"path\": \"{3}\"," +
"\"startTime\": \"{4}\"," +
"\"cpuTime\": \"{5}\"," +
"\"memory\": {6}," +
"\"threads\": {7}," +
"\"priority\": \"{8}\"," +
"\"description\": \"{9}\"," +
"\"company\": \"{10}\"," +
"\"version\": \"{11}\"" +
"}}",
proc.Id,
proc.ProcessName,
proc.MainWindowTitle.Replace("\"", "\\\""),
processPath.Replace("\\", "\\\\").Replace("\"", "\\\""),
startTime.ToString("yyyy-MM-dd HH:mm:ss"),
cpuTime.ToString(),
memorySize,
threadCount,
priority.ToString(),
description.Replace("\"", "\\\""),
company.Replace("\"", "\\\""),
version.Replace("\"", "\\\"")
));
}
catch { }
}
Console.Write("]");
}
private static void KillProcess(string target)
{
int pid;
if (int.TryParse(target, out pid))
{
KillProcessById(pid);
}
else
{
KillProcessByName(target);
}
}
private static void KillProcessById(int pid)
{
Process proc = Process.GetProcessById(pid);
try
{
proc.Kill();
Console.WriteLine(string.Format("成功终止进程: {0} (PID: {1})", proc.ProcessName, pid));
}
catch (Exception ex)
{
throw new Exception(string.Format("无法终止进程: {0}", ex.Message));
}
}
private static void KillProcessByName(string name)
{
Process[] processes = Process.GetProcessesByName(name);
if (processes.Length == 0)
{
throw new Exception("找不到指定的进程");
}
foreach (Process proc in processes)
{
try
{
proc.Kill();
Console.WriteLine(string.Format("成功终止进程: {0} (PID: {1})", name, proc.Id));
}
catch (Exception ex)
{
Console.Error.WriteLine(string.Format("无法终止进程: {0} (PID: {1}) - {2}",
name, proc.Id, ex.Message));
}
}
}
private static void StartProcess(string path, string args)
{
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = path,
Arguments = args,
UseShellExecute = true
};
Process proc = Process.Start(startInfo);
Console.WriteLine(string.Format("已启动进程: {0} (PID: {1})", path, proc.Id));
}
private static void ShowHelp()
{
string help = @"
进程管理工具使用说明
================
基本语法:
process.exe -type <操作类型> [参数...]
操作类型:
--------
1. list - 列出所有进程
示例: process.exe -type list
2. kill - 终止进程
参数:
-target <PID或进程名> 要终止的进程ID或名称
示例:
process.exe -type kill -target notepad
process.exe -type kill -target 1234
3. start - 启动进程
参数:
-path <程序路径> 要启动的程序路径
-args <参数> 启动参数(可选)
示例:
process.exe -type start -path ""c:\windows\notepad.exe""
process.exe -type start -path ""c:\program.exe"" -args ""-param value""
返回值:
------
list操作返回JSON格式的进程信息
{""id"": 进程ID, ""name"": ""进程名"", ""title"": ""窗口标题"", ""path"": ""进程路径"",
""startTime"": ""启动时间"", ""cpuTime"": ""CPU时间"", ""memory"": 内存使用量,
""threads"": 线程数, ""priority"": ""优先级"", ""description"": ""描述"",
""company"": ""公司"", ""version"": ""版本""}
注意事项:
--------
1. 终止进程可能需要管理员权限
2. 进程名称不需要包含.exe后缀
";
Console.WriteLine(help);
}
private static string GetArgumentValue(string[] args, string key)
{
for (int i = 0; i < args.Length - 1; i++)
{
if (args[i].Equals(key, StringComparison.OrdinalIgnoreCase))
{
return args[i + 1];
}
}
return null;
}
}