青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

道。道。道

安全特性不等于安全的特性

   :: 首頁 :: 聯系 :: 聚合  :: 管理

常用鏈接

搜索

  •  

最新評論

在Visual C#中調用API的基本過程:
  首先,在調用API之前,你必須先導入System.Runtime.InteropServices這個名稱空間。該名稱空間包含了在Visual C#中調用API的一些必要集合,具體的方法如下:
   using System.Runtime.InteropServices;
  在導入了名稱空間后,我們要聲明在程序中所要用到的API函數。我們的程序主要是獲取系統的相關信息,所以用到的API函數都是返回系統信息的。先給出在Visual C#中聲明API的方法:
[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世界將盡在開發者的掌握之中。以下就是上述結構體的聲明:
//定義以下各結構
//定義CPU的信息結構
[StructLayout(LayoutKind.Sequential)]  
public struct CPU_INFO  
{  
public uint dwOemId;  
public uint dwPageSize;  
public uint lpMinimumApplicationAddress;  
public uint lpMaximumApplicationAddress;  
public uint dwActiveProcessorMask;  
public uint dwNumberOfProcessors;  
public uint dwProcessorType;  
public uint dwAllocationGranularity;  
public uint dwProcessorLevel;  
public uint dwProcessorRevision;  
}
//定義內存的信息結構
[StructLayout(LayoutKind.Sequential)]  
public struct MEMORY_INFO  
{
public uint dwLength;
public uint dwMemoryLoad;  
public uint dwTotalPhys;  
public uint dwAvailPhys;  
public uint dwTotalPageFile;  
public uint dwAvailPageFile;  
public uint dwTotalVirtual;  
public uint dwAvailVirtual;  
}
//定義系統時間的信息結構
[StructLayout(LayoutKind.Sequential)]  
public struct SYSTEMTIME_INFO  
{  
public ushort wYear;  
public ushort wMonth;  
public ushort wDayOfWeek;  
public ushort wDay;  
public ushort wHour;  
public ushort wMinute;  
public ushort wSecond;  
public ushort wMilliseconds;  
}

  結構體定義的主體部分和C++中的沒多大差別,具體每個結構體內部成員的定義可參考聯機幫助中的SDK文檔。同時,我們還發現在每個結構體定義的上面都有一句用中括號括起來的說明性文字。這些說明都是有關結構體成員的布局的,共有三種選項,分別說明如下:
  LayoutKind.Automatic:為了提高效率允許運行態對類型成員重新排序。  
    注意:永遠不要使用這個選項來調用不受管轄的動態鏈接庫函數。  
  LayoutKind.Explicit:對每個域按照FieldOffset屬性對類型成員排序  
  LayoutKind.Sequential:對出現在受管轄類型定義地方的不受管轄內存中的類型成員進行排序。
  在上面的程序中,為了方便起見我們都用到了第三種方式所有的API函數以及相關的結構體聲明完畢后,我們就運用這些API來實現我們的程序功能――獲取系統的相關信息。
  界面可按如下方式布置,不過有興趣的讀者自然可以發揮自己的想象,將界面布局做得更好。
簡單的界面布置好后,我們添加一個按鈕("獲取信息"按鈕)的消息處理函數如下:
private void GetInfo_Click(object sender, System.EventArgs e)
{
//調用GetWindowsDirectory和GetSystemDirectory函數分別取得Windows路徑和系統路徑
const int nChars = 128;
StringBuilder Buff = new StringBuilder(nChars);
GetWindowsDirectory(Buff,nChars);
WindowsDirectory.Text = "Windows路徑:"+Buff.ToString();
GetSystemDirectory(Buff,nChars);
SystemDirectory.Text = "系統路徑:"+Buff.ToString();
//調用GetSystemInfo函數獲取CPU的相關信息
CPU_INFO CpuInfo;
CpuInfo = new CPU_INFO();
GetSystemInfo(ref CpuInfo);
NumberOfProcessors.Text = "本計算機中有"+CpuInfo.dwNumberOfProcessors.ToString()+"個CPU";
ProcessorType.Text = "CPU的類型為"+CpuInfo.dwProcessorType.ToString();
ProcessorLevel.Text = "CPU等級為"+CpuInfo.dwProcessorLevel.ToString();
OemId.Text = "CPU的OEM ID為"+CpuInfo.dwOemId.ToString();
PageSize.Text = "CPU中的頁面大小為"+CpuInfo.dwPageSize.ToString();
//調用GlobalMemoryStatus函數獲取內存的相關信息
MEMORY_INFO MemInfo;
MemInfo = new MEMORY_INFO();
GlobalMemoryStatus(ref MemInfo);
MemoryLoad.Text = MemInfo.dwMemoryLoad.ToString()+"%的內存正在使用";
TotalPhys.Text = "物理內存共有"+MemInfo.dwTotalPhys.ToString()+"字節";
AvailPhys.Text = "可使用的物理內存有"+MemInfo.dwAvailPhys.ToString()+"字節";
TotalPageFile.Text = "交換文件總大小為"+MemInfo.dwTotalPageFile.ToString()+"字節";
AvailPageFile.Text = "尚可交換文件大小為"+MemInfo.dwAvailPageFile.ToString()+"字節";
TotalVirtual.Text = "總虛擬內存有"+MemInfo.dwTotalVirtual.ToString()+"字節";
AvailVirtual.Text = "未用虛擬內存有"+MemInfo.dwAvailVirtual.ToString()+"字節";
//調用GetSystemTime函數獲取系統時間信息
SYSTEMTIME_INFO StInfo;
StInfo = new SYSTEMTIME_INFO();
GetSystemTime(ref StInfo);
Date.Text = StInfo.wYear.ToString()+"年"+StInfo.wMonth.ToString()+"月"+StInfo.wDay.ToString()+"日";
Time.Text = (StInfo.wHour+8).ToString()+"點"+StInfo.wMinute.ToString()+"分"+StInfo.wSecond.ToString()+"秒";
}  

posted on 2007-09-19 10:56 獨孤九劍 閱讀(328) 評論(0)  編輯 收藏 引用 所屬分類: Learn articles
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            免费在线一区二区| 国产精品女同互慰在线看| 欧美护士18xxxxhd| 久久久久九九视频| 亚洲一区二区精品在线| 一区二区av在线| 亚洲精选中文字幕| 亚洲每日在线| 中国女人久久久| 午夜在线电影亚洲一区| 亚洲欧美99| 久久久久免费视频| 欧美v日韩v国产v| 国产精品一区三区| 欧美日韩成人一区二区| 麻豆精品视频| 欧美激情中文字幕一区二区| 欧美精品九九99久久| 国产精品久久久久久久久久久久久久| 国产精品婷婷| 在线观看成人一级片| 99精品欧美一区二区三区综合在线| 夜夜嗨av一区二区三区免费区| 先锋影音国产精品| 欧美电影在线观看完整版| 亚洲午夜高清视频| 免费成人黄色片| 国产精品入口福利| 亚洲欧洲精品一区二区三区波多野1战4| 99精品热视频| 久久一区免费| 国产精品99久久久久久白浆小说| 久久精品免费播放| 欧美视频手机在线| 亚洲区一区二| 久久视频免费观看| 亚洲美女电影在线| 久久久久高清| 国产精品xxxav免费视频| 在线观看成人一级片| 欧美一区二区在线免费播放| 亚洲免费观看视频| 久久在线91| 国内自拍一区| 香蕉av777xxx色综合一区| 亚洲高清在线观看一区| 99亚洲伊人久久精品影院红桃| 久久国产精品一区二区三区四区| 欧美日韩免费精品| 亚洲电影在线| 午夜精品久久久久影视| 欧美激情精品久久久久久大尺度 | 久久欧美中文字幕| 一区二区三区偷拍| 免费av成人在线| 亚洲欧美日韩另类精品一区二区三区 | 国产精品ⅴa在线观看h| 妖精成人www高清在线观看| 欧美福利专区| 久久久久久电影| 激情六月婷婷久久| 久久久久久尹人网香蕉| 欧美在线视频播放| 黄页网站一区| 免费亚洲电影在线| 久久全国免费视频| 国产一区二区三区久久久久久久久| 午夜精品电影| 一区二区三区www| 欧美日韩福利视频| 亚洲一区二区久久| 在线一区亚洲| 国产精品实拍| 午夜精品福利在线| 亚洲欧美视频| 悠悠资源网久久精品| 亚洲欧美日韩在线不卡| 亚洲夜间福利| 尤物精品国产第一福利三区| 欧美99在线视频观看| 男人插女人欧美| 亚洲欧美激情在线视频| 亚洲欧美日韩一区在线| 亚洲高清视频在线| 亚洲精品久久久久中文字幕欢迎你| 欧美欧美全黄| 香蕉国产精品偷在线观看不卡| 性欧美长视频| 日韩一级免费观看| 午夜国产精品影院在线观看| 狠狠久久婷婷| 亚洲精品欧美| 国产精品一二一区| 欧美国产亚洲视频| 国产精品国产三级国产aⅴ无密码| 久久蜜臀精品av| 欧美激情视频给我| 亚洲欧美另类国产| 久久久人人人| 亚洲在线视频免费观看| 亚洲一区二区三区四区五区黄| 黄色小说综合网站| 国内精品视频666| 久久久97精品| 欧美人在线视频| 久久精品一区二区三区四区 | 国产日韩三区| 亚洲精品久久久久久久久久久| 国产午夜精品美女毛片视频| 欧美国产日韩在线| 国产在线观看精品一区二区三区| 亚洲人成77777在线观看网| 国产婷婷成人久久av免费高清| 日韩午夜精品视频| 最新国产成人av网站网址麻豆| 亚洲欧美国产视频| 亚洲午夜久久久久久久久电影网| 久久久久一区二区三区四区| 亚洲欧美日韩在线综合| 欧美高清成人| 欧美大片一区二区| 国内一区二区三区| 亚洲免费视频在线观看| 亚洲深夜福利| 欧美日韩免费一区二区三区| 亚洲国产另类久久久精品极度| 精品成人乱色一区二区| 亚洲精品欧美专区| 麻豆精品视频在线观看| 国产精品欧美风情| 日韩写真在线| 99热这里只有精品8| 久久免费一区| 另类酷文…触手系列精品集v1小说| 欧美午夜一区二区三区免费大片 | 午夜亚洲激情| 欧美日韩成人在线播放| 亚洲精品久久久久久久久久久久 | 欧美乱人伦中文字幕在线| 久久手机精品视频| 黄色日韩网站| 久久免费视频在线| 欧美成人免费观看| 日韩视频亚洲视频| 亚洲精品1区2区| 快播亚洲色图| 欧美国产一区在线| 亚洲第一精品夜夜躁人人爽| 久久久久国产精品人| 免费成人av| 亚洲福利在线视频| 久久一综合视频| 欧美激情一区二区三区高清视频 | 欧美日韩一区二区欧美激情 | 久久gogo国模裸体人体| 久久免费少妇高潮久久精品99| 国产精品女主播一区二区三区| 亚洲午夜激情网站| 久久成人免费网| 在线观看欧美日韩| 欧美激情a∨在线视频播放| 99热在这里有精品免费| 亚洲欧美综合另类中字| 国产网站欧美日韩免费精品在线观看| 久久精品日韩欧美| 欧美激情一区| 亚洲午夜久久久久久久久电影院| 国产欧美一区二区三区久久| 欧美一区二区三区四区在线观看| 美乳少妇欧美精品| 亚洲一级在线观看| 国产一区二区三区丝袜| 久久综合99re88久久爱| 中文精品视频一区二区在线观看| 久久久久久一区二区| 亚洲欧洲视频| 国产欧美一区二区三区视频| 亚洲嫩草精品久久| 久久夜色精品国产欧美乱极品| 亚洲人在线视频| 国产毛片一区| 欧美日本在线观看| 欧美一区二区三区精品| 欧美激情亚洲| 欧美一区二区三区视频在线观看| 亚洲国产一成人久久精品| 欧美日韩伊人| 久久久综合网| 亚洲国产三级在线| 国产精品久久久久999| 亚洲一区二区三区高清| 免费在线欧美视频| 亚洲资源av| 亚洲人成网站在线观看播放| 国产欧美综合一区二区三区| 欧美日韩少妇| 欧美大片免费观看在线观看网站推荐 | 亚洲另类在线一区| 一二三区精品福利视频| 亚洲美女精品成人在线视频|