【原创】windows 进程管理
来源:互联网 发布:基因检测 知乎 编辑:程序博客网 时间:2024/05/17 01:35
【原创】windows 进程管理
pc 平台进程管理方法:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim TargetName As String = "ibmdict" '存储进程名为文本型,注:进程名不加扩展名 Dim TargetKill() As Process = Process.GetProcessesByName(TargetName) '从进程名获取进程 Dim TargetPath As String '存储进程路径为文本型 If TargetKill.Length > 0 Then '判断进程名的数量,如果同名进程数量在2个以上,用For循环关闭进程。 For i = 0 To TargetKill.Length - 1 TargetPath = TargetKill(i).MainModule.FileName TargetKill(i).Kill() Next ElseIf TargetKill.Length = 0 Then '判断进程名的数量,没有发现进程直接弹窗。不需要的,可直接删掉该If子句 MsgBox("没有发现进程!") Exit Sub End If MsgBox("已终止" & TargetKill.Length & "个进程") '弹窗提示已终止多少个进程 End Sub
WINCE平台方法:
WINCE平台由于不支持GetProcessesByName,所以,最好的办法是自己编写程序,demo界面如下:
完整程序如下:
using System;using System.Linq;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Runtime.InteropServices;using System.Collections;namespace SmartDeviceProject1{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } static void Massin(string[] args) { if (args.Length == 0) { Console.WriteLine("Please enter the process name."); return; } string processName = args[0].ToUpper() ; if (processName.Contains(".EXE") == false) processName += ".EXE"; Process[] processes = Process.GetProcesses(); foreach (Process proc in processes) { if (proc.ProcessName.ToUpper() == processName) { proc.Kill(); MessageBox .Show (processName+" was killed."); break; } } } private void button1_Click(object sender, EventArgs e) { string[] exe = { "notepad++" }; exe[0] = textBox1.Text.ToString(); Massin(exe); } private void button2_Click(object sender, EventArgs e) { Process[] processes = Process.GetProcesses(); listBox1.Items.Clear(); foreach (Process proc in processes) { listBox1.Items.Add(proc.ProcessName); } } private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { textBox1 .Text = listBox1.SelectedItem.ToString(); } } #region PROCESSENTRY32 implementation // typedef struct tagPROCESSENTRY32 // { // DWORD dwSize; // DWORD cntUsage; // DWORD th32ProcessID; // DWORD th32DefaultHeapID; // DWORD th32ModuleID; // DWORD cntThreads; // DWORD th32ParentProcessID; // LONG pcPriClassBase; // DWORD dwFlags; // TCHAR szExeFile[MAX_PATH]; // DWORD th32MemoryBase; // DWORD th32AccessKey; // } PROCESSENTRY32; public class PROCESSENTRY32 { // constants for structure definition private const int SizeOffset = 0; private const int UsageOffset = 4; private const int ProcessIDOffset = 8; private const int DefaultHeapIDOffset = 12; private const int ModuleIDOffset = 16; private const int ThreadsOffset = 20; private const int ParentProcessIDOffset = 24; private const int PriClassBaseOffset = 28; private const int dwFlagsOffset = 32; private const int ExeFileOffset = 36; private const int MemoryBaseOffset = 556; private const int AccessKeyOffset = 560; private const int Size = 564; private const int MAX_PATH = 260; // data members public uint dwSize; public uint cntUsage; public uint th32ProcessID; public uint th32DefaultHeapID; public uint th32ModuleID; public uint cntThreads; public uint th32ParentProcessID; public long pcPriClassBase; public uint dwFlags; public string szExeFile; public uint th32MemoryBase; public uint th32AccessKey; //Default constructor public PROCESSENTRY32() { } // create a PROCESSENTRY instance based on a byte array public PROCESSENTRY32(byte[] aData) { dwSize = GetUInt(aData, SizeOffset); cntUsage = GetUInt(aData, UsageOffset); th32ProcessID = GetUInt(aData, ProcessIDOffset); th32DefaultHeapID = GetUInt(aData, DefaultHeapIDOffset); th32ModuleID = GetUInt(aData, ModuleIDOffset); cntThreads = GetUInt(aData, ThreadsOffset); th32ParentProcessID = GetUInt(aData, ParentProcessIDOffset); pcPriClassBase = (long)GetUInt(aData, PriClassBaseOffset); dwFlags = GetUInt(aData, dwFlagsOffset); szExeFile = GetString(aData, ExeFileOffset, MAX_PATH); th32MemoryBase = GetUInt(aData, MemoryBaseOffset); th32AccessKey = GetUInt(aData, AccessKeyOffset); } #region Helper conversion functions // utility: get a uint from the byte array private static uint GetUInt(byte[] aData, int Offset) { return BitConverter.ToUInt32(aData, Offset); } // utility: set a uint int the byte array private static void SetUInt(byte[] aData, int Offset, int Value) { byte[] buint = BitConverter.GetBytes(Value); Buffer.BlockCopy(buint, 0, aData, Offset, buint.Length); } // utility: get a ushort from the byte array private static ushort GetUShort(byte[] aData, int Offset) { return BitConverter.ToUInt16(aData, Offset); } // utility: set a ushort int the byte array private static void SetUShort(byte[] aData, int Offset, int Value) { byte[] bushort = BitConverter.GetBytes((short)Value); Buffer.BlockCopy(bushort, 0, aData, Offset, bushort.Length); } // utility: get a unicode string from the byte array private static string GetString(byte[] aData, int Offset, int Length) { String sReturn = Encoding.Unicode.GetString(aData, Offset, Length); return sReturn; } // utility: set a unicode string in the byte array private static void SetString(byte[] aData, int Offset, string Value) { byte[] arr = Encoding.ASCII.GetBytes(Value); Buffer.BlockCopy(arr, 0, aData, Offset, arr.Length); } #endregion // create an initialized data array public byte[] ToByteArray() { byte[] aData; aData = new byte[Size]; //set the Size member SetUInt(aData, SizeOffset, Size); return aData; } public string Name { get { return szExeFile.Substring(0, szExeFile.IndexOf('\0')); } } public ulong PID { get { return th32ProcessID; } } public ulong BaseAddress { get { return th32MemoryBase; } } public ulong ThreadCount { get { return cntThreads; } } } #endregion #region Process class /// <summary> /// Summary description for Process. /// </summary> public class Process { private const int TH32CS_SNAPPROCESS = 0x00000002; [DllImport("toolhelp.dll")] public static extern IntPtr CreateToolhelp32Snapshot(uint flags, uint processid); [DllImport("toolhelp.dll")] public static extern int CloseToolhelp32Snapshot(IntPtr handle); [DllImport("toolhelp.dll")] public static extern int Process32First(IntPtr handle, byte[] pe); [DllImport("toolhelp.dll")] public static extern int Process32Next(IntPtr handle, byte[] pe); [DllImport("coredll.dll")] private static extern IntPtr OpenProcess(int flags, bool fInherit, int PID); private const int PROCESS_TERMINATE = 1; [DllImport("coredll.dll")] private static extern bool TerminateProcess(IntPtr hProcess, uint ExitCode); [DllImport("coredll.dll")] private static extern bool CloseHandle(IntPtr handle); private const int INVALID_HANDLE_VALUE = -1; private string processName; private IntPtr handle; private int threadCount; private int baseAddress; //default constructor public Process() { } private Process(IntPtr id, string procname, int threadcount, int baseaddress) { handle = id; processName = procname; threadCount = threadcount; baseAddress = baseaddress; } //ToString implementation for ListBox binding public override string ToString() { return processName; } public int BaseAddress { get { return baseAddress; } } public int ThreadCount { get { return threadCount; } } public IntPtr Handle { get { return handle; } } public string ProcessName { get { return processName; } } public int BaseAddess { get { return baseAddress; } } public void Kill() { IntPtr hProcess; hProcess = OpenProcess(PROCESS_TERMINATE, false, (int)handle); if (hProcess != (IntPtr)INVALID_HANDLE_VALUE) { bool bRet; bRet = TerminateProcess(hProcess, 0); CloseHandle(hProcess); } } public static Process[] GetProcesses() { ArrayList procList = new ArrayList(); IntPtr handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if ((int)handle > 0) { try { PROCESSENTRY32 peCurrent; PROCESSENTRY32 pe32 = new PROCESSENTRY32(); //Get byte array to pass to the API calls byte[] peBytes = pe32.ToByteArray(); //Get the first process int retval = Process32First(handle, peBytes); while (retval == 1) { //Convert bytes to the class peCurrent = new PROCESSENTRY32(peBytes); //New instance Process proc = new Process(new IntPtr((int)peCurrent.PID), peCurrent.Name, (int)peCurrent.ThreadCount, (int)peCurrent.BaseAddress); procList.Add(proc); retval = Process32Next(handle, peBytes); } } catch (Exception ex) { throw new Exception("Exception: " + ex.Message); } //Close handle CloseToolhelp32Snapshot(handle); return (Process[])procList.ToArray(typeof(Process)); } else { throw new Exception("Unable to create snapshot"); } } }#endregion}
0 0
- 【原创】windows 进程管理
- 管理 Windows 进程
- Windows 进程管理
- windows 进程管理
- Windows进程内存管理
- Python管理Windows进程
- Windows进程管理
- windows 进程管理指令
- windows下管理java进程
- windows 进程作业对象 管理一组 进程
- 【原创】《Linux高级程序设计》(杨宗德著)--- Linux进程存储管理
- 【原创】《Linux高级程序设计》杨宗德著 - 进程管理与程序开发 - 孤儿进程和僵死进程
- Windows CE 进程、线程和内存管理
- Windows CE 进程、线程和内存管理
- Windows CE 进程、线程和内存管理
- Windows PowerShell 2.0之进程管理
- 【原创】《Linux高级程序设计》杨宗德著 - 进程管理与程序开发 - 进程资源及属性
- 【原创】《Linux高级程序设计》杨宗德著 - 进程管理与程序开发 - 回收进程用户/内核资源
- c# 调用Web Service的问题:The operation 'XXX' could not be loaded because it has a parameter...
- swustoj2521 acmer的约会—状态压缩+bfs
- AutoHotkey数组例子
- linux awk命令详解
- https://leetcode.com/problems/sqrtx/
- 【原创】windows 进程管理
- 位运算符(&【按位与】,|【按位或】,^按位异或,~【按位取反】,<<【向左移动】,>>【向右移动】)
- 第九周 项目二--Time类中的运算符重载(续)
- php 中使用cURL发送get/post请求,上传图片,批处理
- 连接池和使用dbutils
- 风格和房管局和法国加工费
- 概念主题模型简记
- struct2中json配置ajax
- 值得记住的几点