Process p = ProcessGetProcessById(id)
设p为指定id的进程
那么,Process类有 属性
MainWindowHandle 获取关联进程主窗口的窗口句柄。
MainWindowTitle 获取进程的主窗口标题。
也就是
pMainWindowHandle
pMainWindowTitle
到于主程序类名,不好意思,windows可执行程序不一定是用C#写的哦,所以“不存在”主程序类名这种东西。
#include <tlhelp32h>
int GetProcessThreadList(DWORD th32ProcessID) //进程的ID
{
HANDLE hThreadSnap;
THREADENTRY32 th32;
hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, th32ProcessID);
if (hThreadSnap == INVALID_HANDLE_VALUE)
{
return 1;
}
th32dwSize = sizeof(THREADENTRY32);
if (!Thread32First(hThreadSnap, &th32))
{
CloseHandle(hThreadSnap);
return 1;
}
do
{
if (th32th32OwnerProcessID == th32ProcessID)
{
printf("ThreadID: %ld\n", th32th32ThreadID); //显示找到的线程的ID
}
}while(Thread32Next(hThreadSnap, &th32));
CloseHandle(hThreadSnap);
return 0;
}
如何查看程序占用的端口
一、
查看所有进程占用的端口
在开始-运行-cmd,输入:netstat
–ano可以查看所有进程
二、查看占用指定端口的程序
当你在用tomcat发布程序时,经常会遇到端口被占用的情况,我们想知道是哪个程序或进程占用了端口,可以用该命令
netstat
–ano|findstr
“指定端口号”
二、查看占用指定端口的程序
当你在用tomcat发布程序时,经常会遇到端口被占用的情况,我们想知道是哪个程序或进程占用了端口,可以用该命令
netstat
–ano|findstr
“指定端口号”
二、查看占用指定端口的程序
当你在用tomcat发布程序时,经常会遇到端口被占用的情况,我们想知道是哪个程序或进程占用了端口,可以用该命令
netstat
–ano|findstr
“指定端口号”
如:查询占用了8080端口的进程:netstat
-ano|findstr
"8080"
三、通过任务管理器杀死相关的进程
方法一:使用任务管理器杀死进程
打开任务管理器->查看->选择列->然后勾选PID选项,回到任务管理器上可以查看到对应的pid,然后结束进程
当然上面的方法有时候不好用,就是任务管理器中的进程比较多的时候,然后去找到对应的进程是很麻烦的,所以还有一种方法可以杀死进程的
方法二:使用命令杀死进程
1>首先找到进程号对应的进程名称
tasklist|findstr
进程号
如:tasklist|findstr
3112
2>然后根据进程名称杀死进程
taskkill
/f
/t
/im
进程名称
如:taskkill
/f
/t
/im
/javawexe
#include
#include
#include
#include
#pragma once
#pragma message("Psapih --> Linking with Psapilib")
#pragma comment(lib,"Psapilib")
int main(){
DWORD proId[500];
DWORD pProId = proId;
DWORD totlaNum = 1000;
DWORD num = 4;
BOOL ret = EnumProcesses(pProId, totlaNum, &num);
for (int i = 0; i < 500; i++) {
printf("%d ", proId[i]);
}
}
}
#获取了系统所有进程ID之后,就可以遍历ID,对进程进行相关处理了。比如杀死进程,退出等
首先是获取特定进程对象,可以使用ProcessGetProcesses()方法来获取系统中运行的所有进程,或者使用ProcessGetCurrentProcess()方法来获取当前程序所对应的进程对象。当有了进程对象后,可以通过进程对象名称来创建PerformanceCounter类型对象,通过设定PerformanceCounter构造函数的参数实现获取特定进程的CPU和内存使用情况。
具体实例代码如下:
首先是获取本机中所有进程对象,分别输出某一时刻各个进程的内存使用情况:
using System;using SystemCollectionsGeneric;using SystemLinq;using SystemText;using SystemDiagnostics;using SystemThreading;namespace CSharpPerformance{//该程序可以实时监控所有进程或者指定进程的工作集、私有工作集 class Program { static void Main(string[] args) { //新建一个Stopwatch变量用来统计程序运行时间 Stopwatch watch = StopwatchStartNew(); //获取本机运行的所有进程ID和进程名,并输出哥进程所使用的工作集和私有工作集 foreach (Process ps in ProcessGetProcesses()) { PerformanceCounter pf1 = new PerformanceCounter("Process", "Working Set - Private", psProcessName); PerformanceCounter pf2 = new PerformanceCounter("Process", "Working Set", psProcessName); ConsoleWriteLine("{0}:{1} {2:N}KB", psProcessName, "工作集(进程类)", psWorkingSet64 / 1024); ConsoleWriteLine("{0}:{1} {2:N}KB", psProcessName, "工作集 ", pf2NextValue() / 1024); //私有工作集 ConsoleWriteLine("{0}:{1} {2:N}KB", psProcessName, "私有工作集 ", pf1NextValue() / 1024); } watchStop(); ConsoleWriteLine(watchElapsed); ConsoleReadLine(); } }}
其中,工作集psWorkingSet64是静态的,pf2NextValue()是动态变化的,工作集包含进程运行时其独占的内存和与其他进程共享的内存的和,而私有工作集是只包含进程独占的内存。
下面一组代码可以动态显示本程序所对应的进程的CPU和内存使用率的变化:
首先是SystemInfocs类:
using System;using SystemCollectionsGeneric;using SystemDiagnostics;using SystemThreading;using SystemIO;using SystemText;using SystemManagement;using SystemRuntimeInteropServices;namespace CSharpPerformance{ public class SystemInfo { private int m_ProcessorCount = 0; //CPU个数 private PerformanceCounter pcCpuLoad; //CPU计数器 private long m_PhysicalMemory = 0; //物理内存 private const int GW_HWNDFIRST = 0; private const int GW_HWNDNEXT = 2; private const int GWL_STYLE = (-16); private const int WS_VISIBLE = 268435456; private const int WS_BORDER = 8388608; #region AIP声明 [DllImport("IpHlpApidll")] extern static public uint GetIfTable(byte[] pIfTable, ref uint pdwSize, bool bOrder); [DllImport("User32")] private extern static int GetWindow(int hWnd, int wCmd); [DllImport("User32")] private extern static int GetWindowLongA(int hWnd, int wIndx); [DllImport("user32dll")] private static extern bool GetWindowText(int hWnd, StringBuilder title, int maxBufSize); [DllImport("user32", CharSet = CharSetAuto)] private extern static int GetWindowTextLength(IntPtr hWnd); #endregion #region 构造函数 ///
/// 构造函数,初始化计数器等 ///
public SystemInfo() { //初始化CPU计数器 pcCpuLoad = new PerformanceCounter("Processor", "% Processor Time", "_Total"); pcCpuLoadMachineName = ""; pcCpuLoadNextValue(); //CPU个数 m_ProcessorCount = EnvironmentProcessorCount; //获得物理内存 ManagementClass mc = new ManagementClass("Win32_ComputerSystem"); ManagementObjectCollection moc = mcGetInstances(); foreach (ManagementObject mo in moc) { if (mo["TotalPhysicalMemory"] != null) { m_PhysicalMemory = longParse(mo["TotalPhysicalMemory"]ToString()); } } } #endregion #region CPU个数 ///
/// 获取CPU个数 ///
public int ProcessorCount { get { return m_ProcessorCount; } } #endregion #region CPU占用率 ///
/// 获取CPU占用率 ///
public float CpuLoad { get { return pcCpuLoadNextValue(); } } #endregion #region 可用内存 ///
/// 获取可用内存 ///
public long MemoryAvailable { get { long availablebytes = 0; //ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT FROM Win32_PerfRawData_PerfOS_Memory"); //foreach (ManagementObject mo in mosGet()) //{ // availablebytes = longParse(mo["Availablebytes"]ToString()); //} ManagementClass mos = new ManagementClass("Win32_OperatingSystem"); foreach (ManagementObject mo in mosGetInstances()) { if (mo["FreePhysicalMemory"] != null) { availablebytes = 1024 longParse(mo["FreePhysicalMemory"]ToString()); } } return availablebytes; } } #endregion #region 物理内存 ///
/// 获取物理内存 ///
public long PhysicalMemory { get { return m_PhysicalMemory; } } #endregion #region 结束指定进程 ///
/// 结束指定进程 ///
///
进程的 Process IDpublic static void EndProcess(int pid) { try { Process process = ProcessGetProcessById(pid); processKill(); } catch { } } #endregion #region 查找所有应用程序标题 ///
/// 查找所有应用程序标题 ///
///
应用程序标题范型
public static List
FindAllApps(int Handle) { ListApps = new List(); int hwCurr; hwCurr = GetWindow(Handle, GW_HWNDFIRST); while (hwCurr > 0) { int IsTask = (WS_VISIBLE | WS_BORDER); int lngStyle = GetWindowLongA(hwCurr, GWL_STYLE); bool TaskWindow = ((lngStyle & IsTask) == IsTask); if (TaskWindow) { int length = GetWindowTextLength(new IntPtr(hwCurr)); StringBuilder sb = new StringBuilder(2 length + 1); GetWindowText(hwCurr, sb, sbCapacity); string strTitle = sbToString(); if (!stringIsNullOrEmpty(strTitle)) { AppsAdd(strTitle); } } hwCurr = GetWindow(hwCurr, GW_HWNDNEXT); } return Apps; } #endregion }}
然后是执行代码:
using System;using SystemCollectionsGeneric;using SystemLinq;using SystemText;using SystemDiagnostics;using SystemThreading;namespace CSharpPerformance{//该程序可以实时监控程序本身对应进程的工作集、私有工作集和CPU使用率 class Program { static void Main(string[] args) { //获取当前进程对象 Process cur = ProcessGetCurrentProcess(); PerformanceCounter curpcp = new PerformanceCounter("Process", "Working Set - Private", curProcessName); PerformanceCounter curpc = new PerformanceCounter("Process", "Working Set", curProcessName); PerformanceCounter curtime = new PerformanceCounter("Process", "% Processor Time", curProcessName); //上次记录CPU的时间 TimeSpan prevCpuTime = TimeSpanZero; //Sleep的时间间隔 int interval = 1000; PerformanceCounter totalcpu = new PerformanceCounter("Processor", "% Processor Time", "_Total"); SystemInfo sys = new SystemInfo(); const int KB_DIV = 1024; const int MB_DIV = 1024 1024; const int GB_DIV = 1024 1024 1024; while (true) { //第一种方法计算CPU使用率 //当前时间 TimeSpan curCpuTime = curTotalProcessorTime; //计算 double value = (curCpuTime - prevCpuTime)TotalMilliseconds / interval / EnvironmentProcessorCount 100; prevCpuTime = curCpuTime; ConsoleWriteLine("{0}:{1} {2:N}KB CPU使用率:{3}", curProcessName, "工作集(进程类)", curWorkingSet64 / 1024,value);//这个工作集只是在一开始初始化,后期不变 ConsoleWriteLine("{0}:{1} {2:N}KB CPU使用率:{3}", curProcessName, "工作集 ", curpcNextValue() / 1024,value);//这个工作集是动态更新的 //第二种计算CPU使用率的方法 ConsoleWriteLine("{0}:{1} {2:N}KB CPU使用率:{3}%", curProcessName, "私有工作集 ", curpcpNextValue() / 1024,curtimeNextValue()/EnvironmentProcessorCount); //ThreadSleep(interval); //第一种方法获取系统CPU使用情况 ConsoleWrite("r系统CPU使用率:{0}%", totalcpuNextValue()); //ThreadSleep(interval); //第二章方法获取系统CPU和内存使用情况 ConsoleWrite("r系统CPU使用率:{0}%,系统内存使用大小:{1}MB({2}GB)", sysCpuLoad, (sysPhysicalMemory - sysMemoryAvailable) / MB_DIV, (sysPhysicalMemory - sysMemoryAvailable) / (double)GB_DIV); ThreadSleep(interval); } ConsoleReadLine(); } }}
以上程序可以正常运行,没隔1S刷新一次,实现动态显示本程序对应进程的CPU和内存使用情况。
最基本的系统进程(也就是说,这些进程是系统运行的基本条件,有了这些进程,系统就能正常运行)
smssexe Session Manager
csrssexe 子系统服务器进程
winlogonexe 管理用户登录
servicesexe 包含很多系统服务
lsassexe 管理 IP 安全策略以及启动 ISAKMP/Oakley (IKE) 和 IP 安全驱动程序。
(系统服务)
产生会话密钥以及授予用于交互式客户/服务器验证的服务凭据(ticket)。(系统服务)
svchostexe 包含很多系统服务
svchostexe
SPOOLSVEXE 将文件加载到内存中以便迟后打印。(系统服务)
explorerexe 资源管理器
internatexe 托盘区的拼音图标
附加的系统进程(这些进程不是必要的,你可以根据需要通过服务管理器来增加或减少)
mstaskexe 允许程序在指定时间运行。(系统服务)
regsvcexe 允许远程注册表 *** 作。(系统服务)
winmgmtexe 提供系统管理信息(系统服务)。
inetinfoexe 通过 Internet 信息服务的管理单元提供 FTP 连接和管理。(系统服务)
tlntsvrexe 允许远程用户登录到系统并且使用命令行运行控制台程序。(系统服务)
允许通过 Internet 信息服务的管理单元管理 Web 和 FTP 服务。(系统服务)
tftpdexe 实现 TFTP Internet 标准。该标准不要求用户名和密码。远程安装服务的一部分。(系统服务)
termsrvexe 提供多会话环境允许客户端设备访问虚拟的 Windows 2000 Professional 桌面会话以及运行在服务器上的基于 Windows 的程序。(系统服务)
dnsexe 应答对域名系统(DNS)名称的查询和更新请求。(系统服务)
Windows XP装上Sp 2 后进程添加的新丁
controlexe 是控制面板程序。
algexe --- Application Layer Gateway Service 应用层网关服务(防火墙)
wscenfyexe --- Windows Security Center Notification App 安全中心警告程序
Wuaucltexe --- Automatic Updates 自动升级
wdfmgr or wdfmgrexe进程 --- Windows Driver Foundation Manager 一般进程,Microsoft Windows media player 10 的一部分。
CDANTSRVEXE --- 安装了AUTOCAD、3DSMAX等就会有
参考资料:
如果是多个窗口,那应该每个窗口是一个进程,你通过FINDWINDOW可以找到对应的进程, *** 作就可以了。如果是浏览器,每个tab应该是子窗体,用FINDWINDOWEX函数来找就行了。
以上就是关于C# 如何获取当前进程名全部的内容,包括:C# 如何获取当前进程名、如何用WindowsAPI取得一个进程的所有线程句柄、Window通过cmd查看端口占用、相应进程、杀死进程等的命令等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)