日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# 获取进程或线程的信息

發布時間:2023/12/18 C# 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 获取进程或线程的信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Diagnostics;

?

namespace ConsoleApp

{

? ? class ProcessDo

? ? {

? ? ? ? /// <summary>

? ? ? ? /// 獲取進程相關信息

? ? ? ? /// </summary>

? ? ? ? public static void GetProcessInfomation()

? ? ? ? {

? ? ? ? ? ? Process pro = Process.GetProcessesByName("QQ")[0];

? ? ? ? ? ? Console.WriteLine("進程名稱:" + pro.ProcessName);

? ? ? ? ? ? Console.WriteLine("進程ID:" + pro.Id.ToString());

? ? ? ? ? ? Console.WriteLine("啟動時間:" + pro.StartTime.ToLongDateString() + pro.StartTime.ToLongTimeString());

? ? ? ? ? ? Console.WriteLine("是否響應:" + pro.Responding.ToString());

? ? ? ? ? ? Console.WriteLine("關聯進程句柄:" + pro.Handle.ToString());

? ? ? ? ? ? Console.WriteLine("進程打開的句柄數:" + pro.HandleCount.ToString());

? ? ? ? ? ? Console.WriteLine("主窗口句柄:" + pro.MainWindowHandle.ToString());

? ? ? ? ? ? Console.WriteLine("主窗口標題:" + pro.MainWindowTitle);

? ? ? ? ? ? Console.WriteLine("模塊數量:" + pro.Modules.Count.ToString());

? ? ? ? ? ? Console.WriteLine("基本優先級:" + pro.BasePriority.ToString());

? ? ? ? ? ? Console.WriteLine("提升優先級:" + pro.PriorityBoostEnabled.ToString());

? ? ? ? ? ? Console.WriteLine("處理器:" + pro.ProcessorAffinity.ToInt32().ToString());

? ? ? ? ? ? Console.WriteLine("最小工作集:" + pro.MinWorkingSet.ToInt32().ToString());

? ? ? ? ? ? Console.WriteLine("最大工作集:" + pro.MaxWorkingSet.ToInt32().ToString());

? ? ? ? ? ? Console.WriteLine("工作集:" + pro.WorkingSet.ToString());

? ? ? ? ? ? Console.WriteLine("峰值工作集:" + pro.PeakWorkingSet.ToString());

? ? ? ? ? ? Console.WriteLine("專用內存大小:" + pro.PrivateMemorySize.ToString());

? ? ? ? ? ? Console.WriteLine("未分頁內存大小:" + pro.NonpagedSystemMemorySize.ToString());

? ? ? ? ? ? Console.WriteLine("分頁內存大小:" + pro.PagedMemorySize.ToString());

? ? ? ? ? ? Console.WriteLine("峰值分頁內存大小:" + pro.PeakPagedMemorySize.ToString());

? ? ? ? ? ? Console.WriteLine("虛擬內存大小:" + pro.VirtualMemorySize.ToString());

? ? ? ? ? ? Console.WriteLine("峰值虛擬內存大小:" + pro.PeakVirtualMemorySize.ToString());

? ? ? ? ? ? Console.WriteLine("占用時間:" + pro.TotalProcessorTime.ToString());

? ? ? ? ? ? Console.WriteLine("特權占用時間:" + pro.PrivilegedProcessorTime.ToString());

? ? ? ? ? ? Console.WriteLine("用戶占用時間:" + pro.UserProcessorTime.ToString());

?

? ? ? ? }

?

?

? ? ? ? /// <summary>

? ? ? ? /// 進程的線程詳細信息

? ? ? ? /// </summary>

? ? ? ? public static void GetProcessThreadInfomation()

? ? ? ? {

? ? ? ? ? ? Process pro = Process.GetProcessesByName("QQ")[0];

? ? ? ? ? ? Console.WriteLine("QQ程序進程的線程詳細信息如下:");

? ? ? ? ? ? int length = pro.Threads.Count;

? ? ? ? ? ? for (int i = 0; i < length; i++)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? var thread = pro.Threads[i];

? ? ? ? ? ? ? ? Console.WriteLine("標識符:" + thread.Id.ToString());

? ? ? ? ? ? ? ? Console.WriteLine("基本優先級:" + thread.BasePriority.ToString());

? ? ? ? ? ? ? ? Console.WriteLine("當前優先級:" + thread.CurrentPriority.ToString());

? ? ? ? ? ? ? ? Console.WriteLine("內存地址:" + thread.StartAddress.ToInt32());

? ? ? ? ? ? ? ? Console.WriteLine("啟動時間:" + thread.StartTime.ToString());

? ? ? ? ? ? ? ? Console.WriteLine("使用時間:" + thread.UserProcessorTime.ToString());

? ? ? ? ? ? ? ? Console.Write("當前狀態:");

? ? ? ? ? ? ? ? switch (thread.ThreadState)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? case ThreadState.Initialized:

? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("線程已經初始化但尚未啟動");

? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? case ThreadState.Ready:

? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("線程準備在下一個可用的處理器上運行");

? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? case ThreadState.Running:

? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("當前正在使用處理器");

? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? case ThreadState.Standby:

? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("線程將要使用處理器");

? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? case ThreadState.Terminated:

? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("線程已完成執行并退出");?

? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? case ThreadState.Transition:

? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("線程在可以執行錢等待處理器之外的資源");

? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? case ThreadState.Unknown:

? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("狀態未知");

? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? case ThreadState.Wait:

? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("正在等待外圍操作完成或者資源釋放");

? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? default:

? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? if (thread.ThreadState == ThreadState.Wait)

? ? ? ? ? ? ? ? {

?

? ? ? ? ? ? ? ? ? ? Console.Write("等待原因:");

? ? ? ? ? ? ? ? ? ? switch (thread.WaitReason)

? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? case ThreadWaitReason.EventPairHigh:

? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("線程正在等待事件對高");

? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? ? ? case ThreadWaitReason.EventPairLow:

? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("線程正在等待事件對低");

? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? ? ? case ThreadWaitReason.ExecutionDelay:

? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("線程執行延遲");

? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? ? ? case ThreadWaitReason.Executive:

? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("線程正在等待計劃程序");

? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? ? ? case ThreadWaitReason.FreePage:

? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("線程正在等待可用的虛擬內存頁");

? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? ? ? case ThreadWaitReason.LpcReceive:

? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("線程正在等待本地過程調用到達");

? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? ? ? case ThreadWaitReason.LpcReply:

? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("線程正在等待對本地過程調用的回復到達");

? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? ? ? case ThreadWaitReason.PageIn:

? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("線程正在等待虛擬內存頁到達內存");

? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? ? ? case ThreadWaitReason.PageOut:

? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("線程正在等待虛擬內存頁寫入磁盤");

? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? ? ? case ThreadWaitReason.Suspended:

? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("線程執行暫停");

? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? ? ? case ThreadWaitReason.SystemAllocation:

? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("線程正在等待系統分配");

? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? ? ? case ThreadWaitReason.Unknown:

? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("線程因位置原因而等待");

? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? ? ? case ThreadWaitReason.UserRequest:

? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("線程正在等待用戶請求");

? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? ? ? case ThreadWaitReason.VirtualMemory:

? ? ? ? ? ? ? ? ? ? ? ? ? ? Console.WriteLine("線程正在等待系統分配虛擬內存");

? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? ? ? default:

? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? Console.WriteLine();

? ? ? ? ? ? ?}

? ? ? ? }

?

? ? ? ? /// <summary>

? ? ? ? /// 限制應用程序運行時間

? ? ? ? /// 即關聯程序超出設置的運行將自動關閉

? ? ? ? /// </summary>

? ? ? ? public static void GetKillAppForWaitTime()

? ? ? ? {

? ? ? ? ? ? Process proc = new Process();

? ? ? ? ? ? proc.StartInfo = new ProcessStartInfo(@"C:\Documents and Settings\zkk\桌面\mysql_20120925.sql");

? ? ? ? ? ? //啟動應用程序

? ? ? ? ? ? proc.Start();

? ? ? ? ? ? //等待程序師徒完成載入

? ? ? ? ? ? proc.WaitForInputIdle();

? ? ? ? ? ? //等待程序結束執行

? ? ? ? ? ? proc.WaitForExit(3000);

? ? ? ? ? ? //如果程序在時間期限之前關閉,HasExited將會是true

? ? ? ? ? ? if (proc.HasExited == false)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? //測試程序是否已經停止回應

? ? ? ? ? ? ? ? if (proc.Responding)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? //程序有回應,關閉主視圖

? ? ? ? ? ? ? ? ? ? proc.CloseMainWindow();

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? else

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? //如果程序沒有回應,將強制關閉

? ? ? ? ? ? ? ? ? ? proc.Kill();

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? }

}

?

/******************************************

如果獲得當前進程的Id用:

Process[] processes = Process.GetProcesses();?
foreach(Process process in processes)?
{?
if(process.ProcessName == "進程名"?
{?
MessageBox.Show(process.Id);?
}?
}

Process processes?? =Process.GetCurrentProcess

processes.id獲得當前進程的ID

如果獲得當前線程的ID用:

Thread.CurrentThread.ManagedThreadId.ToString() (推薦)

AppDomain.GetCurrentThreadId().ToString()

總結

以上是生活随笔為你收集整理的C# 获取进程或线程的信息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。