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

一、CStatic從文件夾加載位圖

HBITMAP hbitmap;
//獲得指向靜態(tài)控件的指針
CStatic *pStatic=(CStatic *)GetDlgItem(IDC_SHOWBMP);
//獲得位圖句柄
HBITMAP Bitmap;
//設(shè)置靜態(tài)控件的樣式,使其可以使用位圖,并試位標(biāo)顯示使居中
pStatic->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE);
//設(shè)置靜態(tài)控件顯示位圖
pStatic->SetBitmap(hBitmap);

二、設(shè)置對(duì)話框背景(小圖可以漫延填充)

1、把你的圖包含到程序的“Bitmap資源里,提示說(shuō)該資源使用了大于256色的調(diào)色板,在VC里無(wú)法編輯等等,點(diǎn)確定就可以

2定位到 void CXXXDlg::OnPaint(),在if()...else()中的else()下添加如下代碼
else
{
//CDialog::OnPaint();//
要禁止這個(gè)調(diào)用
CPaintDC dc(this);
CRect rect;
GetClientRect(&rect);
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
CBitmap bmpBackground;
bmpBackground.LoadBitmap(IDB_BITMAP);
//IDB_BITMAP
是你自己的圖對(duì)應(yīng)的ID
BITMAP bitmap;
bmpBackground.GetBitmap(&bitmap);
CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,
        bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
}

三、CStatic控件透明

可以這樣作的:
HBRUSH CShutDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

//讓所有的靜態(tài)文本都透明好顯示背景色
if(nCtlColor   ==   CTLCOLOR_DLG)  
{  
        //返回對(duì)話框的顏色  
   hbr=(HBRUSH)::CreateSolidBrush(RGB(146,161,202));    
}  
if(nCtlColor==CTLCOLOR_STATIC)  
{  
   //讓靜態(tài)文本框透明  
   pDC->SetBkMode(TRANSPARENT);  
   //pDC->SetTextColor(RGB(255,255,255));   //設(shè)置字體顏色白色  
   hbr=(HBRUSH)::GetStockObject(NULL_BRUSH);  
}  
if (nCtlColor==CTLCOLOR_EDIT)//設(shè)置EDIT控件的顏色
{
   HBRUSH hbr1 = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
   hbr1=(HBRUSH)::CreateSolidBrush(RGB(0,0,0)); //背景黑色
   pDC->SetTextColor(RGB(255,255,255)); //文字白色
   pDC->SetBkMode(TRANSPARENT);  
   return hbr1;
}
return hbr;
}

四、CStatic背景透明后文本覆蓋的問(wèn)題

http://blog.vckbase.com/hatemath/archive/2005/08/04/10485.aspx


posted @ 2011-08-26 14:49 wrh 閱讀(2544) | 評(píng)論 (0)編輯 收藏

作用:
讀取DC的一些打印區(qū)域信息,主要是像素和英寸方面的數(shù)據(jù).

聲明:
GetDeviceCaps(int )

使用例子:
//所有像素?cái)?shù)
int pagecx=dc.GetDeviceCaps(HORZRES);
int pagecy=dc.GetDeviceCaps(VERTRES);

//即每英寸點(diǎn)數(shù)
short cxInch = dc.GetDeviceCaps(LOGPIXELSX);
short cyInch = dc.GetDeviceCaps(LOGPIXELSY);

// 計(jì)算一個(gè)設(shè)備單位等于多少0.1mm
double scaleX = 254.0 / (double)GetDeviceCaps(dc.m_hAttribDC,LOGPIXELSX);
double scaleY = 254.0 / (double)GetDeviceCaps(dc.m_hAttribDC, LOGPIXELSY);


說(shuō)明:
主要用到的參數(shù)見(jiàn)例子中的:HORZRES,VERTRES,LOGPIXELSX,LOGPIXELSY.總的來(lái)說(shuō)是為了方便控制打印或重畫(huà)時(shí)的控制,如為了定制打印時(shí),一般依據(jù)的是物理的長(zhǎng)度,而不是像素,而DC一般是用像素的映射模式,所以需要一下轉(zhuǎn)換,上面這個(gè)函數(shù)就為這種轉(zhuǎn)換設(shè)計(jì)的.

 

 

GDI中有一個(gè)函數(shù)是GetDeviceCaps(),可以獲取一些關(guān)于設(shè)備的一些屬性,如HORZSIZE/HORZRES/LOGPIXELSX等。
    以上三者的關(guān)系通常滿足:HORZSIZE = 25.4 * HORZRES/LOGPIXELSX
    HORZSIZE為屏幕水平尺寸(定為度量尺寸,以mm計(jì)),HORZRES為水平的像素總數(shù)(定為像素大小,平時(shí)所說(shuō)的屏幕分辨率,但在這不這么稱呼。這里,分辨率定為“每英寸的像素?cái)?shù)”),LOGPIXELSX為邏輯像素(假設(shè)的每英寸的像素?cái)?shù),并不是剛才所說(shuō)的實(shí)際的“分辨率”)。因此HORZSIZE也稱為邏輯寬度
    當(dāng)我們選擇“顯示”屬性里的大字體時(shí),LOGPIXELSX(通常分為96dpi與120dpi)變大了,這樣假設(shè)原來(lái)的字體為10磅,則原來(lái)的字體橫向所占像素(實(shí)際所占的像素?cái)?shù))為10*(1/72)*LOGPIXELSX,現(xiàn)在LOGPIXELSX變大了,則字體所占像素也大了,因此看起來(lái)字體大了。如果HORZRES不變的話,則HORZSIZE應(yīng)該變小。然后這是和Windows有關(guān)的,在16位OS中,HORZSIZE值是固定的。
    在XP系統(tǒng)上驗(yàn)證了一下,發(fā)現(xiàn)HORZSIZE值與LOGPIXELSX的值也是不變的,如果改變HORZRES的話,則HORZSIZE會(huì)發(fā)生相應(yīng)變化,但LOGPIXELSX不變,一直是96。
    驗(yàn)證數(shù)值是:當(dāng)HORZRES/VERTRES分別為800/600、1280/1024、1360/768時(shí),LOGPIXELSX/LOGPIXELSY一直為96,但HORZSIZE/VERTSIZE分別為320/240、375/300、400/320。于是個(gè)人斷定:LOGPIXELSX/LOGPIXELSY與所選的字體(如TrueType)有關(guān),windows默認(rèn)的字體LOGPIXELSX/LOGPIXELSY值是定的,選大字體或小字體取它們的值都是一樣的,而一些字體是不同的。而HORZSIZE/VERTSIZE與系統(tǒng)版本有關(guān),在有的系統(tǒng)中,這兩個(gè)值是適合此分辨率的標(biāo)準(zhǔn)顯示器的尺寸(定值,長(zhǎng)寬比與分辨率的比一樣),不是通過(guò)公式計(jì)算的,也不等于公式計(jì)算的值;而有的系統(tǒng)版本這兩個(gè)值為公式所得的值。
    下邊是petzold那本書(shū)上的兩句(沒(méi)摘英文的):“

然而,在Windows NT中,用老的方法定義HORZSIZE和VERTSIZE值。這種方法與Windows的16位版本一致。HORZRES和VERTRES值仍然表示水平和垂直圖素的數(shù)值,LOGPIXELSX和LOGPIXELSY仍然與在「控制臺(tái)」的「顯示器」程序中選擇的字體有關(guān)。在Windows 98中,LOGPIXELSX和LOGPIXELSY的典型值是96和120 dpi,這取決于您選擇的是小字體還是大字體。

在Windows NT中的區(qū)別是HORZSIZE和VERTSIZE值固定表示標(biāo)準(zhǔn)顯示器大小。對(duì)于普通的顯示卡,取得的HORZSIZE和VERTSIZE值分別是320和240毫米。這些值是相同的,與選擇的圖素大小無(wú)關(guān)。因此,這些值與用HORZRES、VERTRES、LOGPIXELSX和LOGPIXELSY索引從GetDeviceCaps中得到的值不同。然而,可以用前面的公式計(jì)算在Windows 98下的HORZSIZE和VERTSIZE值。

 

 

HFONT CreateFont(
                 int nHeight,           //字體的高度
                
int nWidth,            //字體的寬度
                 int nEscapement,       //字體顯示的角度
                 int nOrientation,      //字體的角度
                 int nWeight,           //字體的磅數(shù)
                 BYTE bItalic,          //斜體字體
                 BYTE bUnderline,       //帶下劃線的字體
                 BYTE cStrikeOut,       //帶刪除線的字體
                 BYTE nCharSet,         //所需的字符集
                 BYTE nOutPrecision,    //輸出的精度
                 BYTE nClipPrecision,   //裁減的精度
                 BYTE nQuality,         //邏輯字體與輸出設(shè)備的實(shí)際
                                        //字體之間的精度
                 BYTE nPitchAndFamily,  //字體間距和字體集
                 LPCTSTR lpszFacename   //字體名稱
               );
 
    示例:
 
/************************************************************************/
HFONT hFont;
HDC hDC;
hFont=CreateFont(10,10,0,0,FW_THIN,true,false,false,
CHINESEBIG5_CHARSET,OUT_CHARACTER_PRECIS,
CLIP_CHARACTER_PRECIS,DEFAULT_QUALITY,
FF_MODERN,"宋體");
SelectObject(hDC,hFont);
/************************************************************************/
posted @ 2011-08-26 14:46 wrh 閱讀(1620) | 評(píng)論 (0)編輯 收藏
     摘要: // Modifying DACL of an object. In ACL there are ACEs... // Here we are going to add deny standard right // access for Administrators group. This Win XP machine is // logged in by user named Mike s...  閱讀全文
posted @ 2011-08-23 13:41 wrh 閱讀(474) | 評(píng)論 (1)編輯 收藏

一般Windows下的系統(tǒng)文件(夾)只讓受限帳戶讀取而不讓寫(xiě)入和修改。如果要開(kāi)啟寫(xiě)操作權(quán)限就需要手動(dòng)修改文件(夾)的用戶帳戶安全權(quán)限(這操作當(dāng)然要在管理員帳戶下執(zhí)行).以下用程序封裝了一下該操作:

  先來(lái)個(gè)API版本:

  //

  // 啟用某個(gè)賬戶對(duì)某個(gè)文件(夾)的所有操作權(quán)限

  // pszPath: 文件(夾)路徑

  // pszAccount: 賬戶名稱

  //

  BOOL  EnableFileAccountPrivilege (PCTSTR pszPath, PCTSTR pszAccount)

  {

  BOOL bSuccess = TRUE;

  PACL pNewDacl = NULL, pOldDacl = NULL;

  EXPLICIT_ACCESS ea;

  do

  {

  // 獲取文件(夾)安全對(duì)象的DACL列表

  if (ERROR_SUCCESS != ::GetNamedSecurityInfo ((LPTSTR)pszPath, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, &pOldDacl, NULL, NULL))

  {

  bSuccess  =  FALSE;

  break;

  }

  // 此處不可直接用AddAccessAllowedAce函數(shù),因?yàn)橐延械腄ACL長(zhǎng)度是固定,必須重新創(chuàng)建一個(gè)DACL對(duì)象

  // 生成指定用戶帳戶的訪問(wèn)控制信息(這里指定賦予全部的訪問(wèn)權(quán)限)

  ::BuildExplicitAccessWithName (&ea, (LPTSTR)pszAccount, GENERIC_ALL, GRANT_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT);

  // 創(chuàng)建新的ACL對(duì)象(合并已有的ACL對(duì)象和剛生成的用戶帳戶訪問(wèn)控制信息)

  if (ERROR_SUCCESS != ::SetEntriesInAcl(1, &ea, pOldDacl, &pNewDacl))

  {

  bSuccess   =  FALSE;

  break;

  }[next]

  // 設(shè)置文件(夾)安全對(duì)象的DACL列表

  if (ERROR_SUCCESS != ::SetNamedSecurityInfo ((LPTSTR)pszPath, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, pNewDacl, NULL))

  {

  bSuccess   =  FALSE;

  }

  } while (FALSE);

  // 釋放資源

  if (pNewDacl != NULL)

  ::LocalFree(pNewDacl);

  return bSuccess;

  }ATL封裝了安全操作函數(shù),用ATL來(lái)寫(xiě)就簡(jiǎn)單多了: //

  // 啟用某個(gè)賬戶對(duì)某個(gè)文件(夾)的所有操作權(quán)限(ATL版本)

  // pszPath: 文件(夾)路徑

  // pszAccount: 賬戶名稱

  //

  BOOL  AtlEnableFileAccountPrivilege (PCTSTR pszPath, PCTSTR pszAccount)

  {

  CDacl  dacl;

  CSid   sid;

  // 獲取用戶帳戶標(biāo)志符

  if (!sid.LoadAccount (pszAccount))

  {

  return FALSE;

  }

  // 獲取文件(夾)的DACL

  if (!AtlGetDacl (pszPath, SE_FILE_OBJECT, &dacl))

  {

  return FALSE;

  }

  // 在DACL中添加新的ACE項(xiàng)

  dacl.AddAllowedAce (sid, GENERIC_ALL);

  // 設(shè)置文件(夾)的DACL

  return AtlSetDacl (pszPath, SE_FILE_OBJECT, dacl) ? TRUE : FALSE;

  }

來(lái)源:http://www.uniuc.com/computer/show-6322-1.html\\\



通過(guò)程序?qū)ξ募A的訪問(wèn)權(quán)限進(jìn)行控制。
BOOL   My_SetFolderSecurity(WCHAR*   szPath)
{
SID_IDENTIFIER_AUTHORITY   sia   =   SECURITY_NT_AUTHORITY;
PSID   pSidSystem   =   NULL;
PSID   pSidAdmins   =   NULL;
PSID   pSidWorld   =   NULL;
PACL   pDacl   =   NULL;
EXPLICIT_ACCESS   ea[4];
SECURITY_DESCRIPTOR   SecDesc;

ULONG   lRes   =   ERROR_SUCCESS;

__try
{
//   create   SYSTEM   SID
if   (!AllocateAndInitializeSid(&sia,   1,   SECURITY_LOCAL_SYSTEM_RID,
0,   0,   0,   0,   0,   0,   0,   &pSidSystem))
{
lRes   =   GetLastError();
__leave;
}

//   create   Local   Administrators   alias   SID
if   (!AllocateAndInitializeSid(&sia,   2,   SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,   0,   0,   0,   0,  
0,   0,   &pSidAdmins))
{
lRes   =   GetLastError();
__leave;
}


//   create   Authenticated   users   well-known   group   SID
if   (!AllocateAndInitializeSid(&sia,   1,   SECURITY_AUTHENTICATED_USER_RID,
0,   0,   0,   0,   0,   0,   0,   &pSidWorld))
{
lRes   =   GetLastError();
__leave;
}

//   fill   an   entry   for   the   SYSTEM   account
ea[0].grfAccessMode   =   GRANT_ACCESS;
ea[0].grfAccessPermissions   =   FILE_ALL_ACCESS;
ea[0].grfInheritance   =   OBJECT_INHERIT_ACE|CONTAINER_INHERIT_ACE;
ea[0].Trustee.MultipleTrusteeOperation   =   NO_MULTIPLE_TRUSTEE;
ea[0].Trustee.pMultipleTrustee   =   NULL;
ea[0].Trustee.TrusteeForm   =   TRUSTEE_IS_SID;
ea[0].Trustee.TrusteeType   =   TRUSTEE_IS_WELL_KNOWN_GROUP;
ea[0].Trustee.ptstrName   =   (LPTSTR)pSidSystem;

//   fill   an   entry   entries   for   the   Administrators   alias
ea[1].grfAccessMode   =   GRANT_ACCESS;
ea[1].grfAccessPermissions   =   FILE_ALL_ACCESS;
ea[1].grfInheritance   =   OBJECT_INHERIT_ACE|CONTAINER_INHERIT_ACE;
ea[1].Trustee.MultipleTrusteeOperation   =   NO_MULTIPLE_TRUSTEE;
ea[1].Trustee.pMultipleTrustee   =   NULL;
ea[1].Trustee.TrusteeForm   =   TRUSTEE_IS_SID;
ea[1].Trustee.TrusteeType   =   TRUSTEE_IS_ALIAS;
ea[1].Trustee.ptstrName   =   (LPTSTR)pSidAdmins;

//   fill   an   entry   for   the   Authenticated   users   well-known   group
ea[2].grfAccessMode   =   GRANT_ACCESS;
ea[2].grfAccessPermissions   =   FILE_GENERIC_READ|FILE_GENERIC_WRITE   ;
ea[2].grfInheritance   =   OBJECT_INHERIT_ACE|CONTAINER_INHERIT_ACE;
ea[2].Trustee.MultipleTrusteeOperation   =   NO_MULTIPLE_TRUSTEE;
ea[2].Trustee.pMultipleTrustee   =   NULL;
ea[2].Trustee.TrusteeForm   =   TRUSTEE_IS_SID;
ea[2].Trustee.TrusteeType   =   TRUSTEE_IS_WELL_KNOWN_GROUP;
ea[2].Trustee.ptstrName   =   (LPTSTR)pSidWorld;


//   create   a   DACL
lRes   =   SetEntriesInAcl(3,   ea,   NULL,   &pDacl);
if   (lRes   !=   ERROR_SUCCESS)
__leave;

//   initialize   security   descriptor
if(!InitializeSecurityDescriptor(&SecDesc,   SECURITY_DESCRIPTOR_REVISION))
__leave   ;

if(!SetSecurityDescriptorDacl(&SecDesc,   TRUE,   pDacl,   FALSE))
__leave   ;

//   assign   security   descriptor   to   the   key
//lRes   =   RegSetKeySecurity(hKey,   DACL_SECURITY_INFORMATION,   &SecDesc);

lRes   =   SR_SetFileSecurityRecursive(szPath,   DACL_SECURITY_INFORMATION,   &SecDesc);
//lRes   =   SetFileSecurity(szPath,   DACL_SECURITY_INFORMATION,   &SecDesc);


}
__finally
{
if   (pSidSystem   !=   NULL)
FreeSid(pSidSystem);
if   (pSidAdmins   !=   NULL)
FreeSid(pSidAdmins);
if   (pSidWorld   !=   NULL)
FreeSid(pSidWorld);
if   (pDacl   !=   NULL)
LocalFree((HLOCAL)pDacl);
}

SetLastError(lRes);
return   lRes   !=   ERROR_SUCCESS;
}  


Command   what   is   yours
Conquer   what   is   not

==========================================================
我解決了,在MSDN里找到的
(取自MSDN)

#define   _WIN32_WINNT   0x0500

#include   <windows.h>
#include   <sddl.h>
#include   <stdio.h>

BOOL   CreateMyDACL(SECURITY_ATTRIBUTES   *);

void   main()
{
SECURITY_ATTRIBUTES     sa;

sa.nLength   =   sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle   =   FALSE;    

//   Call   function   to   set   the   DACL.   The   DACL
//   is   set   in   the   SECURITY_ATTRIBUTES  
//   lpSecurityDescriptor   member.
if   (!CreateMyDACL(&sa))
{
//   Error   encountered;   generate   message   and   exit.
printf( "Failed   CreateMyDACL\n ");
exit(1);
}

//   Use   the   updated   SECURITY_ATTRIBUTES   to   specify
//   security   attributes   for   securable   objects.
//   This   example   uses   security   attributes   during
//   creation   of   a   new   directory.
if   (0   ==   CreateDirectory(TEXT( "C:\\MyFolder "),   &sa))
{
//   Error   encountered;   generate   message   and   exit.
printf( "Failed   CreateDirectory\n ");
exit(1);
}

//   Free   the   memory   allocated   for   the   SECURITY_DESCRIPTOR.
if   (NULL   !=   LocalFree(sa.lpSecurityDescriptor))
{
//   Error   encountered;   generate   message   and   exit.
printf( "Failed   LocalFree\n ");
exit(1);
}
}

BOOL   CreateMyDACL(SECURITY_ATTRIBUTES   *   pSA)
{
TCHAR   *   szSD   =   TEXT( "D: ")               //   Discretionary   ACL
TEXT( "(D;OICI;GA;;;BG) ")           //   Deny   access   to   built-in   guests
TEXT( "(D;OICI;GA;;;AN) ")           //   Deny   access   to   anonymous   logon
TEXT( "(A;OICI;GRGWGX;;;AU) ")   //   Allow   read/write/execute   to   authenticated   users
TEXT( "(A;OICI;GA;;;BA) ");         //   Allow   full   control   to   administrators

if   (NULL   ==   pSA)
return   FALSE;

return   ConvertStringSecurityDescriptorToSecurityDescriptor(
szSD,
SDDL_REVISION_1,
&(pSA-> lpSecurityDescriptor),
NULL);
}

posted @ 2011-08-23 13:02 wrh 閱讀(7956) | 評(píng)論 (0)編輯 收藏
1 echo 和 @
回顯命令
@ #關(guān)閉單行回顯
echo off #從下一行開(kāi)始關(guān)閉回顯
@echo off #從本行開(kāi)始關(guān)閉回顯。一般批處理第一行都是這個(gè)
echo on #從下一行開(kāi)始打開(kāi)回顯
echo #顯示當(dāng)前是 echo off 狀態(tài)還是 echo on 狀態(tài)
echo. #輸出一個(gè)”回車(chē)換行”,空白行
#(同echo, echo; echo+ echo[ echo] echo/ echo\)

2 errorlevel
echo %errorlevel%
每個(gè)命令運(yùn)行結(jié)束,可以用這個(gè)命令行格式查看返回碼
默認(rèn)值為0,一般命令執(zhí)行出錯(cuò)會(huì)設(shè) errorlevel 為1

3 dir
顯示文件夾內(nèi)容
dir #顯示當(dāng)前目錄中的文件和子目錄
dir /a #顯示當(dāng)前目錄中的文件和子目錄,包括隱藏文件和系統(tǒng)文件
dir c: /a:d #顯示 C 盤(pán)當(dāng)前目錄中的目錄
dir c: /a:-d #顯示 C 盤(pán)根目錄中的文件
dir c:\ /b/p #/b只顯示文件名,/p分頁(yè)顯示
dir *.exe /s #顯示當(dāng)前目錄和子目錄里所有的.exe文件

4 cd
切換目錄
cd\ #進(jìn)入根目錄
cd #顯示當(dāng)前目錄
cd /d d:\sdk #可以同時(shí)更改盤(pán)符和目錄

5 md
創(chuàng)建目錄
md d:\a\b\c #如果 d:\a 不存在,將會(huì)自動(dòng)創(chuàng)建中級(jí)目錄
D A J p(|0#如果命令擴(kuò)展名被停用,則需要鍵入 mkdir \a\b\c。

6 rd
刪除目錄
rd abc #刪除當(dāng)前目錄里的 abc 子目錄,要求為空目錄
rd /s/q d:\temp #刪除 d:\temp 文件夾及其子文件夾和文件,/q安靜模式

7 del
刪除文件
del d:\test.txt #刪除指定文件,不能是隱藏、系統(tǒng)、只讀文件
del /q/a/f d:\temp\*.*
刪除 d:\temp 文件夾里面的所有文件,包括隱藏、只讀、系統(tǒng)文件,不包括子目錄
del /q/a/f/s d:\temp\*.*
刪除 d:\temp 及子文件夾里面的所有文件,包括隱藏、只讀、系統(tǒng)文件,不包括子目錄

8 ren
重命名命令
ren d:\temp tmp #支持對(duì)文件夾的重命名

9 cls
清屏
10 type
顯示文件內(nèi)容
type c:\boot.ini #顯示指定文件的內(nèi)容,程序文件一般會(huì)顯示亂碼
type *.txt #顯示當(dāng)前目錄里所有.txt文件的內(nèi)容

11 copy
拷貝文件
copy c:\test.txt d:\test.bak
復(fù)制 c:\test.txt 文件到 d:\ ,并重命名為 test.bak
copy con test.txt
從屏幕上等待輸入,按 Ctrl+Z 結(jié)束輸入,輸入內(nèi)容存為test.txt文件
con代表屏幕,prn代表打印機(jī),nul代表空設(shè)備
copy 1.txt + 2.txt 3.txt
合并 1.txt 和 2.txt 的內(nèi)容,保存為 3.txt 文件
如果不指定 3.txt ,則保存到 1.txt
copy test.txt +
復(fù)制文件到自己,實(shí)際上是修改了文件日期

12 title
設(shè)置cmd窗口的標(biāo)題
title 新標(biāo)題 #可以看到cmd窗口的標(biāo)題欄變了

13 ver
顯示系統(tǒng)版本

14 label 和 vol
設(shè)置卷標(biāo)
vol #顯示卷標(biāo)
label #顯示卷標(biāo),同時(shí)提示輸入新卷標(biāo)
label c:system #設(shè)置C盤(pán)的卷標(biāo)為 system

15 pause
暫停命令

16 rem 和 ::
注釋命令
注釋行不執(zhí)行操作

17 date 和 time
日期和時(shí)間
date #顯示當(dāng)前日期,并提示輸入新日期,按\"回車(chē)\"略過(guò)輸入
date/t #只顯示當(dāng)前日期,不提示輸入新日期
time #顯示當(dāng)前時(shí)間,并提示輸入新時(shí)間,按\"回車(chē)\"略過(guò)輸入
time/t #只顯示當(dāng)前時(shí)間,不提示輸入新時(shí)間

18 goto 和 :
跳轉(zhuǎn)命令
:label #行首為:表示該行是標(biāo)簽行,標(biāo)簽行不執(zhí)行操作
goto label #跳轉(zhuǎn)到指定的標(biāo)簽?zāi)且恍?br />
19 find (外部命令)
查找命令
find \"abc\" c:\test.txt
在 c:\test.txt 文件里查找含 abc 字符串的行
如果找不到,將設(shè) errorlevel 返回碼為1
find /i “abc” c:\test.txt
查找含 abc 的行,忽略大小寫(xiě)
find /c \"abc\" c:\test.txt
顯示含 abc 的行的行數(shù)

20 more (外部命令)
逐屏顯示
more c:\test.txt #逐屏顯示 c:\test.txt 的文件內(nèi)容

21 tree
顯示目錄結(jié)構(gòu)
tree d:\ #顯示D盤(pán)的文件目錄結(jié)構(gòu)

22 &
順序執(zhí)行多條命令,而不管命令是否執(zhí)行成功

23 &&
順序執(zhí)行多條命令,當(dāng)碰到執(zhí)行出錯(cuò)的命令后將不執(zhí)行后面的命令
find \"ok\" c:\test.txt && echo 成功
如果找到了\"ok\"字樣,就顯示\"成功\",找不到就不顯示

24 ||
順序執(zhí)行多條命令,當(dāng)碰到執(zhí)行正確的命令后將不執(zhí)行后面的命令
find \"ok\" c:\test.txt || echo 不成功
如果找不到\"ok\"字樣,就顯示\"不成功\",找到了就不顯示

25 |
管道命令
dir *.* /s/a | find /c \".exe\"
管道命令表示先執(zhí)行 dir 命令,對(duì)其輸出的結(jié)果執(zhí)行后面的 find 命令
該命令行結(jié)果:輸出當(dāng)前文件夾及所有子文件夾里的.exe文件的個(gè)數(shù)
type c:\test.txt|more
這個(gè)和 more c:\test.txt 的效果是一樣的

26 > 和 >>
輸出重定向命令
> 清除文件中原有的內(nèi)容后再寫(xiě)入
>> 追加內(nèi)容到文件末尾,而不會(huì)清除原有的內(nèi)容
主要將本來(lái)顯示在屏幕上的內(nèi)容輸出到指定文件中
指定文件如果不存在,則自動(dòng)生成該文件
type c:\test.txt >prn
屏幕上不顯示文件內(nèi)容,轉(zhuǎn)向輸出到打印機(jī)
echo hello world>con
在屏幕上顯示hello world,實(shí)際上所有輸出都是默認(rèn) >con 的
copy c:\test.txt f: >nul
拷貝文件,并且不顯示\"文件復(fù)制成功\"的提示信息,但如果f盤(pán)不存在,還是會(huì)顯示出錯(cuò)信息
copy c:\test.txt f: >nul 2>nul
不顯示”文件復(fù)制成功”的提示信息,并且f盤(pán)不存在的話,也不顯示錯(cuò)誤提示信息
echo ^^W ^> ^W>c:\test.txt
生成的文件內(nèi)容為 ^W > W
^ 和 > 是控制命令,要把它們輸出到文件,必須在前面加個(gè) ^ 符號(hào)

27 <
從文件中獲得輸入信息,而不是從屏幕上
一般用于 date time label 等需要等待輸入的命令
@echo off
echo 2005-05-01>temp.txt
date <temp.txt
del temp.txt
這樣就可以不等待輸入直接修改當(dāng)前日期

28 %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %*
命令行傳遞給批處理的參數(shù)
%0 批處理文件本身
%1 第一個(gè)參數(shù)
%9 第九個(gè)參數(shù)
%* 從第一個(gè)參數(shù)開(kāi)始的所有參數(shù)

批參數(shù)(%n)的替代已被增強(qiáng)。您可以使用以下語(yǔ)法:

%~1 - 刪除引號(hào)(\"),擴(kuò)充 %1
%~f1 - 將 %1 擴(kuò)充到一個(gè)完全合格的路徑名
%~d1 - 僅將 %1 擴(kuò)充到一個(gè)驅(qū)動(dòng)器號(hào)
%~p1 - 僅將 %1 擴(kuò)充到一個(gè)路徑
%~n1 - 僅將 %1 擴(kuò)充到一個(gè)文件名
%~x1 - 僅將 %1 擴(kuò)充到一個(gè)文件擴(kuò)展名
%~s1 - 擴(kuò)充的路徑指含有短名
%~a1 - 將 %1 擴(kuò)充到文件屬性
%~t1 - 將 %1 擴(kuò)充到文件的日期/時(shí)間
%~z1 - 將 %1 擴(kuò)充到文件的大小
%~$PATH : 1 - 查找列在 PATH 環(huán)境變量的目錄,并將 %1
擴(kuò)充到找到的第一個(gè)完全合格的名稱。如果環(huán)境
變量名未被定義,或者沒(méi)有找到文件,此組合鍵會(huì)
擴(kuò)充到空字符串

可以組合修定符來(lái)取得多重結(jié)果:

%~dp1 - 只將 %1 擴(kuò)展到驅(qū)動(dòng)器號(hào)和路徑
%~nx1 - 只將 %1 擴(kuò)展到文件名和擴(kuò)展名
%~dp$PATH:1 - 在列在 PATH 環(huán)境變量中的目錄里查找 %1,
并擴(kuò)展到找到的第一個(gè)文件的驅(qū)動(dòng)器號(hào)和路徑。
%~ftza1 - 將 %1 擴(kuò)展到類(lèi)似 DIR 的輸出行。
可以參照 call/? 或 for/? 看出每個(gè)參數(shù)的含意
echo load \"%%1\" \"%%2\">c:\test.txt
生成的文件內(nèi)容為 load \"%1\" \"%2\"
批處理文件里,用這個(gè)格式把命令行參數(shù)輸出到文件

29 if
判斷命令
if \"%1\"==\"/a\" echo 第一個(gè)參數(shù)是/a
if /i \"%1\" equ \"/a\" echo 第一個(gè)參數(shù)是/a
/i 表示不區(qū)分大小寫(xiě),equ 和 == 是一樣的,其它運(yùn)算符參見(jiàn) if/?
if exist c:\test.bat echo 存在c:\test.bat文件
if not exist c:\windows (
echo 不存在c:\windows文件夾

if exist c:\test.bat (
echo 存在c:\test.bat
) else (
echo 不存在c:\test.bat
)

30 setlocal 和 endlocal
設(shè)置”命令擴(kuò)展名”和”延緩環(huán)境變量擴(kuò)充”

SETLOCAL ENABLEEXTENSIONS #啟用\"命令擴(kuò)展名\"
SETLOCAL DISABLEEXTENSIONS #停用\"命令擴(kuò)展名\"
SETLOCAL ENABLEDELAYEDEXPANSION #啟用\"延緩環(huán)境變量擴(kuò)充\"
SETLOCAL DISABLEDELAYEDEXPANSION #停用\"延緩環(huán)境變量擴(kuò)充\"
ENDLOCAL #恢復(fù)到使用SETLOCAL語(yǔ)句以前的狀態(tài)
“命令擴(kuò)展名”默認(rèn)為啟用
“延緩環(huán)境變量擴(kuò)充”默認(rèn)為停用
批處理結(jié)束系統(tǒng)會(huì)自動(dòng)恢復(fù)默認(rèn)值
可以修改注冊(cè)表以禁用\"命令擴(kuò)展名\",詳見(jiàn) cmd /? 。所以用到\"命令擴(kuò)展名\"的程
序,建議在開(kāi)頭和結(jié)尾加上 SETLOCAL ENABLEEXTENSIONS 和 ENDLOCAL 語(yǔ)句,以確
保程序能在其它系統(tǒng)上正確運(yùn)行
“延緩環(huán)境變量擴(kuò)充\”主要用于 if 和 for 的符合語(yǔ)句,在 set 的說(shuō)明里有其實(shí)用例程

31 set
設(shè)置變量
引用變量可在變量名前后加 % ,即 %變量名%
set #顯示目前所有可用的變量,包括系統(tǒng)變量和自定義的變量
echo %SystemDrive% #顯示系統(tǒng)盤(pán)盤(pán)符。系統(tǒng)變量可以直接引用
set p #顯示所有以p開(kāi)頭的變量,要是一個(gè)也沒(méi)有就設(shè)errorlevel=1
set p=aa1bb1aa2bb2 #設(shè)置變量p,并賦值為 = 后面的字符串,即aa1bb1aa2bb2
echo %p% #顯示變量p代表的字符串,即aa1bb1aa2bb2
echo %p:~6% #顯示變量p中第6個(gè)字符以后的所有字符,即aa2bb2
echo %p:~6,3% #顯示第6個(gè)字符以后的3個(gè)字符,即aa2
echo %p:~0,3% #顯示前3個(gè)字符,即aa1
echo %p:~-2% #顯示最后面的2個(gè)字符,即b2
echo %p:~0,-2% #顯示除了最后2個(gè)字符以外的其它字符,即aa1bb1aa2b
echo %p:aa=c% #用c替換變量p中所有的aa,即顯示c1bb1c2bb2
echo %p:aa=% #將變量p中的所有aa字符串置換為空,即顯示1bb12bb2
echo %p:*bb=c% #第一個(gè)bb及其之前的所有字符被替換為c,即顯示c1aa2bb2
set p=%p:*bb=c% #設(shè)置變量p,賦值為 %p:*bb=c% ,即c1aa2bb2
set /a p=39 #設(shè)置p為數(shù)值型變量,值為39
set /a p=39/10 #支持運(yùn)算符,有小數(shù)時(shí)用去尾法,39/10=3.9,去尾得3,p=3
set /a p=p/10 #用 /a 參數(shù)時(shí),在 = 后面的變量可以不加%直接引用
set /a p=”1&0″ #”與”運(yùn)算,要加引號(hào)。其它支持的運(yùn)算符參見(jiàn)set/?
set p= #取消p變量
set /p p=請(qǐng)輸入
屏幕上顯示”請(qǐng)輸入”,并會(huì)將輸入的字符串賦值給變量p
注意這條可以用來(lái)取代 choice 命令
注意變量在 if 和 for 的復(fù)合語(yǔ)句里是一次性全部替換的,如
@echo off
set p=aaa
if %p%==aaa (
echo %p%
set p=bbb
echo %p%
)
結(jié)果將顯示
aaa
aaa
因?yàn)樵谧x取 if 語(yǔ)句時(shí)已經(jīng)將所有 %p% 替換為aaa
這里的\"替換\",在 /? 幫助里就是指\"擴(kuò)充\"、\"環(huán)境變量擴(kuò)充\"
可以啟用”延緩環(huán)境變量擴(kuò)充”,用 ! 來(lái)引用變量,即 !變量名!
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set p=aaa
if %p%==aaa (
echo %p%
set p=bbb
echo !p!
)
ENDLOCAL
結(jié)果將顯示
aaa
bbb
還有幾個(gè)動(dòng)態(tài)變量,運(yùn)行 set 看不到
%CD% #代表當(dāng)前目錄的字符串
%DATE% #當(dāng)前日期
%TIME% #當(dāng)前時(shí)間
%RANDOM% #隨機(jī)整數(shù),介于0~32767
%ERRORLEVEL% #當(dāng)前 ERRORLEVEL 值
%CMDEXTVERSION% #當(dāng)前命令處理器擴(kuò)展名版本號(hào)
%CMDCMDLINE% #調(diào)用命令處理器的原始命令行
可以用echo命令查看每個(gè)變量值,如 echo %time%
注意 %time% 精確到毫秒,在批處理需要延時(shí)處理時(shí)可以用到

32 start
批處理中調(diào)用外部程序的命令,否則等外部程序完成后才繼續(xù)執(zhí)行剩下的指令

33 call
批處理中調(diào)用另外一個(gè)批處理的命令,否則剩下的批處理指令將不會(huì)被執(zhí)行
有時(shí)有的應(yīng)用程序用start調(diào)用出錯(cuò)的,也可以call調(diào)用

34 choice (外部命令)
選擇命令
讓用戶輸入一個(gè)字符,從而選擇運(yùn)行不同的命令,返回碼errorlevel為1234……
win98里是choice.com
win2000pro里沒(méi)有,可以從win98里拷過(guò)來(lái)
win2003里是choice.exe
choice /N /C y /T 5 /D y>nul
延時(shí)5秒

35 assoc 和 ftype
文件關(guān)聯(lián)
assoc 設(shè)置'文件擴(kuò)展名'關(guān)聯(lián),關(guān)聯(lián)到'文件類(lèi)型'
ftype 設(shè)置'文件類(lèi)型'關(guān)聯(lián),關(guān)聯(lián)到'執(zhí)行程序和參數(shù)'
當(dāng)你雙擊一個(gè).txt文件時(shí),[url=file::;]windows[/url]并不是根據(jù).txt直接判斷用 notepad.exe 打開(kāi)
而是先判斷.txt屬于 txtfile '文件類(lèi)型'
再調(diào)用 txtfile 關(guān)聯(lián)的命令行 txtfile=%SystemRoot%\system32\NOTEPAD.EXE %1
可以在\"文件夾選項(xiàng)\"→\"文件類(lèi)型\"里修改這2種關(guān)聯(lián)
assoc #顯示所有'文件擴(kuò)展名'關(guān)聯(lián)
assoc .txt #顯示.txt代表的'文件類(lèi)型',結(jié)果顯示 .txt=txtfile
assoc .doc #顯示.doc代表的'文件類(lèi)型',結(jié)果顯示 .doc=Word.Document.8
assoc .exe #顯示.exe代表的'文件類(lèi)型',結(jié)果顯示 .exe=exefile
ftype #顯示所有'文件類(lèi)型'關(guān)聯(lián)
ftype exefile #顯示exefile類(lèi)型關(guān)聯(lián)的命令行,結(jié)果顯示 exefile=\"%1\" %*
assoc .txt=Word.Document.8
設(shè)置.txt為word類(lèi)型的文檔,可以看到.txt文件的圖標(biāo)都變了
assoc .txt=txtfile
恢復(fù).txt的正確關(guān)聯(lián)
ftype exefile=\"%1\" %*
恢復(fù) exefile 的正確關(guān)聯(lián)
如果該關(guān)聯(lián)已經(jīng)被破壞,可以運(yùn)行 command.com ,再輸入這條命令

36 pushd 和 popd
切換當(dāng)前目錄
@echo off
c: & cd\ & md mp3 #在 C:\ 建立 mp3 文件夾
md d:\mp4 #在 D:\ 建立 mp4 文件夾
cd /d d:\mp4 #更改當(dāng)前目錄為 d:\mp4
pushd c:\mp3 #保存當(dāng)前目錄,并切換當(dāng)前目錄為 c:\mp3
popd #恢復(fù)當(dāng)前目錄為剛才保存的 d:\mp4

37 for
循環(huán)命令
這個(gè)比較復(fù)雜,請(qǐng)對(duì)照 for/? 來(lái)看
for %%i in (c: d: e: f:) do echo %%i
依次調(diào)用小括號(hào)里的每個(gè)字符串,執(zhí)行 do 后面的命令
注意%%i,在批處理中 for 語(yǔ)句調(diào)用參數(shù)用2個(gè)%
默認(rèn)的字符串分隔符是\"空格鍵\",\"Tab鍵\",\"回車(chē)鍵\"
for %%i in (*.txt) do find \"abc\" %%i
對(duì)當(dāng)前目錄里所有的txt文件執(zhí)行 find 命令
for /r . %%i in (*.txt) do find \"abc\" %%i
在當(dāng)前目錄和子目錄里所有的.txt文件中搜索包含 abc 字符串的行
for /r . %%i in (.) do echo %%~pni
顯示當(dāng)前目錄名和所有子目錄名,包括路徑,不包括盤(pán)符
for /r d:\mp3 %%i in (*.mp3) do echo %%i>>d:\mp3.txt
把 d:\mp3 及其子目錄里的mp3文件的文件名都存到 d:\mp3.txt 里去
for /l %%i in (2,1,8) do echo %%i
生成2345678的一串?dāng)?shù)字,2是數(shù)字序列的開(kāi)頭,8是結(jié)尾,1表示每次加1
for /f %%i in ('set') do echo %%i
對(duì) set 命令的輸出結(jié)果循環(huán)調(diào)用,每行一個(gè)
for /f \"eol=P\" %%i in ('set') do echo %%i
取 set 命令的輸出結(jié)果,忽略以 P 開(kāi)頭的那幾行
for /f %%i in (d:\mp3.txt) do echo %%i
顯示 d:\mp3.txt 里的每個(gè)文件名,每行一個(gè),不支持帶空格的名稱
for /f \"delims=\" %%i in (d:\mp3.txt) do echo %%i
顯示 d:\mp3.txt 里的每個(gè)文件名,每行一個(gè),支持帶空格的名稱
for /f \"skip=5 tokens=4\" %%a in ('dir') do echo %%a
對(duì) dir 命令的結(jié)果,跳過(guò)前面5行,余下的每行取第4列
每列之間的分隔符為默認(rèn)的\"空格\"
可以注意到 dir 命令輸出的前5行是沒(méi)有文件名的
for /f \"tokens=1,2,3 delims=- \" %%a in ('date /t') do (
echo %%a
echo %%b
echo %%c
)
對(duì) date /t 的輸出結(jié)果,每行取1、2、3列
第一列對(duì)應(yīng)指定的 %%a ,后面的 %%b 和 %%c 是派生出來(lái)的,對(duì)應(yīng)其它列
分隔符指定為 - 和\"空格\",注意 delims=- 后面有個(gè)\"空格\"
其中 tokens=1,2,3 若用 tokens=1-3 替換,效果是一樣的
for /f \"tokens=2* delims=- \" %%a in ('date /t') do echo %%b
取第2列給 %%a ,其后的列都給 %%b

38 subst (外部命令)
映射磁盤(pán)。
subst z: \server\d #這樣輸入z:就可以訪問(wèn)\server\d了
subst z: /d #取消該映射
subst #顯示目前所有的映時(shí)

39 xcopy (外部命令)
文件拷貝
xcopy d:\mp3 e:\mp3 /s/e/i/y
復(fù)制 d:\mp3 文件夾、所有子文件夾和文件到 e:\ ,覆蓋已有文件
加 /i 表示如果 e:\ 沒(méi)有 mp3 文件夾就自動(dòng)新建一個(gè),否則會(huì)有詢問(wèn)




posted @ 2011-08-20 10:52 wrh 閱讀(447) | 評(píng)論 (0)編輯 收藏

3、if結(jié)合errorlevel使用:
說(shuō)明:環(huán)境變量errorlevel的初始值為0,當(dāng)一些命令執(zhí)行不成功,就會(huì)返回一個(gè)數(shù)值,如:1 ,2 等
IF-ERRORLEVEL
測(cè)試代碼:
復(fù)制代碼 代碼如下:
@ECHO OFF
XCOPY F:\test.bat D:\
IF ERRORLEVEL 1 ECHO 文件拷貝失敗
IF ERRORLEVEL 0 ECHO 成功拷貝文件

如果文件拷貝成功,屏幕就會(huì)顯示“成功拷貝文件”,否則就會(huì)顯示“文件拷貝失敗”。
IF ERRORLEVEL 是用來(lái)測(cè)試它的上一個(gè)DOS命令的返回值的,注意只是上一個(gè)命令的返回值,而且返回值必須依照從大到小次序順序判斷。
因此下面的批處理文件是錯(cuò)誤的:
@ECHO OFF
XCOPY C:\AUTOEXEC.BAT D:\
IF ERRORLEVEL 0 ECHO 成功拷貝文件
IF ERRORLEVEL 1 ECHO 未找到拷貝文件
IF ERRORLEVEL 2 ECHO 用戶通過(guò)ctrl-c中止拷貝操作
IF ERRORLEVEL 3 ECHO 預(yù)置錯(cuò)誤阻止文件拷貝操作
IF ERRORLEVEL 4 ECHO 拷貝過(guò)程中寫(xiě)盤(pán)錯(cuò)誤
無(wú)論拷貝是否成功,后面的:
未找到拷貝文件
用戶通過(guò)ctrl-c中止拷貝操作
預(yù)置錯(cuò)誤阻止文件拷貝操作
拷貝過(guò)程中寫(xiě)盤(pán)錯(cuò)誤
都將顯示出來(lái)。
復(fù)制代碼 代碼如下:
附錄:
以下就是幾個(gè)常用命令的返回值及其代表的意義:
backup
0 備份成功
1 未找到備份文件
2 文件共享沖突阻止備份完成
3 用戶用ctrl-c中止備份
4 由于致命的錯(cuò)誤使備份操作中止
diskcomp
0 盤(pán)比較相同
1 盤(pán)比較不同
2 用戶通過(guò)ctrl-c中止比較操作
3 由于致命的錯(cuò)誤使比較操作中止
4 預(yù)置錯(cuò)誤中止比較
diskcopy
0 盤(pán)拷貝操作成功
1 非致命盤(pán)讀/寫(xiě)錯(cuò)
2 用戶通過(guò)ctrl-c結(jié)束拷貝操作
3 因致命的處理錯(cuò)誤使盤(pán)拷貝中止
4 預(yù)置錯(cuò)誤阻止拷貝操作
format
0 格式化成功
3 用戶通過(guò)ctrl-c中止格式化處理
4 因致命的處理錯(cuò)誤使格式化中止
5 在提示“proceed with format(y/n)?”下用戶鍵入n結(jié)束
xcopy
0 成功拷貝文件
1 未找到拷貝文件
2 用戶通過(guò)ctrl-c中止拷貝操作
4 預(yù)置錯(cuò)誤阻止文件拷貝操作
5 拷貝過(guò)程中寫(xiě)盤(pán)錯(cuò)誤

4、if還有一個(gè)特殊的用法就是可以用來(lái)檢測(cè)某個(gè)變量是否已經(jīng)被定義
用法示例:
復(fù)制代碼 代碼如下:
@echo off
set "str1=ok"
set "str2=no"
if defined str1 echo str1已經(jīng)被定義
if defined str2 echo str2已經(jīng)被定義
if defined str3 (echo str3已經(jīng)被定義) else echo str3 沒(méi)有被定義
pause>nul



 

if 命令示例詳解

if,正如它E文中的意思,就是“如果”的意思,用來(lái)進(jìn)行條件判斷。翻譯過(guò)來(lái)的意思就是:如果符合某一條件,便執(zhí)行后面的命令。
主要用來(lái)判斷,1、兩個(gè)“字符串”是否相等;2、兩個(gè)數(shù)值是大于、小于、等于,然后執(zhí)行相應(yīng)的命令。
當(dāng)然還有特殊用法,如結(jié)合errorlevel:if errorlevel 1 echo error
或者結(jié)合defined(定義的意思):if defined test (echo It is defined) else echo It isn't defined

用法示例:
1、檢測(cè)字符串(注意,用if檢測(cè)字符串是否相等的時(shí)候,后面用的不是“=”,而是“==”):
復(fù)制代碼 代碼如下:
@echo off
set "str=this is a test"
REM 檢測(cè)變量%str%是否等于test,如果相等,顯示OK,否則顯示NO
if "%str%"=="test" (echo OK) else echo NO
pause>nul

2、檢測(cè)數(shù)值:(注意,批處理中大于符號(hào)不能用:“>”,而用"gtr",其它的也類(lèi)似)
比較運(yùn)算符一覽:
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于
檢測(cè)數(shù)值 20 是否大于 15演示代碼:
復(fù)制代碼 代碼如下:
@echo off
set /a num1=20
set /a num2=15
if %num1% gtr %num2% echo %num1%大于%num2%
if %num1% EQU %num2% echo %num1%等于%num2%
if %num1% LSS %num2% echo %num1%小于%num2%
pause>nul

 

posted @ 2011-08-20 10:42 wrh 閱讀(8855) | 評(píng)論 (1)編輯 收藏

在VC工程中添加多個(gè)RC文件


rc2里面的格式跟普通的rc是一樣的文本格式,直接手工修改,也可以用VS打開(kāi)修改.

 

有時(shí)需要把VC_Project2工程的資源合到VC_Project1工程的資源中(*.rc文件), 通常的做法就是用文本的方式打開(kāi)VC_Project2.rc和VC_Project1.rc然后人工的判斷拷貝粘貼了。

 

其實(shí)我們可以直接把VC_Project2.rc文件添加到VC_Project1工程中, 但此時(shí)編譯可能會(huì)報(bào)下面錯(cuò)誤

1>CVTRES : fatal error CVT1100: 重復(fù)的資源。type:VERSION, name:1, language:0x0804

1>LINK : fatal error LNK1123: 轉(zhuǎn)換到 COFF 期間失敗: 文件無(wú)效或損壞

 

這個(gè)錯(cuò)誤的意思就是資源定義重復(fù)了,其實(shí)重復(fù)也很正常,因?yàn)樵趧?chuàng)建VC_Project1和VC_Project2兩個(gè)工程時(shí),很多代碼都是VC自動(dòng)生成的,通常這些自動(dòng)生成的代碼就是產(chǎn)生這個(gè)錯(cuò)誤的原因了。

 

解決辦法就是把其中一個(gè)(那肯定是后來(lái)添加進(jìn)來(lái)的那一個(gè)了)(這里是VC_Project2.rc)rc文件中與工程本身的rc(這里是VC_Project1.rc)文件相同的部分刪掉即可。

 

還要注意的是移了VC_Project2.rc文件過(guò)來(lái), 必須要把VC_Project2工程中對(duì)應(yīng)的cpp和h文件還有最重要的一個(gè)是VC_Project2工程的resource.h文件也要移到VC_Project1工程中。

 

例子:

具體步驟如下:

1. 分別創(chuàng)建了TryRC和TryRC2的基于對(duì)話框的VC工程。

并在TryRC2工程中添加了對(duì)話框 ID是IDC_DIALOG1, IDC_DIALOG1中添加了一個(gè)按鈕IDC_BUTTON1, IDC_DIALOG1綁定到CDlgR類(lèi)中,兩個(gè)文件分別是DlgR.cpp和DlgR.h

 

2. 看對(duì)比TryRC.rc和TryRC2.rc文件的內(nèi)容

TryRC.rc(TryRC2.rc和TryRC.rc內(nèi)容基本一致,只是多了一個(gè)IDC_DIALOG1)

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// Microsoft Visual C++ generated resource script.

//

#include "resource.h"

 

#define APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////

//

// Generated from the TEXTINCLUDE 2 resource.

//

#include "afxres.h"

 

/////////////////////////////////////////////////////////////////////////////

#undef APSTUDIO_READONLY_SYMBOLS

 

/////////////////////////////////////////////////////////////////////////////

// 中文(中華人民共和國(guó)) resources

 

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)

#ifdef _WIN32

LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED

#pragma code_page(936)

#endif //_WIN32

 

#ifdef APSTUDIO_INVOKED

/////////////////////////////////////////////////////////////////////////////

//

// TEXTINCLUDE

//

 

1 TEXTINCLUDE

BEGIN

    "resource.h\0"

END

 

2 TEXTINCLUDE

BEGIN

    "#include ""afxres.h""\r\n"

    "\0"

END

 

3 TEXTINCLUDE

BEGIN

    "#define _AFX_NO_SPLITTER_RESOURCES\r\n"

    "#define _AFX_NO_OLE_RESOURCES\r\n"

    "#define _AFX_NO_TRACKER_RESOURCES\r\n"

    "#define _AFX_NO_PROPERTY_RESOURCES\r\n"

    "\r\n"

    "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)\r\n"

    "LANGUAGE 4, 2\r\n"

    "#pragma code_page(936)\r\n"

    "#include ""res\\TryRC.rc2""  // 非Microsoft Visual C++ 編輯的資源\r\n"

    "#include ""afxres.rc""     // 標(biāo)準(zhǔn)組件\r\n"

    "#endif\r\n"

    "\0"

END

 

#endif    // APSTUDIO_INVOKED

 

 

/////////////////////////////////////////////////////////////////////////////

//

// Icon

//

 

// Icon with lowest ID value placed first to ensure application icon

// remains consistent on all systems.

IDR_MAINFRAME           ICON                    "res\\TryRC.ico"

 

/////////////////////////////////////////////////////////////////////////////

//

// Dialog

//

 

IDD_ABOUTBOX DIALOGEX 0, 0, 235, 55

STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU

CAPTION "關(guān)于TryRC"

FONT 9, "宋體", 0, 0, 0x1

BEGIN

    ICON            IDR_MAINFRAME,IDC_STATIC,11,17,20,20

    LTEXT           "TryRC 1.0 版",IDC_STATIC,40,10,119,8,SS_NOPREFIX

    LTEXT           "Copyright (C) 2010",IDC_STATIC,40,25,119,8

    DEFPUSHBUTTON   "確定",IDOK,178,7,50,16,WS_GROUP

END

 

IDD_TRYRC_DIALOG DIALOGEX 0, 0, 320, 200

STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU

EXSTYLE WS_EX_APPWINDOW

CAPTION "TryRC"

FONT 9, "宋體", 0, 0, 0x1

BEGIN

    DEFPUSHBUTTON   "確定",IDOK,263,7,50,16

    PUSHBUTTON      "取消",IDCANCEL,263,25,50,16

    CTEXT           "TODO: 在此放置對(duì)話框控件。",IDC_STATIC,10,96,300,8

    PUSHBUTTON      "Button1",IDC_BUTTON1,7,7,50,14

END

 

 

/////////////////////////////////////////////////////////////////////////////

//

// Version

//

 

VS_VERSION_INFO VERSIONINFO

 FILEVERSION 1,0,0,1

 PRODUCTVERSION 1,0,0,1

 FILEFLAGSMASK 0x3fL

#ifdef _DEBUG

 FILEFLAGS 0x1L

#else

 FILEFLAGS 0x0L

#endif

 FILEOS 0x4L

 FILETYPE 0x1L

 FILESUBTYPE 0x0L

BEGIN

    BLOCK "StringFileInfo"

    BEGIN

        BLOCK "080403a8"

        BEGIN

            VALUE "CompanyName", "TODO: <公司名>"

            VALUE "FileDescription", "TODO: <文件說(shuō)明>"

            VALUE "FileVersion", "1.0.0.1"

            VALUE "InternalName", "TryRC.exe"

            VALUE "LegalCopyright", "TODO: (C) <公司名>。保留所有權(quán)利。"

            VALUE "OriginalFilename", "TryRC.exe"

            VALUE "ProductName", "TODO: <產(chǎn)品名>"

            VALUE "ProductVersion", "1.0.0.1"

        END

    END

    BLOCK "VarFileInfo"

    BEGIN

        VALUE "Translation", 0x804, 936

    END

END

 

 

/////////////////////////////////////////////////////////////////////////////

//

// DESIGNINFO

//

 

#ifdef APSTUDIO_INVOKED

GUIDELINES DESIGNINFO

BEGIN

    IDD_ABOUTBOX, DIALOG

    BEGIN

        LEFTMARGIN, 7

        RIGHTMARGIN, 228

        TOPMARGIN, 7

        BOTTOMMARGIN, 48

    END

 

    IDD_TRYRC_DIALOG, DIALOG

    BEGIN

        LEFTMARGIN, 7

        RIGHTMARGIN, 313

        TOPMARGIN, 7

        BOTTOMMARGIN, 193

    END

END

#endif    // APSTUDIO_INVOKED

 

 

/////////////////////////////////////////////////////////////////////////////

//

// String Table

//

 

STRINGTABLE

BEGIN

    IDS_ABOUTBOX            "關(guān)于TryRC(&A)..."

END

 

#endif    // 中文(中華人民共和國(guó)) resources

/////////////////////////////////////////////////////////////////////////////

 

 

 

#ifndef APSTUDIO_INVOKED

/////////////////////////////////////////////////////////////////////////////

//

// Generated from the TEXTINCLUDE 3 resource.

//

#define _AFX_NO_SPLITTER_RESOURCES

#define _AFX_NO_OLE_RESOURCES

#define _AFX_NO_TRACKER_RESOURCES

#define _AFX_NO_PROPERTY_RESOURCES

 

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)

LANGUAGE 4, 2

#pragma code_page(936)

#include "res\TryRC.rc2"  // 非Microsoft Visual C++ 編輯的資源

#include "afxres.rc"     // 標(biāo)準(zhǔn)組件

#endif

 

/////////////////////////////////////////////////////////////////////////////

#endif    // not APSTUDIO_INVOKED

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

3. 把TryRC2工程中的TryRC2.rc, DlgR.cpp, DlgR.h和resource.h添加到TryRC工程中,由于TryRC2工程resource.h與TryRC工程resource.h同名(也要注意其他文件的同名情況),所以我把TryRC2工程resource.h改名為resource1.h(如果不把他們放在同一個(gè)目錄應(yīng)該就不用改名了)

 

4. 此時(shí)編譯就會(huì)報(bào)上面說(shuō)到的錯(cuò)誤了。

所以在這里就要修改TryRC2.rc文件, 修改后的文件如下:

// Microsoft Visual C++ generated resource script.

//

#include "resource1.h"           // 看這里,修改了

 

#define APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////

//

// Generated from the TEXTINCLUDE 2 resource.

//

#include "afxres.h"

 

/////////////////////////////////////////////////////////////////////////////

#undef APSTUDIO_READONLY_SYMBOLS

 

/////////////////////////////////////////////////////////////////////////////

// 中文(中華人民共和國(guó)) resources

 

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)

#ifdef _WIN32

LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED

#pragma code_page(936)

#endif //_WIN32

 

#ifdef APSTUDIO_INVOKED

/////////////////////////////////////////////////////////////////////////////

//

// TEXTINCLUDE

//

 

1 TEXTINCLUDE

BEGIN

    "resource1.h\0"                  // 看這里,修改了

END

 

2 TEXTINCLUDE

BEGIN

    "#include ""afxres.h""\r\n"

    "\0"

END

 

3 TEXTINCLUDE

BEGIN

     //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++//

     //++這些部分不注釋掉沒(méi)編譯錯(cuò)誤,注釋掉也沒(méi)有編譯錯(cuò)誤

    "#define _AFX_NO_SPLITTER_RESOURCES\r\n"

    "#define _AFX_NO_OLE_RESOURCES\r\n"

   "#define _AFX_NO_TRACKER_RESOURCES\r\n"

    "#define _AFX_NO_PROPERTY_RESOURCES\r\n"

    "\r\n"

    "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)\r\n"

    "LANGUAGE 4, 2\r\n"

    "#pragma code_page(936)\r\n"

    "#include ""res\\TryRC2.rc2""  // 非Microsoft Visual C++ 編輯的資源\r\n"

    "#include ""afxres.rc""     // 標(biāo)準(zhǔn)組件\r\n"

    "#endif\r\n"

    "\0"

         "\r\n"

     //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++//

END

 

#endif    // APSTUDIO_INVOKED

 

 

/////////////////////////////////////////////////////////////////////////////

//

// Icon

//

 

// Icon with lowest ID value placed first to ensure application icon

// remains consistent on all systems.

//-IDR_MAINFRAME           ICON                    "res\\TryRC2.ico"

 

/////////////////////////////////////////////////////////////////////////////

//

// Dialog

//

//-------------------------------------------------------------------------//

//-----About對(duì)話框, 這些就是與TryRC.rc重復(fù)的了---------------------------//

//IDD_ABOUTBOX DIALOGEX 0, 0, 235, 55

//STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU

//CAPTION "關(guān)于TryRC2"

//FONT 9, "宋體", 0, 0, 0x1

//BEGIN

//    ICON            IDR_MAINFRAME,IDC_STATIC,11,17,20,20

//    LTEXT           "TryRC2 1.0 版",IDC_STATIC,40,10,119,8,SS_NOPREFIX

//    LTEXT           "Copyright (C) 2010",IDC_STATIC,40,25,119,8

//    DEFPUSHBUTTON   "確定",IDOK,178,7,50,16,WS_GROUP

//END

 

//-------------------------------------------------------------------------//

//-----這個(gè)是TryRC2工程的主對(duì)話框,不包進(jìn)來(lái)--------------------------------//

//IDD_TRYRC2_DIALOG DIALOGEX 0, 0, 320, 200

//STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU

//EXSTYLE WS_EX_APPWINDOW

//CAPTION "TryRC2"

//FONT 9, "宋體", 0, 0, 0x1

//BEGIN

//    DEFPUSHBUTTON   "確定",IDOK,263,7,50,16

//    PUSHBUTTON      "取消",IDCANCEL,263,25,50,16

//    CTEXT           "TODO: 在此放置對(duì)話框控件。",IDC_STATIC,10,96,300,8

//END

//----------------------------------------------------------------------------//

IDD_DIALOG1 DIALOGEX 0, 0, 313, 142

STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU

CAPTION "Dialog"

FONT 8, "MS Shell Dlg", 400, 0, 0x1

BEGIN

    DEFPUSHBUTTON   "確定",IDOK,61,121,50,14

    PUSHBUTTON      "取消",IDCANCEL,197,121,50,14

    PUSHBUTTON      "Button1",IDC_BUTTON1,39,46,50,14

END

 

 

/////////////////////////////////////////////////////////////////////////////

//

// Version

//

//-------------------------------------------------------------------------//

//----刪掉刪掉刪掉------------------------------------------------//

//VS_VERSION_INFO VERSIONINFO

// FILEVERSION 1,0,0,1

// PRODUCTVERSION 1,0,0,1

// FILEFLAGSMASK 0x3fL

//#ifdef _DEBUG

// FILEFLAGS 0x1L

//#else

// FILEFLAGS 0x0L

//#endif

// FILEOS 0x4L

// FILETYPE 0x1L

// FILESUBTYPE 0x0L

//BEGIN

//    BLOCK "StringFileInfo"

//    BEGIN

//        BLOCK "080403a8"

//        BEGIN

//            VALUE "CompanyName", "TODO: <公司名>"

//            VALUE "FileDescription", "TODO: <文件說(shuō)明>"

//            VALUE "FileVersion", "1.0.0.1"

//            VALUE "InternalName", "TryRC2.exe"

//            VALUE "LegalCopyright", "TODO: (C) <公司名>。保留所有權(quán)利。"

//            VALUE "OriginalFilename", "TryRC2.exe"

//            VALUE "ProductName", "TODO: <產(chǎn)品名>"

//            VALUE "ProductVersion", "1.0.0.1"

//        END

//    END

//    BLOCK "VarFileInfo"

//    BEGIN

//        VALUE "Translation", 0x804, 936

//    END

//END

//-------------------------------------------------------------------------//

 

/////////////////////////////////////////////////////////////////////////////

//

// DESIGNINFO

//

 

#ifdef APSTUDIO_INVOKED

GUIDELINES DESIGNINFO

BEGIN

   

     //------------------------------------------------------------//

     //-----------------刪掉刪掉刪掉------------------------------//

//IDD_ABOUTBOX, DIALOG

    //BEGIN

    //    LEFTMARGIN, 7

    //    RIGHTMARGIN, 228

    //    TOPMARGIN, 7

    //    BOTTOMMARGIN, 48

    //END

 

    //IDD_TRYRC2_DIALOG, DIALOG

    //BEGIN

    //    LEFTMARGIN, 7

    //    RIGHTMARGIN, 313

    //    TOPMARGIN, 7

    //    BOTTOMMARGIN, 193

    //END

     //------------------------------------------------------------//

 

    IDD_DIALOG1, DIALOG

    BEGIN

        LEFTMARGIN, 7

        RIGHTMARGIN, 306

        TOPMARGIN, 7

        BOTTOMMARGIN, 135

    END

END

#endif    // APSTUDIO_INVOKED

 

 

/////////////////////////////////////////////////////////////////////////////

//

// String Table

//

 

//STRINGTABLE

//BEGIN

 //   IDS_ABOUTBOX            "關(guān)于TryRC2(&A)..."

//END

 

#endif    // 中文(中華人民共和國(guó)) resources

/////////////////////////////////////////////////////////////////////////////

 

 

 

#ifndef APSTUDIO_INVOKED

/////////////////////////////////////////////////////////////////////////////

//

//-------------------------------------------------------------------------//

//------------------ 不刪除會(huì)有錯(cuò)誤----------------------------------------//

// Generated from the TEXTINCLUDE 3 resource.

//

//#define _AFX_NO_SPLITTER_RESOURCES

//#define _AFX_NO_OLE_RESOURCES

//#define _AFX_NO_TRACKER_RESOURCES

//#define _AFX_NO_PROPERTY_RESOURCES

 

//#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)

//LANGUAGE 4, 2

//#pragma code_page(936)

//#include "res\TryRC2.rc2"  // 非Microsoft Visual C++ 編輯的資源

//#include "afxres.rc"     // 標(biāo)準(zhǔn)組件

//#endif

// 這里有一個(gè)TryRC2.rc2暫時(shí)不清楚它有什么用

//--------------------------------------------------------------------------//

/////////////////////////////////////////////////////////////////////////////

#endif    // not APSTUDIO_INVOKED

 

 

5. 在DlgR.h中添加該語(yǔ)句 #include "resource1.h"

這樣子包含不是很好,一修改resource1.h就要編譯DlgR.h和DlgR.cpp了

暫時(shí)沒(méi)有解決辦法。

 

 

6. 總結(jié):其實(shí)這樣子添加多個(gè)RC文件到工程的修改和拷貝粘貼RC文件差不多, 只是在工程的結(jié)構(gòu)上比較明了一點(diǎn),感覺(jué)也是比拷貝粘貼RC文件好。

 

本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/cay22/archive/2010/05/26/5625951.aspx

posted @ 2011-05-18 10:05 wrh 閱讀(5677) | 評(píng)論 (2)編輯 收藏

(注:%0就是該batch文件的文件名 )

這句的意思是
更改當(dāng)前目錄為批處理本身的目錄
有些暈吧?不急,我舉例
比如你有個(gè)批處理a.bat在D:\qq文件夾下 
a.bat內(nèi)容為
cd /d %~dp0
在這里
cd /d %~dp0的意思就是cd /d d:\qq
%0代表批處理本身 d:\qq\a.bat
~dp是變量擴(kuò)充
d既是擴(kuò)充到分區(qū)號(hào) d:
p就是擴(kuò)充到路徑 \qq
dp就是擴(kuò)充到分區(qū)號(hào)路徑 d:\qq


擴(kuò)充變量語(yǔ)法詳解:

:: 選項(xiàng)語(yǔ)法:
:: ~I - 刪除任何引號(hào)("),擴(kuò)充 %I
:: %~fI - 將 %I 擴(kuò)充到一個(gè)完全合格的路徑名
:: %~dI - 僅將 %I 擴(kuò)充到一個(gè)驅(qū)動(dòng)器號(hào)
:: %~pI - 僅將 %I 擴(kuò)充到一個(gè)路徑
:: %~nI - 僅將 %I 擴(kuò)充到一個(gè)文件名
:: %~xI - 僅將 %I 擴(kuò)充到一個(gè)文件擴(kuò)展名
:: %~sI - 擴(kuò)充的路徑只含有短名
:: %~aI - 將 %I 擴(kuò)充到文件的文件屬性
:: %~tI - 將 %I 擴(kuò)充到文件的日期/時(shí)間
:: %~zI - 將 %I 擴(kuò)充到文件的大小
:: %~$PATH:I - 查找列在路徑環(huán)境變量的目錄,并將 %I 擴(kuò)充
:: 到找到的第一個(gè)完全合格的名稱。如果環(huán)境變量名
:: 未被定義,或者沒(méi)有找到文件,此組合鍵會(huì)擴(kuò)充到
:: 空字符串
:: 可以組合修飾符來(lái)得到多重結(jié)果:
:: %~dpI - 僅將 %I 擴(kuò)充到一個(gè)驅(qū)動(dòng)器號(hào)和路徑
:: %~nxI - 僅將 %I 擴(kuò)充到一個(gè)文件名和擴(kuò)展名
:: %~fsI - 僅將 %I 擴(kuò)充到一個(gè)帶有短名的完整路徑名
:: %~dp$PATH:i - 查找列在路徑環(huán)境變量的目錄,并將 %I 擴(kuò)充
:: 到找到的第一個(gè)驅(qū)動(dòng)器號(hào)和路徑。
:: %~ftzaI - 將 %I 擴(kuò)充到類(lèi)似輸出線路的 DIR

 

本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/lightyearwp/archive/2008/08/06/2778677.aspx

posted @ 2011-05-17 15:57 wrh 閱讀(695) | 評(píng)論 (0)編輯 收藏

    0   操作成功完成。
    1   功能錯(cuò)誤。
    2   系統(tǒng)找不到指定的文件。
    3   系統(tǒng)找不到指定的路徑。
    4   系統(tǒng)無(wú)法打開(kāi)文件。
    5   拒絕訪問(wèn)。
    6   句柄無(wú)效。
    7   存儲(chǔ)控制塊被損壞。
    8   存儲(chǔ)空間不足,無(wú)法處理此命令。
    9   存儲(chǔ)控制塊地址無(wú)效。
    10   環(huán)境錯(cuò)誤。
    11   試圖加載格式錯(cuò)誤的程序。
    12   訪問(wèn)碼無(wú)效。
    13   數(shù)據(jù)無(wú)效。
    14   存儲(chǔ)器不足,無(wú)法完成此操作。
    15   系統(tǒng)找不到指定的驅(qū)動(dòng)器。
    16   無(wú)法刪除目錄。
    17   系統(tǒng)無(wú)法將文件移到不同的驅(qū)動(dòng)器。
    18   沒(méi)有更多文件。
    19   介質(zhì)受寫(xiě)入保護(hù)。
    20   系統(tǒng)找不到指定的設(shè)備。
    21   設(shè)備未就緒。
    22   設(shè)備不識(shí)別此命令。
    23   數(shù)據(jù)錯(cuò)誤 (循環(huán)冗余檢查)。
    24   程序發(fā)出命令,但命令長(zhǎng)度不正確。
    25   驅(qū)動(dòng)器無(wú)法找出磁盤(pán)上特定區(qū)域或磁道的位置。
    26   無(wú)法訪問(wèn)指定的磁盤(pán)或軟盤(pán)。
    27   驅(qū)動(dòng)器找不到請(qǐng)求的扇區(qū)。
    28   打印機(jī)缺紙。
    29   系統(tǒng)無(wú)法寫(xiě)入指定的設(shè)備。
    30   系統(tǒng)無(wú)法從指定的設(shè)備上讀取。
    31   連到系統(tǒng)上的設(shè)備沒(méi)有發(fā)揮作用。
    32   進(jìn)程無(wú)法訪問(wèn)文件,因?yàn)榱硪粋€(gè)程序正在使用此文件。
    33   進(jìn)程無(wú)法訪問(wèn)文件,因?yàn)榱硪粋€(gè)程序已鎖定文件的一部分。
    36   用來(lái)共享的打開(kāi)文件過(guò)多。
    38   到達(dá)文件結(jié)尾。
    39   磁盤(pán)已滿。
    50   不支持網(wǎng)絡(luò)請(qǐng)求。
    51   遠(yuǎn)程計(jì)算機(jī)不可用 。
    52   在網(wǎng)絡(luò)上已有重復(fù)的名稱。
    53   找不到網(wǎng)絡(luò)路徑。
    54   網(wǎng)絡(luò)忙。
    55   指定的網(wǎng)絡(luò)資源或設(shè)備不再可用。
    56   已到達(dá)網(wǎng)絡(luò) BIOS 命令限制。
    57   網(wǎng)絡(luò)適配器硬件出錯(cuò)。
    58   指定的服務(wù)器無(wú)法運(yùn)行請(qǐng)求的操作。
    59   發(fā)生意外的網(wǎng)絡(luò)錯(cuò)誤。
    60   遠(yuǎn)程適配器不兼容。
    61   打印機(jī)隊(duì)列已滿。
    62   無(wú)法在服務(wù)器上獲得用于保存待打印文件的空間。
    63   刪除等候打印的文件。
    64   指定的網(wǎng)絡(luò)名不再可用。
    65   拒絕網(wǎng)絡(luò)訪問(wèn)。
    66   網(wǎng)絡(luò)資源類(lèi)型錯(cuò)誤。
    67   找不到網(wǎng)絡(luò)名。
    68   超過(guò)本地計(jì)算機(jī)網(wǎng)卡的名稱限制。
    69   超出網(wǎng)絡(luò) BIOS 會(huì)話限制。
    70   遠(yuǎn)程服務(wù)器已暫停,或正在啟動(dòng)過(guò)程中。
    71   當(dāng)前已無(wú)法再同此遠(yuǎn)程計(jì)算機(jī)連接,因?yàn)橐堰_(dá)到計(jì)算機(jī)的連接數(shù)目極限。
    72   已暫停指定的打印機(jī)或磁盤(pán)設(shè)備。
    80   文件存在。
    82   無(wú)法創(chuàng)建目錄或文件。
    83   INT 24 失敗。
    84   無(wú)法取得處理此請(qǐng)求的存儲(chǔ)空間。
    85   本地設(shè)備名已在使用中。
    86   指定的網(wǎng)絡(luò)密碼錯(cuò)誤。
    87   參數(shù)錯(cuò)誤。
    88   網(wǎng)絡(luò)上發(fā)生寫(xiě)入錯(cuò)誤。
    89   系統(tǒng)無(wú)法在此時(shí)啟動(dòng)另一個(gè)進(jìn)程。
    100   無(wú)法創(chuàng)建另一個(gè)系統(tǒng)信號(hào)燈。
    101   另一個(gè)進(jìn)程擁有獨(dú)占的信號(hào)燈。
    102   已設(shè)置信號(hào)燈且無(wú)法關(guān)閉。
    103   無(wú)法再設(shè)置信號(hào)燈。
    104   無(wú)法在中斷時(shí)請(qǐng)求獨(dú)占的信號(hào)燈。
    105   此信號(hào)燈的前一個(gè)所有權(quán)已結(jié)束。
    107   程序停止,因?yàn)樘娲能洷P(pán)未插入。
    108   磁盤(pán)在使用中,或被另一個(gè)進(jìn)程鎖定。
    109   管道已結(jié)束。
    110   系統(tǒng)無(wú)法打開(kāi)指定的設(shè)備或文件。
    111   文件名太長(zhǎng)。
    112   磁盤(pán)空間不足。
    113   無(wú)法再獲得內(nèi)部文件的標(biāo)識(shí)。
    114   目標(biāo)內(nèi)部文件的標(biāo)識(shí)不正確。
    117   應(yīng)用程序制作的 IOCTL 調(diào)用錯(cuò)誤。
    118   驗(yàn)證寫(xiě)入的切換參數(shù)值錯(cuò)誤。
    119   系統(tǒng)不支持請(qǐng)求的命令。
    120   此功能只被此系統(tǒng)支持。
    121   信號(hào)燈超時(shí)時(shí)間已到。
    122   傳遞到系統(tǒng)調(diào)用的數(shù)據(jù)區(qū)太小。
    123   文件名、目錄名或卷標(biāo)語(yǔ)法不正確。
    124   系統(tǒng)調(diào)用級(jí)別錯(cuò)誤。
    125   磁盤(pán)沒(méi)有卷標(biāo)。
    126   找不到指定的模塊。
    127   找不到指定的程序。
    128   沒(méi)有等候的子進(jìn)程。
    130   試圖使用操作(而非原始磁盤(pán) I/O)的已打開(kāi)磁盤(pán)分區(qū)的文件句柄。
    131   試圖移動(dòng)文件指針到文件開(kāi)頭之前。
    132   無(wú)法在指定的設(shè)備或文件上設(shè)置文件指針。
    133   包含先前加入驅(qū)動(dòng)器的驅(qū)動(dòng)器無(wú)法使用 JOIN 或 SUBST 命令。
    134   試圖在已被合并的驅(qū)動(dòng)器上使用 JOIN 或 SUBST 命令。
    135   試圖在已被合并的驅(qū)動(dòng)器上使用 JOIN 或 SUBST 命令。
    136   系統(tǒng)試圖解除未合并驅(qū)動(dòng)器的 JOIN。
    137   系統(tǒng)試圖解除未替代驅(qū)動(dòng)器的 SUBST。
    138   系統(tǒng)試圖將驅(qū)動(dòng)器合并到合并驅(qū)動(dòng)器上的目錄。
    139   系統(tǒng)試圖將驅(qū)動(dòng)器替代為替代驅(qū)動(dòng)器上的目錄。
    140   系統(tǒng)試圖將驅(qū)動(dòng)器合并到替代驅(qū)動(dòng)器上的目錄。
    141   系統(tǒng)試圖替代驅(qū)動(dòng)器為合并驅(qū)動(dòng)器上的目錄。
    142   系統(tǒng)無(wú)法在此時(shí)運(yùn)行 JOIN 或 SUBST。
    143   系統(tǒng)無(wú)法將驅(qū)動(dòng)器合并到或替代為相同驅(qū)動(dòng)器上的目錄。
    144   目錄并非根目錄下的子目錄。
    145   目錄非空。
    146   指定的路徑已在替代中使用。
    147   資源不足,無(wú)法處理此命令。
    148   指定的路徑無(wú)法在此時(shí)使用。
    149   企圖將驅(qū)動(dòng)器合并或替代為驅(qū)動(dòng)器上目錄是上一個(gè)替代的目標(biāo)的驅(qū)動(dòng)器。
    150   系統(tǒng)跟蹤信息未在 CONFIG.SYS 文件中指定,或不允許跟蹤。
    151   為 DosMuxSemWait 指定的信號(hào)燈事件個(gè)數(shù)錯(cuò)誤。
    152   DosMuxSemWait 不可運(yùn)行。已設(shè)置過(guò)多的信號(hào)燈。
    153   DosMuxSemWait 清單錯(cuò)誤。
    154   輸入的卷標(biāo)超過(guò)目標(biāo)文件系統(tǒng)的長(zhǎng)度限制
    155   無(wú)法創(chuàng)建另一個(gè)線程。
    156   接收進(jìn)程已拒絕此信號(hào)。
    157   段已被放棄且無(wú)法鎖定。
    158   段已解除鎖定。
    159   線程標(biāo)識(shí)的地址錯(cuò)誤。
    160   傳遞到 DosExecPgm 的參數(shù)字符串錯(cuò)誤。
    161   指定的路徑無(wú)效。
    162   信號(hào)已暫停。
    164   無(wú)法在系統(tǒng)中創(chuàng)建更多的線程。
    167   無(wú)法鎖定文件區(qū)域。
    170   請(qǐng)求的資源在使用中。
    173   對(duì)于提供取消區(qū)域進(jìn)行鎖定的請(qǐng)求不明顯。
    174   文件系統(tǒng)不支持鎖定類(lèi)型的最小單元更改。
    180   系統(tǒng)檢測(cè)出錯(cuò)誤的段號(hào)。
    183   當(dāng)文件已存在時(shí),無(wú)法創(chuàng)建該文件。
    186   傳遞的標(biāo)志錯(cuò)誤。
    187   找不到指定的系統(tǒng)信號(hào)燈名稱。
    196   操作系統(tǒng)無(wú)法運(yùn)行此應(yīng)用程序。
    197   操作系統(tǒng)當(dāng)前的配置不能運(yùn)行此應(yīng)用程序。
    199   操作系統(tǒng)無(wú)法運(yùn)行此應(yīng)用程序。
    200   代碼段不可大于或等于 64K。
    203   操作系統(tǒng)找不到已輸入的環(huán)境選項(xiàng)。
    205   命令子樹(shù)中的進(jìn)程沒(méi)有信號(hào)處理程序。
    206   文件名或擴(kuò)展名太長(zhǎng)。
    207   第 2 環(huán)堆棧已被占用。
    208   沒(méi)有正確輸入文件名通配符 * 或 ?,或指定過(guò)多的文件名通配符。
    209   正在發(fā)送的信號(hào)錯(cuò)誤。
    210   無(wú)法設(shè)置信號(hào)處理程序。
    212   段已鎖定且無(wú)法重新分配。
    214   連到該程序或動(dòng)態(tài)鏈接模塊的動(dòng)態(tài)鏈接模塊太多。
    215   無(wú)法嵌套調(diào)用 LoadModule。
    230   管道狀態(tài)無(wú)效。
    231   所有的管道實(shí)例都在使用中。
    232   管道正在關(guān)閉中。
    233   管道的另一端上無(wú)任何進(jìn)程。
    234   更多數(shù)據(jù)可用。
    240   取消會(huì)話。
    254   指定的擴(kuò)展屬性名無(wú)效。
    255   擴(kuò)展屬性不一致。
    258   等待的操作過(guò)時(shí)。
    259   沒(méi)有可用的數(shù)據(jù)了。
    266   無(wú)法使用復(fù)制功能。
    267   目錄名無(wú)效。
    275   擴(kuò)展屬性在緩沖區(qū)中不適用。
    276   裝在文件系統(tǒng)上的擴(kuò)展屬性文件已損壞。
    277   擴(kuò)展屬性表格文件已滿。
    278   指定的擴(kuò)展屬性句柄無(wú)效。
    282   裝入的文件系統(tǒng)不支持?jǐn)U展屬性。
    288   企圖釋放并非呼叫方所擁有的多用戶終端運(yùn)行程序。
    298   發(fā)向信號(hào)燈的請(qǐng)求過(guò)多。
    299   僅完成部分的 ReadProcessMemoty 或 WriteProcessMemory 請(qǐng)求。
    300   操作鎖定請(qǐng)求被拒絕。
    301   系統(tǒng)接收了一個(gè)無(wú)效的操作鎖定確認(rèn)。
    487   試圖訪問(wèn)無(wú)效的地址。
    534   算術(shù)結(jié)果超過(guò) 32 位。
    535   管道的另一端有一進(jìn)程。
    536   等候打開(kāi)管道另一端的進(jìn)程。
    994   拒絕訪問(wèn)擴(kuò)展屬性。

posted @ 2011-05-17 10:24 wrh 閱讀(938) | 評(píng)論 (0)編輯 收藏

ini文件(即Initialization file),這種類(lèi)型的文件中通常存放的是一個(gè)程序的初始化信息。ini文件由若干個(gè)節(jié)(Section)組成,每個(gè)Section由若干鍵(Key)組成,每個(gè)Key可以賦相應(yīng)的值。讀寫(xiě)ini文件實(shí)際上就是讀寫(xiě)某個(gè)的Section中相應(yīng)的Key的值,而這只要借助幾個(gè)函數(shù)即可完成。
一、向ini文件中寫(xiě)入信息的函數(shù)
1. 把信息寫(xiě)入系統(tǒng)的win.ini文件
BOOL WriteProfileString(
  LPCTSTR lpAppName, // 節(jié)的名字,是一個(gè)以0結(jié)束的字符串
  LPCTSTR lpKeyName, // 鍵的名字,是一個(gè)以0結(jié)束的字符串。若為NULL,則刪除整個(gè)節(jié)
  LPCTSTR lpString // 鍵的值,是一個(gè)以0結(jié)束的字符串。若為NULL,則刪除對(duì)應(yīng)的鍵
)


2. 把信息寫(xiě)入自己定義的.ini文件
BOOL WritePrivateProfileString(
  LPCTSTR lpAppName, // 同上
  LPCTSTR lpKeyName, // 同上
  LPCTSTR lpString, // 同上
  LPCTSTR lpFileName // 要寫(xiě)入的文件的文件名。若該ini文件與程序在同一個(gè)目錄下,也可使用相對(duì)路徑,否則需要給出絕度路徑。
)

如:
::WriteProfileString("Test","id","xym");
//在win.ini中創(chuàng)建一個(gè)Test節(jié),并在該節(jié)中創(chuàng)建一個(gè)鍵id,其值為xym

::WritePrivateProfileString("Test","id","xym","d:\\vc\\Ex1\\ex1.ini");
//在Ex1目錄下的ex1.ini中創(chuàng)建一個(gè)Test節(jié),并在該節(jié)中創(chuàng)建一個(gè)鍵id,其值為xym

//若Ex1.ini文件與讀寫(xiě)該文件的程序在同一個(gè)目錄下,則上面語(yǔ)句也可寫(xiě)為:
::WritePrivateProfileString("Test","id","xym",".\\ex1.ini");

需要注意的是,C系列的語(yǔ)言中,轉(zhuǎn)義字符'\\'表示反斜線'\'。另外,當(dāng)使用相對(duì)路徑時(shí),\\前的.號(hào)不能丟掉了。

二、從ini文件中讀取數(shù)據(jù)的函數(shù)
1、從系統(tǒng)的win.ini文件中讀取信息
(1) 讀取字符串
DWORD GetProfileString(
  LPCTSTR lpAppName, // 節(jié)名
  LPCTSTR lpKeyName, // 鍵名,讀取該鍵的值
  LPCTSTR lpDefault, // 若指定的鍵不存在,該值作為讀取的默認(rèn)值
  LPTSTR lpReturnedString, // 一個(gè)指向緩沖區(qū)的指針,接收讀取的字符串
  DWORD nSize // 指定lpReturnedString指向的緩沖區(qū)的大小
)

如:
CString str;
::GetProfileString("Test","id","Error",str.GetBuffer(20),20);

(2) 讀取整數(shù)
UINT GetProfileInt(
  LPCTSTR lpAppName, // 同上
  LPCTSTR lpKeyName, // 同上
  INT nDefault // 若指定的鍵名不存在,該值作為讀取的默認(rèn)值
)

如使用以下語(yǔ)句寫(xiě)入了年齡信息:
::WriteProfileString("Test","age","25");
//在win.ini中創(chuàng)建一個(gè)Test節(jié),并在該節(jié)中創(chuàng)建一個(gè)鍵age,其值為25

則可用以下語(yǔ)句讀取age鍵的值:
int age;
age=::GetProfileInt("Test","age",0);

2、從自己的ini文件中讀取信息
(1) 讀取字符串
DWORD GetPrivateProfileString(
  LPCTSTR lpAppName, // 同1(1)
  LPCTSTR lpKeyName, // 同1(1)
  LPCTSTR lpDefault, // 同1(1)
  LPTSTR lpReturnedString, // 同1(1)
  DWORD nSize, // 同1(1)
  LPCTSTR lpFileName // 讀取信息的文件名。若該ini文件與程序在同一個(gè)目錄下,也可使用相對(duì)路徑,否則需要給出絕度路徑。
)

如:
CString str;
::GetPrivateProfileString("Test","id","Error",str.GetBuffer(20),20,".\\ex1.ini");
或:
::GetPrivateProfileString("Test","id","Error",str.GetBuffer(20),20,"d:\\vc\\Ex1\\ex1.ini");

(2) 讀取整數(shù)

UINT GetPrivateProfileInt(
  LPCTSTR lpAppName, // 同上
  LPCTSTR lpKeyName, // 同上
  INT nDefault, // 若指定的鍵名不存在,該值作為讀取的默認(rèn)值
  LPCTSTR lpFileName // 同上
)

如使用以下語(yǔ)句寫(xiě)入了年齡信息:
::WritePrivateProfileString("Test","age","25",".\\ex1.ini");
//在ex1.ini中創(chuàng)建一個(gè)Test節(jié),并在該節(jié)中創(chuàng)建一個(gè)鍵age,其值為25

則可用以下語(yǔ)句讀取age鍵的值:
int age;
age=::GetPrivateProfileInt("Test","age",0,".\\ex1.ini");

三、 刪除鍵值或節(jié)

回顧一下WriteProfileString函數(shù)的說(shuō)明
BOOL WriteProfileString(
  LPCTSTR lpAppName, // 節(jié)的名字,是一個(gè)以0結(jié)束的字符串
  LPCTSTR lpKeyName, // 鍵的名字,是一個(gè)以0結(jié)束的字符串。若為NULL,則刪除整個(gè)節(jié)
  LPCTSTR lpString // 鍵的值,是一個(gè)以0結(jié)束的字符串。若為NULL,則刪除對(duì)應(yīng)的鍵
)

由此可見(jiàn),要?jiǎng)h除某個(gè)節(jié),只需要將WriteProfileString第二個(gè)參數(shù)設(shè)為NULL即可。而要?jiǎng)h除某個(gè)鍵,則只需要將該函數(shù)的第三個(gè)參數(shù)設(shè)為NULL即可。這是刪除系統(tǒng)的win.ini中的節(jié)或鍵,類(lèi)似的,要?jiǎng)h除自己定義的ini文件中的節(jié)或鍵,也可做相同的操作。
如:
::WriteProfileString("Test",NULL,NULL); //刪除win.ini中的Test節(jié)
::WriteProfileString("Test","id",NULL); //刪除win.ini中的id鍵

::WritePrivateProfileString("Test",NULL,NULL,".\\ex1.ini"); //刪除ex1.ini中的Test節(jié)
::WritePrivateProfileString("Test","id",NULL,".\\ex1.ini"); //刪除ex1.ini中的id鍵

四、如何判斷一個(gè)ini文件中有多少個(gè)節(jié)
要判斷一個(gè)ini文件中有多少個(gè)節(jié),最簡(jiǎn)單的辦法就是將所有的節(jié)名都找出來(lái),然后統(tǒng)計(jì)節(jié)名的個(gè)數(shù)。而要將所有的節(jié)名找出來(lái),使用GetPrivateProfileSectionNames函數(shù)就可以了,其原型如下:
DWORD GetPrivateProfileSectionNames(
  LPTSTR lpszReturnBuffer, // 指向一個(gè)緩沖區(qū),用來(lái)保存返回的所有節(jié)名
  DWORD nSize, // 參數(shù)lpszReturnBuffer的大小
  LPCTSTR lpFileName // 文件名,若該ini文件與程序在同一個(gè)目錄下,

//也可使用相對(duì)路徑,否則需要給出絕度路徑
)

下面的是用來(lái)統(tǒng)計(jì)一個(gè)ini文件中共有多少個(gè)節(jié)的函數(shù),當(dāng)然,如果需要同時(shí)找到每個(gè)節(jié)中的各個(gè)鍵及其值,根據(jù)找到節(jié)名就可以很容易的得到了。


/*統(tǒng)計(jì)共有多少個(gè)節(jié)
節(jié)名的分離方法:若chSectionNames數(shù)組的第一字符是'\0'字符,則表明
有0個(gè)節(jié)。否則,從chSectionNames數(shù)組的第一個(gè)字符開(kāi)始,順序往后找,
直到找到一個(gè)'\0'字符,若該字符的后繼字符不是 '\0'字符,則表明前
面的字符組成一個(gè)節(jié)名。若連續(xù)找到兩個(gè)'\0'字符,則統(tǒng)計(jì)結(jié)束*/


int CTestDlg::CalcCount(void)

  TCHAR chSectionNames[2048]={0}; //所有節(jié)名組成的字符數(shù)組 
  char * pSectionName; //保存找到的某個(gè)節(jié)名字符串的首地址 
  int i; //i指向數(shù)組chSectionNames的某個(gè)位置,從0開(kāi)始,順序后移 
  int j=0; //j用來(lái)保存下一個(gè)節(jié)名字符串的首地址相對(duì)于當(dāng)前i的位置偏移量
  int count=0; //統(tǒng)計(jì)節(jié)的個(gè)數(shù)

  //CString name;
  //char id[20];
  ::GetPrivateProfileSectionNames(chSectionNames,2048,".\\ex1.ini");
  for(i=0;i<2048;i++,j++)
  { 
    if(chSectionNames[0]=='\0')
      break; //如果第一個(gè)字符就是0,則說(shuō)明ini中一個(gè)節(jié)也沒(méi)有
    if(chSectionNames[i]=='\0')
    {
      pSectionName=&chSectionNames[i-j]; //找到一個(gè)0,則說(shuō)明從這個(gè)字符往前,減掉j個(gè)  偏移量,
      //就是一個(gè)節(jié)名的首地址

      j=-1; //找到一個(gè)節(jié)名后,j的值要還原,以統(tǒng)計(jì)下一個(gè)節(jié)名地址的偏移量
      //賦成-1是因?yàn)楣?jié)名字符串的最后一個(gè)字符0是終止符,不能作為節(jié)名

      //的一部分
      /*::GetPrivateProfileString(pSectionName,"id","Error",id,20,".\\ex1.ini");
      name.Format("%s",id);*/
      //在獲取節(jié)名的時(shí)候可以獲取該節(jié)中鍵的值,前提是我們知道該節(jié)中有哪些鍵。 

      AfxMessageBox(pSectionName); //把找到的顯示出來(lái)

      if(chSectionNames[i+1]==0)
      {
          break; //當(dāng)兩個(gè)相鄰的字符都是0時(shí),則所有的節(jié)名都已找到,循環(huán)終止 
      }
    }

  }

  return count;
}

本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/rbagglo/archive/2008/07/27/2719814.aspx

在我們寫(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]
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 {strTemp.Format("%d",i);
strTempA=文件名;
file://文件名可以從數(shù)組,列表框等處取得.
::WritePrivateProfileString("UseFileName","FileName"+strTemp,strTempA,
"c:\\usefile\\usefile.ini");
}
strTemp.Format("%d",nCount);
::WritePrivateProfileString("FileCount","Count",strTemp,"c:\\usefile\\usefile.ini");
file://將文件總數(shù)寫(xiě)入,以便讀出.
2.讀出:
nCount=::GetPrivateProfileInt("FileCount","Count",0,"c:\\usefile\\usefile.ini");
for(i=0;i {strTemp.Format("%d",i);
strTemp="FileName"+strTemp;
::GetPrivateProfileString("CurrentIni",strTemp,"default.fil", strTempA.GetBuffer(MAX_PATH),MAX_PATH,"c:\\usefile\\usefile.ini");
file://使用strTempA中的內(nèi)容.
}
另外要注意以下三點(diǎn):
1.INI文件的路徑必須完整,文件名前面的各級(jí)目錄必須存在,否則寫(xiě)入不成功,該函數(shù)返回 FALSE 值.
2.文件名的路徑中必須為 \\ ,因?yàn)樵赩C++中, \\ 才表示一個(gè) \ .
3.也可將INI文件放在程序所在目錄,此時(shí) lpFileName 參數(shù)為: ".\\student.ini".
posted @ 2011-05-13 13:42 wrh 閱讀(2107) | 評(píng)論 (0)編輯 收藏
僅列出標(biāo)題
共25頁(yè): 1 2 3 4 5 6 7 8 9 Last 

導(dǎo)航

<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

統(tǒng)計(jì)

常用鏈接

留言簿(19)

隨筆檔案

文章檔案

收藏夾

搜索

最新評(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>
            玖玖精品视频| 欧美激情视频给我| 国产亚洲精品福利| 国产精品一区二区三区成人| 国产精品久久福利| 国产欧美大片| 亚洲福利视频一区| 日韩午夜在线观看视频| 在线亚洲伦理| 欧美淫片网站| 欧美粗暴jizz性欧美20| 日韩西西人体444www| 亚洲香蕉在线观看| 久久久国产91| 欧美日韩专区在线| 精品999成人| 欧美在线观看一区二区三区| 久久久一区二区| 欧美高清视频www夜色资源网| 亚洲第一视频| 亚洲国产精品久久久久久女王| 99热在这里有精品免费| 亚洲欧美日韩在线播放| 欧美成人激情视频| 国产婷婷色一区二区三区四区| 亚洲人成人77777线观看| 亚洲欧美日韩中文视频| 欧美成人中文| 午夜精品久久久久久99热软件| 免费日韩成人| 国产视频亚洲| 亚洲一区久久| 欧美国产综合视频| 欧美一区亚洲一区| 欧美性淫爽ww久久久久无| 在线欧美日韩精品| 久久久久国产一区二区三区四区| 亚洲精品日韩精品| 玖玖玖免费嫩草在线影院一区| 欧美视频中文字幕在线| 亚洲黄色免费| 美女主播一区| 久久国内精品自在自线400部| 欧美网站在线观看| 99v久久综合狠狠综合久久| 六月婷婷一区| 欧美一区日韩一区| 国产伦精品一区二区三区免费| 亚洲视频在线观看网站| 亚洲激情第一页| 欧美成人高清视频| 亚洲日本一区二区| 亚洲电影在线| 欧美国产日韩视频| 亚洲美女av黄| 亚洲国产一成人久久精品| 老司机一区二区三区| 激情91久久| 久久亚洲精品一区二区| 欧美在线视频一区二区三区| 国产精品亚洲片夜色在线| 亚洲免费小视频| 亚洲永久免费精品| 国产喷白浆一区二区三区| 欧美在线精品免播放器视频| 亚洲综合色自拍一区| 国产欧美日韩专区发布| 久久久国产精品一区| 久久精品99| 亚洲国产毛片完整版| 亚洲国产成人午夜在线一区| 欧美黄色网络| 亚洲一区日韩| 午夜免费在线观看精品视频| 国产亚洲午夜| 欧美午夜激情小视频| 欧美激情网站在线观看| 久久精品国产69国产精品亚洲| 黄色日韩网站视频| 香蕉久久夜色| 亚洲夜间福利| 韩国精品久久久999| 久久综合九色九九| 免费人成精品欧美精品| 在线视频欧美日韩| 亚洲免费在线精品一区| 一区二区亚洲精品| 亚洲国产精品视频| 欧美视频中文字幕在线| 久久久蜜桃一区二区人| 欧美精品成人91久久久久久久| 亚洲色在线视频| 久久国产精品99国产精| 亚洲毛片在线观看| 亚洲欧美国产高清| 亚洲卡通欧美制服中文| 亚洲在线播放| 亚洲精品色图| 久久国产99| 亚洲欧美色一区| 免费在线亚洲欧美| 久久福利一区| 欧美日韩三级| 你懂的成人av| 国产视频在线观看一区二区| 亚洲国产成人在线| 国内精品视频在线播放| 一区二区欧美亚洲| 在线观看欧美日本| 亚洲——在线| 亚洲午夜一区二区| 欧美xart系列高清| 久久夜色精品国产亚洲aⅴ | 牛牛国产精品| 久久国产精品久久w女人spa| 欧美精品123区| 欧美成人性生活| 国产综合网站| 亚洲一区二区三区涩| 亚洲免费观看高清完整版在线观看熊| 性色av一区二区三区| 午夜精品999| 欧美性久久久| 一区二区三区蜜桃网| 99在线热播精品免费| 久热国产精品视频| 美女网站久久| 在线精品福利| 久久综合色8888| 欧美xxx成人| 亚洲国产你懂的| 嫩草国产精品入口| 欧美国产日韩一区二区在线观看| 国产曰批免费观看久久久| 午夜久久99| 久久久亚洲高清| 一区二区三区在线免费播放| 久久成人久久爱| 国产嫩草影院久久久久| 亚洲一区二区黄色| 性18欧美另类| 国产精品永久免费视频| 亚洲一区二区三区欧美| 欧美亚洲日本网站| 国产日产高清欧美一区二区三区| 亚洲一区国产| 久久久久久夜| 亚洲激情另类| 欧美日韩天堂| 亚洲综合欧美日韩| 可以免费看不卡的av网站| 在线观看成人av| 欧美精品成人一区二区在线观看| 99re这里只有精品6| 亚洲欧美日韩国产综合在线| 国产麻豆视频精品| 久久野战av| 99伊人成综合| 久久久噜噜噜久久人人看| 亚洲电影av| 欧美日韩一区在线观看视频| 亚洲欧美亚洲| 欧美激情在线有限公司| 亚洲免费小视频| 在线日本成人| 欧美三区不卡| 久久蜜桃av一区精品变态类天堂| 亚洲国产成人不卡| 欧美亚洲一区| 亚洲美女色禁图| 国产亚洲成av人片在线观看桃 | 久久美女性网| 亚洲美女精品成人在线视频| 欧美影院视频| 日韩一级精品| 国产欧美精品日韩| 欧美华人在线视频| 欧美夜福利tv在线| 亚洲精选成人| 母乳一区在线观看| 午夜电影亚洲| 99精品视频一区| 一区免费视频| 国产麻豆综合| 欧美日韩一区二区三区在线视频| 久久精品一区二区三区不卡| 99视频精品全部免费在线| 六月婷婷久久| 久久精品91久久久久久再现| 一本色道久久综合亚洲91| 国产日韩精品一区二区三区| 欧美日韩爆操| 欧美国产极速在线| 久热re这里精品视频在线6| 亚洲男女自偷自拍| 中文国产亚洲喷潮| 99riav国产精品| 亚洲精品久久视频| 亚洲电影一级黄| 欧美岛国激情|