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

posts - 16,  comments - 81,  trackbacks - 0

用Visual C++操作INI文件

在我們寫(xiě)的程序當(dāng)中,總有一些配置信息需要保存下來(lái),以便完成程序的功能,最簡(jiǎn)單的辦法就是將這些信息寫(xiě)入INI文件中,程序初始化時(shí)再讀入.具體應(yīng)用如下:

一.將信息寫(xiě)入.INI文件中.

1.所用的WINAPI函數(shù)原型為:

BOOL WritePrivateProfileString(
LPCTSTR lpAppName,
LPCTSTR lpKeyName,
LPCTSTR lpString,
LPCTSTR lpFileName
);

其中各參數(shù)的意義:

 LPCTSTR lpAppName 是INI文件中的一個(gè)字段名.

  LPCTSTR lpKeyName 是lpAppName下的一個(gè)鍵名,通俗講就是變量名.

 LPCTSTR lpString 是鍵值,也就是變量的值,不過(guò)必須為L(zhǎng)PCTSTR型或CString型的.

 LPCTSTR lpFileName 是完整的INI文件名.

2.具體使用方法:設(shè)現(xiàn)有一名學(xué)生,需把他的姓名和年齡寫(xiě)入 c:\stud\student.ini 文件中.

CString strName,strTemp;
int nAge;
strName="張三";
nAge=12;
::WritePrivateProfileString("StudentInfo","Name",strName,"c:\\stud\\student.ini");

此時(shí)c:\stud\student.ini文件中的內(nèi)容如下:

[StudentInfo]
Name=張三

3.要將學(xué)生的年齡保存下來(lái),只需將整型的值變?yōu)樽址图纯?

strTemp.Format("%d",nAge);
::WritePrivateProfileString("StudentInfo","Age",strTemp,"c:\\stud\\student.ini");

二.將信息從INI文件中讀入程序中的變量.

1.所用的WINAPI函數(shù)原型為:

DWORD GetPrivateProfileString(
LPCTSTR lpAppName, 
LPCTSTR lpKeyName, 
LPCTSTR lpDefault, 
LPTSTR lpReturnedString, 
DWORD nSize, 
LPCTSTR lpFileName 
);

其中各參數(shù)的意義:

前二個(gè)參數(shù)與 WritePrivateProfileString中的意義一樣.

  lpDefault : 如果INI文件中沒(méi)有前兩個(gè)參數(shù)指定的字段名或鍵名,則將此值賦給變量.

 lpReturnedString : 接收INI文件中的值的CString對(duì)象,即目的緩存器.

 nSize : 目的緩存器的大小.

 lpFileName : 是完整的INI文件名.

2.具體使用方法:現(xiàn)要將上一步中寫(xiě)入的學(xué)生的信息讀入程序中.

CString strStudName;
int nStudAge; 
GetPrivateProfileString("StudentInfo","Name","默認(rèn)姓名",strStudName.GetBuffer(MAX_PATH),MAX_PATH,"c:\\stud\\student.ini");

 執(zhí)行后 strStudName 的值為:"張三",若前兩個(gè)參數(shù)有誤,其值為:"默認(rèn)姓名".

3.讀入整型值要用另一個(gè)WINAPI函數(shù):

UINT GetPrivateProfileInt(
LPCTSTR lpAppName, 
LPCTSTR lpKeyName, 
INT nDefault, 
LPCTSTR lpFileName 
);

這里的參數(shù)意義與上相同.使用方法如下:

nStudAge=GetPrivateProfileInt("StudentInfo","Age",10,"c:\\stud\\student.ini");

三.循環(huán)寫(xiě)入多個(gè)值,設(shè)現(xiàn)有一程序,要將最近使用的幾個(gè)文件名保存下來(lái),具體程序如下:

1.寫(xiě)入:

CString strTemp,strTempA;
int i;
int nCount=6;
file://共有6個(gè)文件名需要保存
for(i=0;i<nCount;i++) 
{
  strTemp.Format("%d",i);
  strTempA=文件名;
  //文件名可以從數(shù)組,列表框等處取得.
  ::WritePrivateProfileString("UseFileName","FileName"+strTemp,strTempA,"c:\\usefile\\usefile.ini");
}
strTemp.Format("%d",nCount);
::WritePrivateProfileString("FileCount","Count",strTemp,"c:\\usefile\\usefile.ini");
//將文件總數(shù)寫(xiě)入,以便讀出.

2.讀出:

nCount=::GetPrivateProfileInt("FileCount","Count",0,"c:\\usefile\\usefile.ini");
for(i=0;i<nCount;i++)
{
  strTemp.Format("%d",i);
  strTemp="FileName"+strTemp;
  ::GetPrivateProfileString("CurrentIni",strTemp,"default.fil", strTempA.GetBuffer(MAX_PATH),MAX_PATH,"c:\\usefile\\usefile.ini");
  //使用strTempA中的內(nèi)容.
}

補(bǔ)充四點(diǎn):
 1.INI文件的路徑必須完整,文件名前面的各級(jí)目錄必須存在,否則寫(xiě)入不成功,該函數(shù)返回 FALSE 值.
 2.文件名的路徑中必須為 \\ ,因?yàn)樵赩C++中, \\ 才表示一個(gè) \ .
 3.也可將INI文件放在程序所在目錄,此時(shí) lpFileName 參數(shù)為: ".\\student.ini".

//----------------------------------------------------------------------------------
/*
類(lèi)名:CIni
版本:v2.0
加入高級(jí)操作的功能
v1.0
夢(mèng)小孩于2003年某日
一般操作完成

類(lèi)描述:
本類(lèi)可以于.ini文件進(jìn)行操作
*/

文件 1:
#pragma once
#include "afxTempl.h"

class CIni
{
private:
CString m_strFileName;
public:
CIni(CString strFileName):m_strFileName(strFileName)
{
}
public:
//一般性操作:
BOOL SetFileName(LPCTSTR lpFileName);  //設(shè)置文件名
CString GetFileName(void); //獲得文件名
BOOL SetValue(LPCTSTR lpSection, LPCTSTR lpKey, LPCTSTR lpValue,bool bCreate=true); //設(shè)置鍵值,bCreate是指段名及鍵名未存在時(shí),是否創(chuàng)建。
CString GetValue(LPCTSTR lpSection, LPCTSTR lpKey); //得到鍵值.
BOOL DelSection(LPCTSTR strSection);  //刪除段名
BOOL DelKey(LPCTSTR lpSection, LPCTSTR lpKey);  //刪除鍵名

public:
//高級(jí)操作:
int GetSections(CStringArray& arrSection);  //枚舉出全部的段名
int GetKeyValues(CStringArray& arrKey,CStringArray& arrValue,LPCTSTR lpSection);  //枚舉出一段內(nèi)的全部鍵名及值

BOOL DelAllSections();

};

文件 2:

#include "StdAfx.h"
#include "ini.h"

#define MAX_ALLSECTIONS 2048  //全部的段名
#define MAX_SECTION 260  //一個(gè)段名長(zhǎng)度
#define MAX_ALLKEYS 6000  //全部的鍵名
#define MAX_KEY 260  //一個(gè)鍵名長(zhǎng)度

BOOL CIni::SetFileName(LPCTSTR lpFileName)
{
  CFile file;
  CFileStatus status;
  if(!file.GetStatus(lpFileName,status))
    return TRUE;
  m_strFileName=lpFileName;
    return FALSE;
}

CString CIni::GetFileName(void)
{
  return m_strFileName;
}

BOOL CIni::SetValue(LPCTSTR lpSection, LPCTSTR lpKey, LPCTSTR lpValue,bool bCreate)
{
TCHAR lpTemp[MAX_PATH] ={0};

//以下if語(yǔ)句表示如果設(shè)置bCreate為false時(shí),當(dāng)沒(méi)有這個(gè)鍵名時(shí)則返回TRUE(表示出錯(cuò))
//!*&*none-value*&!* 這是個(gè)垃圾字符沒(méi)有特別意義,這樣亂寫(xiě)是防止湊巧相同。
if (!bCreate)
{
  GetPrivateProfileString(lpSection,lpKey,"!*&*none-value*&!*",lpTemp,MAX_PATH,m_strFileName);
  if(strcmp(lpTemp,"!*&*none-value*&!*")==0)
  return TRUE;
}

if(WritePrivateProfileString(lpSection,lpKey,lpValue,m_strFileName))
  return FALSE;
else
  return GetLastError();
}

CString CIni::GetValue(LPCTSTR lpSection, LPCTSTR lpKey)
{
  DWORD dValue;
  TCHAR lpValue[MAX_PATH] ={0};

  dValue=GetPrivateProfileString(lpSection,lpKey,"",lpValue,MAX_PATH,m_strFileName);
  return lpValue;
}

BOOL CIni::DelSection(LPCTSTR lpSection)
{
  if(WritePrivateProfileString(lpSection,NULL,NULL,m_strFileName))
    return FALSE;
  else
    return GetLastError();
}

BOOL CIni::DelKey(LPCTSTR lpSection, LPCTSTR lpKey)
{
if(WritePrivateProfileString(lpSection,lpKey,NULL,m_strFileName))
  return FALSE;
else
  return GetLastError();
}

int CIni::GetSections(CStringArray& arrSection)
{
/*
本函數(shù)基礎(chǔ):
GetPrivateProfileSectionNames - 從 ini 文件中獲得 Section 的名稱(chēng)
如果 ini 中有兩個(gè) Section: [sec1] 和 [sec2],則返回的是 'sec1',0,'sec2',0,0 ,當(dāng)你不知道  
ini 中有哪些 section 的時(shí)候可以用這個(gè) api 來(lái)獲取名稱(chēng) 
*/
int i;  
int iPos=0;  
int iMaxCount;
TCHAR chSectionNames[MAX_ALLSECTIONS]={0}; //總的提出來(lái)的字符串
TCHAR chSection[MAX_SECTION]={0}; //存放一個(gè)段名。
GetPrivateProfileSectionNames(chSectionNames,MAX_ALLSECTIONS,m_strFileName);

//以下循環(huán),截?cái)嗟絻蓚€(gè)連續(xù)的0
for(i=0;i<MAX_ALLSECTIONS;i++)
{
  if (chSectionNames[i]==0)
  if (chSectionNames[i]==chSectionNames[i+1])
    break;
}

iMaxCount=i+1; //要多一個(gè)0號(hào)元素。即找出全部字符串的結(jié)束部分。
arrSection.RemoveAll();//清空原數(shù)組

for(i=0;i<iMaxCount;i++)
{
  chSection[iPos++]=chSectionNames[i];
  if(chSectionNames[i]==0)
  {  
  arrSection.Add(chSection);
  memset(chSection,0,MAX_SECTION);
  iPos=0;
  }
}

return (int)arrSection.GetSize();
}

int CIni::GetKeyValues(CStringArray& arrKey,CStringArray& arrValue, LPCTSTR lpSection)
{
/*
本函數(shù)基礎(chǔ):
GetPrivateProfileSection- 從 ini 文件中獲得一個(gè)Section的全部鍵名及值名
如果ini中有一個(gè)段,其下有 "段1=值1" "段2=值2",則返回的是 '段1=值1',0,'段2=值2',0,0 ,當(dāng)你不知道  
獲得一個(gè)段中的所有鍵及值可以用這個(gè)。 
*/
int i;  
int iPos=0;
CString strKeyValue;
int iMaxCount;
TCHAR chKeyNames[MAX_ALLKEYS]={0}; //總的提出來(lái)的字符串
TCHAR chKey[MAX_KEY]={0}; //提出來(lái)的一個(gè)鍵名

GetPrivateProfileSection(lpSection,chKeyNames,MAX_ALLKEYS,m_strFileName);

for(i=0;i<MAX_ALLKEYS;i++)
{
  if (chKeyNames[i]==0)
  if (chKeyNames[i]==chKeyNames[i+1])
    break;
}

iMaxCount=i+1; //要多一個(gè)0號(hào)元素。即找出全部字符串的結(jié)束部分。
arrKey.RemoveAll();//清空原數(shù)組
arrValue.RemoveAll();

for(i=0;i<iMaxCount;i++)
{
  chKey[iPos++]=chKeyNames[i];
  if(chKeyNames[i]==0)
  {
  strKeyValue=chKey;
  arrKey.Add(strKeyValue.Left(strKeyValue.Find("=")));
  arrValue.Add(strKeyValue.Mid(strKeyValue.Find("=")+1));
  memset(chKey,0,MAX_KEY);
  iPos=0;
  }

}

return (int)arrKey.GetSize();
}

BOOL CIni::DelAllSections()
{
int nSection;
CStringArray arrSection;
nSection=GetSections(arrSection);
for(int i=0;i<nSection;i++)
{
  if(DelSection(arrSection[i]))
  return GetLastError();
}
return FALSE;
}


使用方法:
CIni ini("c:\\a.ini");
int n;

/*獲得值
TRACE("%s",ini.GetValue("段1","鍵1"));
*/

/*添加值
ini.SetValue("自定義段","鍵1","值");
ini.SetValue("自定義段2","鍵1","值",false);
*/

/*枚舉全部段名
CStringArray arrSection;
n=ini.GetSections(arrSection);
for(int i=0;i<n;i++)
TRACE("%s\n",arrSection[i]);
*/

/*枚舉全部鍵名及值
CStringArray arrKey,arrValue;
n=ini.GetKeyValues(arrKey,arrValue,"段1");
for(int i=0;i<n;i++)
TRACE("鍵:%s\n值:%s\n",arrKey[i],arrValue[i]);
*/

/*刪除鍵值
ini.DelKey("段1","鍵1");
*/

/*刪除段
ini.DelSection("段1");
*/

/*刪除全部
ini.DelAllSections();
*/

操作配置文件ini
1.基礎(chǔ)知識(shí)
    INI文件(Initialization file ,又稱(chēng)為初始化文件)是用來(lái)保存應(yīng)用程序設(shè)置和選項(xiàng)的一種特殊的ASCII文件,以“.ini”作為文件擴(kuò)展名,也被稱(chēng)做配置文件或概要文件(Profile)。除了各個(gè)應(yīng)用程序可以擁有自己私有的初始化文件外,Windows系統(tǒng)還提供有一個(gè)系統(tǒng)的初始化文件Win.ini,并由此對(duì)當(dāng)前的Windows系統(tǒng)進(jìn)行配置,同時(shí)也可以在其內(nèi)記錄系統(tǒng)內(nèi)其他應(yīng)用程序在運(yùn)行時(shí)的選項(xiàng)。

  通常為應(yīng)用程序所私有的初始化文件比較小,這樣可以減少程序在初始化時(shí)所讀取的信息量,從而提高程序的啟動(dòng)速度。而系統(tǒng)初始化文件Win.ini由于除了記錄有關(guān)系統(tǒng)的大量信息外,還存儲(chǔ)著許多其他應(yīng)用軟件的初始化數(shù)據(jù),因此其通常比較龐大,訪(fǎng)問(wèn)的數(shù)據(jù)量要遠(yuǎn)比私有的配置文件大得多。如沒(méi)有必要,一般不建議對(duì)Win.ini文件進(jìn)行操作,但如果待存取的信息涉及到Windows系統(tǒng)環(huán)境或是其他應(yīng)用程序時(shí), 就必須對(duì)Win.ini進(jìn)行讀寫(xiě)訪(fǎng)問(wèn),并在訪(fǎng)問(wèn)的同時(shí)發(fā)送WM_WININICHANGE消息給所有的頂層窗口,通知其他進(jìn)程系統(tǒng)初始化文件已被更改。

  配置文件里的信息之所以能為系統(tǒng)和眾多不同類(lèi)型的應(yīng)用程序讀取并識(shí)別,是由于其內(nèi)部對(duì)數(shù)據(jù)的存取采用了預(yù)先約定的“項(xiàng)-值對(duì)(Entry-value pairs)”存儲(chǔ)結(jié)構(gòu), 并對(duì)待存取的數(shù)據(jù)分門(mén)別類(lèi)地進(jìn)行存儲(chǔ)。下面是系統(tǒng)目錄下Win.ini文件的部分內(nèi)容:

[windows] 
load= 
run= 
NullPort=None 
[Desktop] 
WallpaperStyle=2 
Pattern=(無(wú)) 

   在此,配置文件將信息分為若干“節(jié)”,節(jié)標(biāo)題放在方括號(hào)中,如“[Desktop]”就是Desktop節(jié),在每一個(gè)節(jié)中包含了一些與之相關(guān)的“項(xiàng)”,并通過(guò)等號(hào)對(duì)其進(jìn)行賦值。一般形式如下:

[SECTION] 
ENTRY=VALUE 

  在初始化文件中,VALUE值只能有兩種數(shù)據(jù)類(lèi)型:數(shù)值和字符串。Windows分別為這兩種數(shù)據(jù)類(lèi)型提供了兩套API函數(shù)對(duì)初始化文件進(jìn)行數(shù)據(jù)讀取,在寫(xiě)入初始化文件時(shí)則只支持對(duì)字符串的寫(xiě)入,數(shù)值等類(lèi)型必須先進(jìn)行數(shù)據(jù)類(lèi)型的轉(zhuǎn)換,然后才能寫(xiě)入到初始化文件。私有初始化文件的訪(fǎng)問(wèn)  對(duì)私有初始化文件的數(shù)據(jù)存取是由GetPrivateProfileInt()、GetPrivateProfileString()和WritePrivateProfileString()等三個(gè)API函數(shù)來(lái)完成的。其函數(shù)說(shuō)明如下:

UINT GetPrivateProfileInt(LPCTSTR lpAppName, // 節(jié)名地址
                          LPCTSTR lpKeyName, // 項(xiàng)名地址
                          INT nDefault,      // 在項(xiàng)名沒(méi)有找到時(shí)返回的缺省值
                          LPCTSTR lpFileName // 初始化文件名地址
);

DWORD GetPrivateProfileString(LPCTSTR lpAppName, // 節(jié)名地址
                              LPCTSTR lpKeyName, // 項(xiàng)名地址
                              LPCTSTR lpDefault, // 缺省字符串
                              LPTSTR lpReturnedString, // 存放字符串的緩沖區(qū)地址
                              DWORD nSize, // 緩沖區(qū)大小
                              LPCTSTR lpFileName // 初始化文件名地址
);

BOOL WritePrivateProfileString(LPCTSTR lpAppName, // 節(jié)名地址
                               LPCTSTR lpKeyName, // 項(xiàng)名地址
                               LPCTSTR lpString,  // 要寫(xiě)入的字符串地址
                               LPCTSTR lpFileName // 初始化文件名地址
);

    其中,GetPrivateProfileInt()返回的是初始化文件lpFileName中l(wèi)pAppName節(jié)內(nèi)lpKeyName項(xiàng)的整數(shù)值,如果沒(méi)有找到該項(xiàng)則返回缺省值nDefault。如果此項(xiàng)目存在,但值不為整數(shù),則返回0。如果某項(xiàng)目的值中含有非數(shù)字字符則只返回第一個(gè)非數(shù)字前的字符,例如對(duì)于“Value = 21century”則只返回?cái)?shù)值21。初始化文件名lpFileName可以是全路徑也可以只是文件名,如果不指定具體路徑,Windows系統(tǒng)將在系統(tǒng)目錄對(duì)文件進(jìn)行尋找。GetPrivateProfileString()和WritePrivateProfileString()的用法基本與之類(lèi)似,只是處理對(duì)象的數(shù)據(jù)類(lèi)型不同。

2 知識(shí)應(yīng)用
  私有初始化文件主要用來(lái)保存同應(yīng)用程序當(dāng)前狀態(tài)相關(guān)的一些信息,當(dāng)程序退出后,這些信息由于已寫(xiě)入到初始化文件而得以保留,當(dāng)程序再次運(yùn)行時(shí),可以通過(guò)對(duì)此初始化文件各項(xiàng)數(shù)據(jù)的讀取而得知此應(yīng)用程序在上次運(yùn)行期間的相關(guān)信息。下面這段代碼即通過(guò)對(duì)私有初始化文件的訪(fǎng)問(wèn)而對(duì)程序的運(yùn)行次數(shù)和上一次的運(yùn)行日期進(jìn)行記錄:

CString sPath,sMsg,sTime,sDate;
char buffer[255];

// 獲取當(dāng)前應(yīng)用程序全路徑
GetModuleFileName(NULL, buffer, MAX_PATH);
sPath = CString(buffer);
sPath = sPath.Left(sPath.ReverseFind('\\'));

// 得到初始化文件的全路徑
sPath += "\\Sample04.ini";

// 得到程序累計(jì)運(yùn)行次數(shù)
UINT Time = GetPrivateProfileInt("PROGRAM", "RUNTIME", 0, sPath);

// 得到上次運(yùn)行日期
GetPrivateProfileString("DATE", "LAST", "2002-11-1", buffer, 1000, sPath);

// 顯示從初始化文件獲取到的文件信息
sMsg.Format("本軟件共運(yùn)行過(guò)%d次,上次運(yùn)行日期為%s", Time, CString(buffer));
AfxMessageBox(sMsg);

// 累加運(yùn)行次數(shù),并保存到初始化文件
Time++;
sTime.Format("%d", Time);
WritePrivateProfileString("PROGRAM", "RUNTIME", sTime, sPath);

// 獲取當(dāng)前日期,并保存到初始化文件
CTime tm = CTime::GetCurrentTime();
sDate.Format("%d-%d-%d", tm.GetYear(), tm.GetMonth(), tm.GetDay());
WritePrivateProfileString("DATE", "LAST", sDate, sPath);

在程序執(zhí)行后,初始化文件Sample04.ini的內(nèi)容為:
[DATE]
LAST =2002-11-12
[PROGRAM]
RUNTIME =1

   系統(tǒng)目錄下的Win.ini是一種特殊的初始化文件,主要為系統(tǒng)提供初始化服務(wù),在系統(tǒng)啟動(dòng)時(shí)將被系統(tǒng)所訪(fǎng)問(wèn),并根據(jù)其所保存的參數(shù)值對(duì)系統(tǒng)進(jìn)行配置。Windows專(zhuān)門(mén)提供了三個(gè)API函數(shù)GetProfileInt()、GetProfileString()和WriteProfileString()對(duì)Win.ini進(jìn)行讀寫(xiě)訪(fǎng)問(wèn),其函數(shù)用法同訪(fǎng)問(wèn)私有初始化文件的那幾個(gè)函數(shù)非常類(lèi)似,只是不必再去指定初始化文件名。下面是這三個(gè)函數(shù)的原型聲明:

UINT GetProfileInt(LPCTSTR lpAppName, // 節(jié)名地址
                   LPCTSTR lpKeyName, // 項(xiàng)名地址
                   INT nDefault // 在項(xiàng)名沒(méi)有找到時(shí)返回的缺省值
);

DWORD GetProfileString(LPCTSTR lpAppName, // 節(jié)名地址
                       LPCTSTR lpKeyName, // 項(xiàng)名地址
                       LPCTSTR lpDefault, // 缺省字符串地址
                       LPTSTR lpReturnedString, // 存放字符串的緩存的地址
                       DWORD nSize // 緩存的大小
);

BOOL WriteProfileString(LPCTSTR lpAppName, // 節(jié)名地址
                        LPCTSTR lpKeyName, // 項(xiàng)名地址
                        LPCTSTR lpString   // 要寫(xiě)入字符串的地址
);

 

  只要對(duì)前面對(duì)私有初始化文件進(jìn)行訪(fǎng)問(wèn)的代碼稍加改動(dòng)即可將程序的配置信息添加到Win.ini中,改動(dòng)后的代碼如下:

CString sPath,sMsg,sTime,sDate;

// 得到程序累計(jì)運(yùn)行次數(shù)
UINT Time = GetProfileInt("PROGRAM", "RUNTIME", 0);

// 得到上次運(yùn)行日期
GetProfileString("DATE", "LAST", "2002-11-1", buffer, 1000);

// 顯示從初始化文件獲取到的文件信息
sMsg.Format("本軟件共運(yùn)行過(guò)%d次,上次運(yùn)行日期為%s", Time, CString(buffer));
AfxMessageBox(sMsg);

// 累加運(yùn)行次數(shù),并保存到初始化文件
Time++;
sTime.Format("%d", Time);
WriteProfileString("PROGRAM", "RUNTIME", sTime);

// 獲取當(dāng)前日期,并保存到初始化文件
CTime tm = CTime::GetCurrentTime();
sDate.Format("%d-%d-%d", tm.GetYear(), tm.GetMonth(), tm.GetDay());
WriteProfileString("DATE", "LAST", sDate);

   由于Win.ini文件是系統(tǒng)初始化文件,在程序沒(méi)有運(yùn)行前文件內(nèi)不含“DATE”和“PROGRAM”等自定義的節(jié)以及其下各項(xiàng),因此在程序第一次執(zhí)行后,將由WriteProfileString()函數(shù)向Win.ini文件末尾創(chuàng)建相關(guān)節(jié)、項(xiàng),并完成數(shù)據(jù)的寫(xiě)入。

posted on 2010-09-27 18:14 叫我老王吧 閱讀(5140) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 轉(zhuǎn)貼

只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用鏈接

留言簿(4)

隨筆分類(lèi)

隨筆檔案

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美日韩一区综合| 鲁大师影院一区二区三区| 亚洲男人的天堂在线aⅴ视频| 最新国产乱人伦偷精品免费网站| 又紧又大又爽精品一区二区| 加勒比av一区二区| 亚洲国产成人av| 一本色道久久综合一区| 亚洲欧美日韩精品| 久久这里有精品视频| 欧美成人性生活| 99亚洲一区二区| 久久精品国产69国产精品亚洲| 开元免费观看欧美电视剧网站| 久久蜜桃资源一区二区老牛| 久久久午夜视频| 久久综合影视| 欧美大香线蕉线伊人久久国产精品| 欧美99久久| 国产精品99久久久久久www| 午夜精品久久久久久久99樱桃| 久久久免费av| 国产精品卡一卡二| 亚洲欧洲一区二区三区在线观看| 亚洲综合成人在线| 亚洲电影在线免费观看| 亚洲每日在线| 久久精品视频在线| 欧美视频中文字幕在线| 尹人成人综合网| 亚洲欧美在线网| 亚洲精品久久久久| 久久久精品日韩欧美| 国产精品国产精品| 亚洲美女在线国产| 久久一区视频| 性欧美超级视频| 国产精品每日更新在线播放网址| 亚洲国产片色| 嫩草成人www欧美| 久久精品成人欧美大片古装| 欧美性感一类影片在线播放| 亚洲欧洲另类国产综合| 免费在线看一区| 久久久一区二区| 黄色日韩网站| 久久免费视频观看| 午夜精品理论片| 国产乱理伦片在线观看夜一区 | 日韩亚洲欧美在线观看| 久久精品视频亚洲| 韩国女主播一区| 久久国产精品免费一区| 亚洲特级片在线| 国产精品久久久久久超碰| 99riav久久精品riav| 欧美韩国日本综合| 久久综合狠狠| 激情一区二区| 蜜桃av久久久亚洲精品| 久久精品夜夜夜夜久久| 国模叶桐国产精品一区| 久久久亚洲精品一区二区三区| 亚洲专区在线视频| 国产在线精品一区二区夜色| 久久国产一区二区| 久久精品72免费观看| 伊人狠狠色丁香综合尤物| 麻豆精品传媒视频| 欧美夫妇交换俱乐部在线观看| 亚洲精品视频免费在线观看| 亚洲高清不卡在线观看| 亚洲清纯自拍| 欧美日韩在线三区| 欧美一区二区三区四区在线观看地址 | 亚洲国产裸拍裸体视频在线观看乱了中文| 久久亚洲免费| 米奇777超碰欧美日韩亚洲| 亚洲日本va午夜在线电影| 亚洲区一区二| 国产精品久久久999| 久久精品一区蜜桃臀影院 | 免费观看欧美在线视频的网站| 亚洲国产一区二区a毛片| 亚洲国产婷婷综合在线精品| 欧美日韩中文字幕| 久久久久高清| 欧美成年人在线观看| 亚洲性线免费观看视频成熟| 性色av一区二区三区红粉影视| 亚洲电影免费观看高清| 99在线精品免费视频九九视| 国产亚洲精品久| 欧美电影免费观看大全| 欧美日本视频在线| 欧美综合第一页| 欧美电影免费| 午夜一区在线| 欧美高清成人| 久久久久久久999| 欧美日韩免费在线| 免费在线看成人av| 国产精品视频福利| 最新中文字幕一区二区三区| 国产日韩欧美高清免费| 亚洲精品乱码久久久久| 国模叶桐国产精品一区| 一区二区激情| 亚洲精品一线二线三线无人区| 亚洲欧美日韩电影| 艳妇臀荡乳欲伦亚洲一区| 久久国产精品电影| 亚洲欧美三级在线| 欧美日韩hd| 亚洲大胆人体视频| 国内综合精品午夜久久资源| 一区二区三区**美女毛片| 亚洲人永久免费| 久久九九久久九九| 欧美在线影院| 国产精品视频九色porn| 一本久久青青| 亚洲三级性片| 蜜桃伊人久久| 欧美成人精精品一区二区频| 国产亚洲一本大道中文在线| 在线一区二区三区做爰视频网站| 亚洲精品综合| 亚洲国产第一页| 亚洲国产欧美一区| 嫩草伊人久久精品少妇av杨幂| 老司机午夜精品| 国产亚洲精品福利| 久久成年人视频| 久久综合狠狠| 狠狠狠色丁香婷婷综合激情| 亚洲欧美国产视频| 欧美一区免费| 国产亚洲一级高清| 久久久噜噜噜久久久| 欧美1级日本1级| 亚洲精品国产拍免费91在线| 欧美高清你懂得| 日韩亚洲精品在线| 亚洲欧美日韩在线观看a三区 | 一卡二卡3卡四卡高清精品视频| 一区二区日本视频| 欧美性猛交视频| 亚洲欧美日韩一区二区| 久久国产精品久久国产精品| 国产欧美亚洲一区| 久久大综合网| 欧美高清视频www夜色资源网| 在线观看日韩www视频免费| 美女网站在线免费欧美精品| 亚洲黄色成人久久久| 亚洲视频二区| 国产亚洲精品aa| 欧美成人免费一级人片100| 日韩手机在线导航| 久久精品国产精品亚洲精品| 在线欧美小视频| 欧美日韩中文另类| 久久国产精品一区二区三区| 亚洲第一精品电影| 亚洲欧美日本日韩| 在线国产精品一区| 欧美性色综合| 久久久噜噜噜久久人人看| 亚洲欧洲综合另类| 久久国产夜色精品鲁鲁99| 亚洲欧洲一区二区三区在线观看| 国产精品国产馆在线真实露脸| 久久大逼视频| 中文日韩欧美| 欧美成人黄色小视频| 午夜亚洲伦理| 日韩亚洲欧美在线观看| 国产美女高潮久久白浆| 蜜桃精品久久久久久久免费影院| 国产精品99久久久久久久久| 老司机凹凸av亚洲导航| 一区二区三区产品免费精品久久75| 国产欧美日韩91| 欧美日韩午夜视频在线观看| 久久精品一级爱片| 亚洲一区二区三区777| 亚洲国产婷婷| 欧美成人亚洲| 久久这里只有精品视频首页| 在线视频亚洲一区| 亚洲国产日韩欧美综合久久| 国产区精品在线观看| 欧美日韩一区二区三区在线看| 久久欧美肥婆一二区| 欧美一区二区日韩| 亚洲曰本av电影| 亚洲午夜av| 亚洲毛片av| 亚洲资源在线观看|