狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

編程源碼:C#獲取系統軟硬件信息類介紹與實例

admin
2012年1月1日 2:32 本文熱度 2868
[p]所謂系統信息,就是計算機的軟件硬件信息,硬件如cpu主頻、網卡名稱等,軟件信息就如操作系統目錄,用戶目錄等。在平常的編程中,我們往往要用到這些系統信息,比如我前面的字體查看器,如果要寫個c#版,則首先要獲得系統字體的安裝目錄。總之,讀取系統信息對于編程還是很重要的,.net也不負所望,提供了很便利的方法,本文提供了四種方法來從各個方面對系統信息進行讀取。[/p]
[p]第一種方法:用systeminformation 類[/p]
[p]systeminformation 提供靜態方法和屬性,它們可用于獲取諸如 windows 顯示元素大小、操作系統設置、網絡可用性和系統中所安裝硬件的性能等信息,這種方法側重于操作系統(這里特指windows)的一些設置和狀態。[/p]
[p]第二種方法 :用environment 類[/p]
[p]通過這種方法可檢索的系統信息包括命令行參數、環境變量設置、調用堆棧的內容、上次系統引導以來的時間,以及公共語言運行庫的版本等等,測重于使用這個類的應用程序所處的環境和狀態,也有比較多的動態信息,比如開機啟動后的毫秒數等等。[/p]
[p]第三種方法 用registrykey 類[/p]
[p]這種方法方法讀取的也只能是靜態的設置,不過比上面兩種方法更加接近操作系統,因為值是直接從注冊表中讀取出來的,有好處也有不好的地方,好處就是基本上可以獲得任何設置。不好的地方是不夠便利,畢竟,檢索注冊表的鍵值不如直接調用方法來得方便。[/p]
[p]第四種方法 用api函數[/p]
[p]這種方法嚴格說來不是用c#來實現對系統信息的讀取,因為它實際調用的是系統api。這種方法有更加有意義的地方,就在其對api功能的調用,因而我們可以做出更多的事情。這種方法也可以在java中依樣畫胡蘆地用到。[/p]
[p]下面講一下程序結構:[/p]
[p]//registrykey 類所需要的包:[/p]
[p]using microsoft.win32;[br]//dllimport方法所需要的包:[br]using system.runtime.interopservices;[br]//stringbuilder所需要的包:[br]using system.text;[br]//聲明api函數[br][dllimport("kernel32")] [br]public static extern void getwindowsdirectory(stringbuilder windir,int count); [br][dllimport("kernel32")] [br]public static extern void getsystemdirectory(stringbuilder sysdir,int count); [br][dllimport("kernel32")] [br]public static extern void getsysteminfo(ref cpu_info cpuinfo); [br][dllimport("kernel32")] [br]public static extern void globalmemorystatus(ref memory_info meminfo); [br][dllimport("kernel32")] [br]public static extern void getsystemtime(ref systemtime_info stinfo); [br]//定義以下各結構 [br]//定義cpu的信息結構 [br][structlayout(layoutkind.sequential)] [br]public struct cpu_info [br]{ [br]public uint dwoemid; [br]public uint dwpagesize; [br]public uint lpminimumapplicationaddress; [br]public uint lpmaximumapplicationaddress; [br]public uint dwactiveprocessormask; [br]public uint dwnumberofprocessors; [br]public uint dwprocessortype; [br]public uint dwallocationgranularity; [br]public uint dwprocessorlevel; [br]public uint dwprocessorrevision; [br]} [br]//定義內存的信息結構 [br][structlayout(layoutkind.sequential)] [br]public struct memory_info [br]{ [br]public uint dwlength; [br]public uint dwmemoryload; [br]public uint dwtotalphys; [br]public uint dwavailphys; [br]public uint dwtotalpagefile; [br]public uint dwavailpagefile; [br]public uint dwtotalvirtual; [br]public uint dwavailvirtual; [br]} [br]//定義系統時間的信息結構 [br][structlayout(layoutkind.sequential)] [br]public struct systemtime_info [br]{ [br]public ushort wyear; [br]public ushort wmonth; [br]public ushort wdayofweek; [br]public ushort wday; [br]public ushort whour; [br]public ushort wminute; [br]public ushort wsecond; [br]public ushort wmilliseconds; [br]}[br]private void initsysinfodata()[br]{[br]//獲取操作系統設置[br]lstsysinfo.items.add("計算機名 : " + systeminformation.computername );[br]lstsysinfo.items.add("是否已連接網絡 : " + systeminformation.network );[br]lstsysinfo.items.add("用戶域 : " + systeminformation.userdomainname ); [br]lstsysinfo.items.add("當前線程用戶名 : " + systeminformation.username ); [br]lstsysinfo.items.add("啟動方式 : " + systeminformation.bootmode );[br]lstsysinfo.items.add("菜單的字體 : " + systeminformation.menufont );[br]lstsysinfo.items.add("顯示器的數目 : " + systeminformation.monitorcount );[br]lstsysinfo.items.add("鼠標已安裝 : " + systeminformation.mousepresent );[br]lstsysinfo.items.add("鼠標按鈕數 : " + systeminformation.mousebuttons); [br]lstsysinfo.items.add("是否交互模式 : " + systeminformation.userinteractive );[br]lstsysinfo.items.add("屏幕界限: " + systeminformation.virtualscreen );[br]}[br]public void initenvdata()[br]{[br][br]//獲取程序運行的相關信息.[br]lstenv.items.add("命令行:"+ environment.commandline);[br]lstenv.items.add("命令行參數:"+ string.join(", ",environment.getcommandlineargs()));[br]lstenv.items.add("當前目錄:"+ environment.currentdirectory);[br]lstenv.items.add("操作系統版本:"+ environment.osversion);[br]lstenv.items.add("系統目錄:"+ environment.systemdirectory);[br]lstenv.items.add("堆棧信息:"+ environment.stacktrace);[br]lstenv.items.add("用戶域:"+ environment.userdomainname);[br]lstenv.items.add("clr版本:"+ environment.version);[br]lstenv.items.add("系統啟動后經過的毫秒:"+ environment.tickcount);[br]lstenv.items.add("進程上下文的物理內存量:"+ environment.workingset); [br]string[] drives = environment.getlogicaldrives();[br]lstenv.items.add("本機磁盤驅動器: "+ string.join(", ", drives));[br][br]// 獲取本機所有環境變量[br]idictionary environmentvariables = environment.getenvironmentvariables();[br]foreach (dictionaryentry de in environmentvariables)[br]{[br]lstenv.items.add(de.key+"="+de.value);[br]}[br][br]}[br]public void initregkeydata()[br]{[br]//通過注冊表獲取信息[br]registrykey rkey = registry.localmachine;[br]rkey = rkey.opensubkey("hardware\\description\\system\\centralprocessor\\0");[br]lstregkey.items.add("處理器信息:"+rkey.getvalue("processornamestring").tostring().trim());[br][br]rkey=registry.localmachine;[br]rkey = rkey.opensubkey("software\\microsoft\\windows nt\\currentversion\\networkcards\\1");[br]lstregkey.items.add("網卡信息:"+(string)rkey.getvalue("description"));[br]} [br]public void initapidata()[br]{[br]//調用getwindowsdirectory和getsystemdirectory函數分別取得windows路徑和系統路徑 [br]const int nchars = 128; [br]stringbuilder buff = new stringbuilder(nchars); [br]getwindowsdirectory(buff,nchars); [br]lstapi.items.add("windows路徑:"+buff.tostring()); [br]getsystemdirectory(buff,nchars); [br]lstapi.items.add("系統路徑:"+buff.tostring()); [br]//調用getsysteminfo函數獲取cpu的相關信息 [br]cpu_info cpuinfo; [br]cpuinfo = new cpu_info(); [br]getsysteminfo(ref cpuinfo); [br]//cpu信息的讀取是錯誤的,我本只有一個cpu,讀成了兩個[br]lstapi.items.add("本計算機中有"+cpuinfo.dwnumberofprocessors.tostring()+"個cpu"); [br]lstapi.items.add("cpu的類型為"+cpuinfo.dwprocessortype.tostring()); [br]lstapi.items.add("cpu等級為"+cpuinfo.dwprocessorlevel.tostring()); [br]lstapi.items.add("cpu的oem id為"+cpuinfo.dwoemid.tostring()); [br]lstapi.items.add("cpu中的頁面大小為"+cpuinfo.dwpagesize.tostring()); [br]//調用globalmemorystatus函數獲取內存的相關信息 [br]memory_info meminfo; [br]meminfo = new memory_info(); [br]globalmemorystatus(ref meminfo); [br]lstapi.items.add( meminfo.dwmemoryload.tostring()+"%的內存正在使用"); [br]lstapi.items.add("物理內存共有"+meminfo.dwtotalphys.tostring()+"字節"); [br]lstapi.items.add("可使用的物理內存有"+meminfo.dwavailphys.tostring()+"字節"); [br]lstapi.items.add( "交換文件總大小為"+meminfo.dwtotalpagefile.tostring()+"字節"); [br]lstapi.items.add( "尚可交換文件大小為"+meminfo.dwavailpagefile.tostring()+"字節"); [br]lstapi.items.add( "總虛擬內存有"+meminfo.dwtotalvirtual.tostring()+"字節"); [br]lstapi.items.add( "未用虛擬內存有"+meminfo.dwavailvirtual.tostring()+"字節"); [br]//調用getsystemtime函數獲取系統時間信息 [br]systemtime_info stinfo; [br]stinfo = new systemtime_info(); [br]getsystemtime(ref stinfo); [br]lstapi.items.add(stinfo.wyear.tostring()+"年"+stinfo.wmonth.tostring()+"月"+stinfo.wday.tostring()+"日"); [br]lstapi.items.add((stinfo.whour+8).tostring()+"點"+stinfo.wminute.tostring()+"分"+stinfo.wsecond.tostring()+"秒"); [/p]
[p]}[/p]

該文章在 2012/1/1 2:32:56 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved