C# 系統控制

通過註冊表修改開機啓動項:

CurrentUser項與LocalMachine項:Microsoft\\Windows\\CurrentVersion\\Run


獲取各系統信息

Computer類(添加引用VisualBasic):提供用於獲取與計算機的內存、已加載程序集、名稱和操作系統有關的信息的屬性。

屬性:

AvailablePhysicalMemory獲取計算機的可用物理內存總量。
AvailableVirtualMemory 獲取計算機的可用虛擬地址空間的總量。
InstalledUICulture 獲取隨操作系統安裝的當前用戶界面區域性。
OSFullName 獲取操作系統的全名。
OSPlatform 獲取計算機的操作系統的平臺標識符。
OSVersion 獲取計算機操作系統的版本。
TotalPhysicalMemory 獲取計算機的物理內存總量。
TotalVirtualMemory 獲取計算機的可用虛擬地址空間的總量。

SystemInformation類:提供當前操作系統的有關信息

屬性:

BootMode:取得當前系統的啓動模式。


Clipboard類:提供了將數據置於和從系統剪貼板中檢索數據的方法。 

方法:

ContainsText

功能:指示剪貼板中是否存在Text或UnicodeText格式的數據。

GetText

功能:從剪切板中檢索Text或UnicodeText格式的數據並返回。


Environment類:提供有關當前環境和平臺的信息以及操作它們的方法。

屬性:

SystemDirectory 獲取系統目錄。

系統目錄指windows操作系統的system32文件夾,該文件夾下存儲了各種系統資源及系統工具的可執行文件。

MachineName 獲取計算機名稱

CurrentDirectory 獲取當前程序運行目錄:

OSVersion 獲取操作系統版本號

TickCount 獲取系統啓動後經過的時間(毫秒)

UserName 獲取當前已登錄到windows操作系統的人員的用戶名

方法:

GetEnvironmentVariables  從當前進程檢索所有環境變量名及其值

代碼:

foreach(DictionaryEntry de in Environment.GetEnvironmentVariables())
{
      Console.WriteLine(de.Key + ":");
      Console.WriteLine(de.Value);
}

GetFolderPath 獲得系統特殊文件夾路徑

參數:Environment.SpecialFoler類型的枚舉值之一。

//ApplicationData 目錄,它用作當前漫遊用戶的應用程序特定數據的公共儲存庫。 
// CommonApplicationData 目錄,它用作所有用戶使用的應用程序特定數據的公共儲存庫。 
// LocalApplicationData 目錄,它用作當前非漫遊用戶使用的應用程序特定數據的公共儲存庫。 
// Cookies 用作 Internet Cookie 的公共儲存庫的目錄。 
// Desktop 邏輯桌面,而不是物理文件系統位置。 
// Favorites 用作用戶收藏夾項的公共儲存庫的目錄。 
// History 用作 Internet 歷史記錄項的公共儲存庫的目錄。 
// InternetCache 用作 Internet 臨時文件的公共儲存庫的目錄。 
// Programs 包含用戶程序組的目錄。 
// MyComputer “我的電腦”文件夾。  
// MyMusic “My Music”文件夾。 
// MyPictures “My Pictures”文件夾。 
// Recent 包含用戶最近使用過的文檔的目錄。 
// SendTo 包含“發送”菜單項的目錄。 
// StartMenu 包含“開始”菜單項的目錄。 
// Startup 對應於用戶的“啓動”程序組的目錄。 
// System “System”目錄。 
// Templates 用作文檔模板的公共儲存庫的目錄。 
// DesktopDirectory 用於物理上存儲桌面上的文件對象的目錄。 
// Personal 用作文檔的公共儲存庫的目錄。 
// MyDocuments “我的電腦”文件夾。 
// ProgramFiles “Program files”目錄。 
// CommonProgramFiles 用於應用程序間共享的組件的目錄。

ManagementObjectSearcher類:基於指定的查詢檢索管理對象的集合,該類是用於檢索管理信息的較爲常用的入口點之一。需要手動在項目選項卡-》程序集中添加System.Management引用。

函數:

ManagementObjectSearcher(string state) 

功能:構造函數

參數:

state:查詢語句,如select * from <Name>

get

功能:調用指定的WMI查詢並返回結果集合


注:

常用的<Name>:

// 硬件 
Win32_Processor, // CPU 處理器 
Win32_PhysicalMemory, // 物理內存條 
Win32_Keyboard, // 鍵盤 
Win32_PointingDevice, // 點輸入設備,包括鼠標。 
Win32_FloppyDrive, // 軟盤驅動器 
Win32_DiskDrive, // 硬盤驅動器 
Win32_CDROMDrive, // 光盤驅動器 
Win32_BaseBoard, // 主板 
Win32_BIOS, // BIOS 芯片 
Win32_ParallelPort, // 並口 
Win32_SerialPort, // 串口 
Win32_SerialPortConfiguration, // 串口配置 
Win32_SoundDevice, // 多媒體設置,一般指聲卡。 
Win32_SystemSlot, // 主板插槽 (ISA & PCI & AGP) 
Win32_USBController, // USB 控制器 
Win32_NetworkAdapter, // 網絡適配器 
Win32_NetworkAdapterConfiguration, // 網絡適配器設置 
Win32_Printer, // 打印機 
Win32_PrinterConfiguration, // 打印機設置 
Win32_PrintJob, // 打印機任務 
Win32_TCPIPPrinterPort, // 打印機端口 
Win32_POTSModem, // MODEM 
Win32_POTSModemToSerialPort, // MODEM 端口 
Win32_DesktopMonitor, // 顯示器 
Win32_DisplayConfiguration, // 顯卡 
Win32_DisplayControllerConfiguration, // 顯卡設置 
Win32_VideoController, // 顯卡細節。 
Win32_VideoSettings, // 顯卡支持的顯示模式。 


// 操作系統 
Win32_TimeZone, // 時區 
Win32_SystemDriver, // 驅動程序 
Win32_DiskPartition, // 磁盤分區 
Win32_LogicalDisk, // 邏輯磁盤 
Win32_LogicalDiskToPartition, // 邏輯磁盤所在分區及始末位置。 
Win32_LogicalMemoryConfiguration, // 邏輯內存配置 
Win32_PageFile, // 系統頁文件信息 
Win32_PageFileSetting, // 頁文件設置 
Win32_BootConfiguration, // 系統啓動配置 
Win32_ComputerSystem, // 計算機信息簡要 
Win32_OperatingSystem, // 操作系統信息 
Win32_StartupCommand, // 系統自動啓動程序 
Win32_Service, // 系統安裝的服務 
Win32_Group, // 系統管理組 
Win32_GroupUser, // 系統組帳號 
Win32_UserAccount, // 用戶帳號 
Win32_Process, // 系統進程 
Win32_Thread, // 系統線程 
Win32_Share, // 共享 
Win32_NetworkClient, // 已安裝的網絡客戶端 
Win32_NetworkProtocol, // 已安裝的網絡協議 



ManagementObjectCollection類:表示通過WMI檢索到的管理對象的不同集合,包括ManagementObject和ManagementClass。

ManagementObject類:用於遍歷ManagementObjectSearcher類函數返回的集合。提供了通過下標訪問屬性的方法。

函數:

InvokeMethod(string methodName,ManagementBaseObject inParametes,InvokeMethodOptions options)

功能:對WMI對象調用方法

參數:

methodName:要執行的方法的名稱

inParametes:保存方法的輸入參數的ManagementBaseObject

options:包含有關執行方法的附加選項

代碼實例:

ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_Thread");
foreach(ManagementObject ot in searcher.Get())
{
            Console.WriteLine(ot);
            foreach(PropertyData pc in ot.Properties)
            {
                 Console.WriteLine(pc.Name + ":\t" + pc.Value);
            }
}


Directory類:用於文件夾的典型操作,如複製、移動、重命名、創建和刪除等。另外,也可用於獲取和設置與目錄的創建、訪問及寫入操作相關的DateTime信息。

常用方法及說明:

CreateDirectory 創建指定路徑中的所有目錄。
Delete 刪除指定的目錄。
Exists 確定給定路徑是否引用磁盤上的現有目錄。
GetAccessControl 返回某個目錄的 Windows 訪問控制列表 (ACL)。
GetCreationTime 獲取目錄的創建日期和時間。
GetCreationTimeUtc 獲取目錄創建的日期和時間,其格式爲協調通用時間 (UTC)。
GetCurrentDirectory 獲取應用程序的當前工作目錄。
GetDirectories 獲取指定目錄中子目錄的名稱。
GetDirectoryRoot 返回指定路徑的卷信息、根信息或兩者同時返回。
GetFiles 返回指定目錄中的文件的名稱。
GetFileSystemEntries 返回指定目錄中所有文件和子目錄的名稱。
GetLastAccessTime 返回上次訪問指定文件或目錄的日期和時間。
GetLastAccessTimeUtc 返回上次訪問指定文件或目錄的日期和時間,其格式爲協調通用時間 (UTC)。
GetLastWriteTime 返回上次寫入指定文件或目錄的日期和時間。
GetLastWriteTimeUtc 返回上次寫入指定文件或目錄的日期和時間,其格式爲協調通用時間 (UTC)。
GetLogicalDrives 檢索此計算機上格式爲“<驅動器號>:\”的邏輯驅動器的名稱。
GetParent 檢索指定路徑的父目錄,包括絕對路徑相對路徑

DriveInfo類:提供對有關驅動器的信息的訪問,使用DriveInfo類可以確定哪些驅動器可用,以及這些驅動器的類型,還可以通過查詢來確定驅動器的容量和可用空閒空間,獲取磁盤的文件類型、驅動器類型等。

屬性:

AvailableFreeSpace
指示驅動器上的可用空閒空間總量(以字節爲單位)。
System_CAPS_pubproperty DriveFormat
獲取文件系統的名稱,例如 NTFS 或 FAT32。
System_CAPS_pubproperty DriveType
獲取驅動器類型,如 CD-ROM、可移動、網絡或固定。
System_CAPS_pubproperty IsReady
獲取一個指示驅動器是否已準備好的值。
System_CAPS_pubproperty Name
獲取驅動器的名稱,如 C:\。
System_CAPS_pubproperty RootDirectory
獲取驅動器的根目錄。
System_CAPS_pubproperty TotalFreeSpace
獲取驅動器上的可用空閒空間總量(以字節爲單位)。
System_CAPS_pubproperty TotalSize
獲取驅動器上存儲空間的總大小(以字節爲單位)。
System_CAPS_pubproperty VolumeLabel
獲取或設置驅動器的卷標。

方法:

Equals(Object)
確定指定的對象是否等於當前對象。(繼承自 Object。)
System_CAPS_pubmethodSystem_CAPS_static GetDrives()
檢索計算機上的所有邏輯驅動器的驅動器名稱。
System_CAPS_pubmethod GetHashCode()
作爲默認哈希函數。(繼承自 Object。)
System_CAPS_pubmethod GetType()
獲取當前實例的 Type。(繼承自 Object。)
System_CAPS_pubmethod ToString()
將驅動器名稱作爲字符串返回。(覆蓋 Object.ToString()。)

dns類:提供簡單的域名解析功能。

函數:

GetHostByName:獲取指定dns主機名的dns信息。

GetHostName:獲取本地計算機的主機名。

IPHostEntry類:作爲Internet主機地址信息提供容器。

屬性:

AddressList:獲取或設置與主機關聯的ip地址列表。

SystemInformation 類:winform下可用。提供 static 屬性,該屬性可用於獲取當前系統環境的有關信息。該類提供對信息(例如,Windows 顯示元素大小、操作系統設置、網絡可用性和系統上安裝的硬件的功能)的訪問。此類無法實例化。

VirtualScreen:取得當前屏幕的分辨率。

Application類:提供 static 方法和屬性以管理應用程序,例如啓動和停止應用程序、處理 Windows 消息的方法和獲取應用程序信息的屬性。

屬性:

Network:判斷是否存在網絡連接。

ExecutablePath:取得本應用程序可執行文件路徑和可執行文件名稱。

方法:

SetSuspendState:請求系統掛起或休眠

參數:

(1)PowerState:指示要轉換到的目標電源活動模式的PowerState

(2)bool:若要立即掛起,則爲true,否則向每個應用程序發送掛起請求

(3)bool:爲true時,可在發生喚醒事件是禁止將系統的電源狀態恢復爲活動狀態;爲false時則在發生喚醒事件是允許將系統的電源狀態恢復爲活動狀態

更多信息:https://msdn.microsoft.com/zh-cn/library/system.windows.forms.application.aspx

WindowsPrincipal類:允許代碼檢查window用戶的windows組成員身份。

方法:

IsInRole 確定當前主體是否屬於指定的windows用戶組

參數:WindowsBuiltInRole枚舉值之一

代碼示例:

AppDomain domain = Thread.GetDomain();
domain.SetPrincipalPolicy(System.Security.Principal.PrincipalPolicy.WindowsPrincipal);//將操作系統組映射到角色
WindowsPrincipal pri = (WindowsPrincipal)Thread.CurrentPrincipal;
if (pri.IsInRole(WindowsBuiltInRole.Administrator))
{
     Console.WriteLine("Administrator");
}

獲取日誌信息

EventLog類:主要用來提供與windows事件日誌的交互。
屬性:
Log 用於獲取或設置讀取或寫入的日誌名稱,可以是Application,System和Security或一個自定義的日誌名稱,默認爲""
Entries 用於獲取時間日誌的內容,返回EventLogEntryCollection集合,用於保留事件日誌中的項。
EventLogEntryCollection類:用於定義EventLogEntry實例集合的大小和枚舉值
Count 獲取事件日誌中的項數。
EventLogEntry 類:用於在事件日誌中封裝單個記錄。
eventLog1.Log = "System";
EventLogEntryCollection collection = eventLog1.Entries;
label1.Text = "";
foreach(EventLogEntry entry in collection)
{
     label1.Text += "事件:" + entry.InstanceId.ToString()+"\n";
}
進程與服務:
Process類:提供對本地和遠程進程的訪問,並使用戶能夠啓動和停止本地系統進程。
屬性:
BasePriority 獲取關聯進程的基本優先級。
ExitCode 獲取關聯進程終止時指定的值。
ExitTime 獲取關聯進程退出的時間。
Handle 獲取關聯進程的本機句柄。
HandleCount 獲取由進程打開的句柄數。
HasExited 獲取指示關聯進程是否已終止的值。
Id 獲取關聯進程的唯一標識符。
MachineName 獲取關聯進程正在其上運行的計算機的名稱。
MainModule 獲取關聯進程的主模塊。
MainWindowHandle 獲取關聯進程主窗口的窗口句柄。
MainWindowTitle 獲取進程的主窗口標題。
Modules 獲取已由關聯進程加載的模塊。
PriorityClass 獲取或設置關聯進程的總體優先級類別。
ProcessName 獲取該進程的名稱。
StartInfo 獲取或設置要傳遞給 Process 的 Start 方法的屬性。
StartTime 獲取關聯進程啓動的時間。
Threads 獲取在關聯進程中運行的一組線程。
VirtualMemorySize64 獲取爲關聯進程分配的虛擬內存量(以字節爲單位)。
方法:
Close 釋放與此組件關聯的所有資源。
CloseMainWindow 通過向進程的主窗口發送關閉消息來關閉擁有用戶界面的進程。
GetCurrentProcess 獲取新的 Process 組件並將其與當前活動的進程關聯。
GetProcessById 返回新的 Process 組件(給定本地計算機上某個進程的標識符)。
GetProcesses 爲本地計算機上的每個進程資源創建一個新的 Process 組件。
GetProcessesByName創建新的 Process 組件的數組,並將它們與本地計算機上共享指定的進程名稱的所有進程資源關聯。
Kill() 立即停止關聯的進程。
Refresh() 放棄已緩存到進程組件的關聯僅存的任何相關信息。
Start() 啓動(或重用)此 Process 組件的 StartInfo 屬性指定的進程資源,並將其與該組件關聯。
實例:調用命令管理器關閉計算機
Process mypro = new Process();
            mypro.StartInfo.FileName = "cmd.exe";
            mypro.StartInfo.UseShellExecute = false;
            mypro.StartInfo.RedirectStandardInput = true;
            mypro.StartInfo.RedirectStandardOutput = true;
            mypro.StartInfo.RedirectStandardError = true;
            mypro.StartInfo.CreateNoWindow = true;
            mypro.Start();
            mypro.StandardInput.WriteLine("shutdown -r -t 0");
ServiceController類:表示 Windows 服務並允許連接到正在運行或者已停止的服務、對其進行操作或獲取有關它的信息。
屬性:
ServiceName:主要用於獲取或設置對此實例引用的服務進行標誌的名稱。
Status:獲取由此實例引用的服務的狀態。
Start:用於啓動服務。
Stop:用於停止服務。
WaitForStatus:主要用來等待服務達到指定狀態。
實例:
ServiceController[] names = ServiceController.GetServices();
foreach(ServiceController controller in names)
{
        Console.WriteLine(controller.ServiceName);
}


Mutex類:表示一個同步基元,也可用於進程間同步。
構造函數:
public Mutex(bool initiallyOwned,string name,out bool createdNew)
參數:
initiallyOwned:爲true則給予調用線程已命名的系統互斥體的出世所屬權。
name:互斥體名稱。
createdNew:創建成功則返回true,已存在則爲false。
遠程控制計算機:
注1:需要手動在項目選項卡-》程序集中添加System.Management引用。
注2:需要在被控制端設置允許遠程關機的權限
ConnectionOptions類:指定用於建立 WMI 連接所需的所有設置。
屬性:
Username:獲取或設置用於連接操作的用戶名。
Password:設置爲指定用戶的密碼。

ManagementScope類:表示用於管理操作的範圍。
函數:
ManagementScope(String path, ConnectionOptions options)
參數:
path:指定路徑範圍
options:使用指定選項初始化

ObjectQuery類:表示返回實例或類的管理查詢。
ObjectQuery oq = new ObjectQuery("SELECT * FROM Win32_OperatingSystem");

代碼實例:
/// <summary>
        /// 關閉或重啓遠程計算機
        /// </summary>
        /// <param name="doinfo">要執行的操作命令</param>
        private void CloseComputer(string doinfo)
        {
            ConnectionOptions op = new ConnectionOptions();//創建ConnectionOptions對象
            op.Username = textBox4.Text;//設置遠程機器用戶名
            op.Password = textBox3.Text;//設置遠程機器登錄密碼
            //創建ManagementScope對象
            ManagementScope scope = new ManagementScope("\\\\" + textBox2.Text + "\\root\\cimv2:Win32_Service", op);
            try
            {
                scope.Connect();//連接遠程對象
                ObjectQuery oq = new ObjectQuery("SELECT * FROM Win32_OperatingSystem");//實例化ObjectQuery對象
                //創建ManagementObjectSearcher對象
                ManagementObjectSearcher query1 = new ManagementObjectSearcher(scope, oq);
                ManagementObjectCollection queryCollection1 = query1.Get();//得到WMI控制
                foreach (ManagementObject mobj in queryCollection1)
                {
                    string[] str = { "" };
                    mobj.InvokeMethod(doinfo, str);
                }
            }
            catch (Exception ey)
            {
                MessageBox.Show(ey.Message);
            }
        }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章