在Visual C 中運用API函式獲取系統資訊

2021-09-05 22:56:14 字數 2292 閱讀 9877

api函式是構築windows應用程式基石,是windows程式設計必備利器。每一種windows應用程式開發工具都提供了間接或直接呼叫了windows api函式方法,或者是呼叫windows api函式介面,也就是說具備呼叫動態連線庫能力。visual c#和其它開發工具一樣也能夠呼叫動態鏈結庫api函式。本文中筆者就結合例項向大家介紹在visual c#中如何呼叫各種返回值api,該例項就是乙個通過api函式呼叫獲取系統資訊程式。

在visual c#中呼叫api基本過程:

首先,在呼叫api之前,你必須先導入system.runtime.interopservices這個命名空間。該命名空間包含了在visual c#中呼叫api一些必要集合,具體方法如下:

using system.runtime.interopservices;

[dllimport("kernel32")]

public static extern void getwindowsdirectory(stringbuilder windir,int count);

其中,"dllimport"屬性用來從不可控**中呼叫乙個方法,它指定了dll位置,該dll中包含呼叫外部方法;"kernel32"設定了類庫名;"public"指明函式訪問型別為公有;"static"修飾符宣告乙個靜態元素,而該元素屬於型別本身而不是指定物件;"extern"表示該方法將在工程外部執行,同時使用dllimport匯入方法必須使用"extern"修飾符;最後getwindowsdirectory函式包含了兩個引數,乙個為stringbuilder型別,另乙個為int型別,該方法返回內容存在於stringbuilder型別引數中。同時,因為我們在這裡使用到了stringbuilder類,所以在程式開始處,我們還得新增system.text這個命名空間,方法同上。

其他幾個api函式宣告如下:

[dllimport("kernel32")]

public static extern void getsystemdirectory(stringbuilder sysdir,int count);

[dllimport("kernel32")]

public static extern void getsysteminfo(ref cpu_info cpuinfo);

[dllimport("kernel32")]

public static extern void globalmemorystatus(ref memory_info meminfo);

[dllimport("kernel32")]

public static extern void getsystemtime(ref systemtime_info stinfo);

以上幾個api作用分別是獲取系統路徑,獲得cpu相關資訊,獲得記憶體相關資訊,獲得系統時間等。

在宣告完所有api函式後,我們發現後三個函式分別用到了cpu_info、memory_info、systemtime_info等結構,這些結構並非是.net內部,它們從何而來?其實,我們在用到以上api呼叫時均需用到以上結構,我們將函式呼叫獲得資訊存放在以上結構體中,最後返回給程式輸出。這些結構體比較複雜,但是如果開發者能夠熟練運用,那麼整個api世界將盡在開發者掌握之中。以下就是上述結構體宣告:

//定義以下各結構

//定義記憶體資訊結構

[structlayout(layoutkind.sequential)]

public struct memory_info

//定義系統時間資訊結構

[structlayout(layoutkind.sequential)] 字串1

public struct systemtime_info

結構體定義主體部分和c 中沒多大差別,具體每個結構體內部成員定義可參考聯機幫助中sdk文件。同時,我們還發現在每個結構體定義上面都有一句用中括號括起來說明性文字。這些說明都是有關結構體成員布局,共有三種選項,分別說明如下:

layoutkind.automatic:為了提高效率允許執行態對型別成員重新排序。

layoutkind.explicit:對每個域按照fieldoffset屬性對型別成員排序

layoutkind.sequential:對出現在受管轄型別定義地方不受管轄記憶體中型別成員進行排序。

在上面程式中,為了方便起見我們都用到了第三種方式。 

所有api函式以及相關結構體宣告完畢後,我們就運用這些api來實現我們程式功能――獲取系統相關資訊。

簡單介面布置後,我們新增乙個按鈕("獲取資訊"按鈕)訊息處理函式如下:

private void getinfo_click(object sender, system.eventargs e)

在Visual C 中運用API函式獲取系統資訊

api函式是構築windows應用程式的基石,是windows程式設計的必備利器。每一種windows應用程式開發工具都提供了間接或直接呼叫了windows api函式的方法,或者是呼叫windows api函式的介面,也就是說具備呼叫動態連線庫的能力。visual c 中如何呼叫各種返回值的api...

在Visual C 中運用API函式獲取系統資訊

api函式是構築windows應用程式的基石,是windows程式設計的必備利器。每一種windows應用程式開發工具都提供了間接或直接呼叫了windows api函式的方法,或者是呼叫windows api函式的介面,也就是說具備呼叫動態連線庫的能力。visual c 中如何呼叫各種返回值的api...

在Visual C 中運用API函式獲取系統資訊

api函式是構築windows應用程式的基石,是windows程式設計的必備利器。每一種windows應用程式開發工具都提供了間接或直接呼叫了windows api函式的方法,或者是呼叫windows api函式的介面,也就是說具備呼叫動態連線庫的能力。visual c 和其它開發工具一樣也能夠呼叫...