type3软件,创建路径时提示下图,求解决,万分感谢 英文怎么说

穷游大洋洲
加拿大网签付款页面出现问题历时3小时还未解决在线求助,万分感谢!!!已搞定
加拿大网签付款页面出现问题历时3小时还未解决在线求助,万分感谢!!!已搞定
进行最后付款阶段,新问题出现,请教下付款页面除信用卡信息外,其他选项应该如何填,ADDRESS,CITY,STATE/PROVICE,ZIP CODE,COUNTRY,请问这几项应该怎么填啊?在线求助!!万分感谢 !截图如下!
--------------------------------------分割线-------------------------------------------------------------------------
在近3个小时的支付过程中,一直无法成功支付!其间换了3张VISA,MASTER的卡,分别是国内和的卡。支付不成功的提示如下:一、支付失败 failured,然后也给了个receipt。
二、没有退出系统在情况下,随即再换卡支付,提示为this order has already been finalized。
我要崩溃了,大家行行好,帮帮忙?有遇到这种情况的朋友吗?我现在要怎么办?临门一脚。。。。。
“The fee shown is an estimate based on the fees in effect on the day that this Personal Reference Code is issued.”请问个人参考代码是什么啊,是注册时自动生成的吗?到哪里查?这是导致我不能付款的原因吗?
-------------------------------------------
我是华丽丽的分割线---------------------------------------------------------------
历时近4小时的持续支付支付,终于,我成功了!!!也已经收到了系统消息和邮件。最终支付成功的卡还是之前屡试失败的三张卡之一,是张加拿大信用卡,事实证明不是卡的问题,人也没问题,填写也没问题,电脑也没以问题,浏览器更没问题,排除以上可能,我只能猜测可能是网络原因。所以,耐心是关键!
从13号下午开始弄各种资料,填表,翻译各种文件(其实除了系统要求的那些文件外,自己还加了很多辅助文件,工作证明,存款证明,营业执照,身份证,行程单等等都加在了LETTER文件里),北京时间15号18:00提交并交费完成,除去中间的动不动在某一问题上卡壳个几小时外,我觉得我的速度真的挺快的。这都得益于论坛的各位有详尽帖子在先,更有无私热心的帮助在后。谢谢大家,耐心等结果,并深深感恩!!!!
希望大家在申请过程中都能少走弯路并有好的结果。经过这一历练,以后我也将会尽努力去帮助在同样事情上有需要帮助的朋友。再次谢谢各位!!!
STATE/PROVINCE那项是选择题,但是里面没有这个选项啊
用的是VISA卡啊,还是说必须要外国的信用卡?那如果不用本人的信用卡支付可以吗?
state/province那里是不是可以选other来着...这里是州/省,不是选china.可以用国内的visa,当时收钱的速度超出了我的想象...不是本人信用卡只要你上述信息是对的一样可以付款
有个na选选项的,国内信用卡有visa master标的就行 纯银联不行
STATE/PROVINCE那项国别选了CHINA以后就有N/A选项,其他信息按照预留银行的信息翻译填写即可,只要是双币信用卡(有VISA MASTER标志)就可以完成在线付款,不限制是否本人
心里有颗星
这里要填的是不是信用卡所在地的信息啊?没有other ,只有个not application,这个行不?
可以,选这个吧.放心大胆的选,只要银行卡号码以及安全码那些是对的,付款是最容易的一步了.
心里有颗星
连接提交了几次都不成功,换了几次卡,现在信息卡信息中直接出现 invalid credit card No.哭晕在厕所,我试的这几个卡都是VISA ,MASTERD,有国内的有国外的
是4或5开头的信用卡么?
谢谢热心回复,STATE那项就是没有CHINA可选啊,信用卡都是4、5开头的,有国内卡及卡
我用的是南票的招商银行带visa标识信用卡,一次付款成功 = = 给你参考一下.你看看你有没有卡号或者后三位安全码填错了?
恭喜!成功了就好!
奔驰de小野
楼主,我跟你同样的问题,我也是选了china,然后选no applicable,但是还是要我输入adrdess city
等等信息,我都要哭了,,然后我付款失败,系统把我退出来了。。我要等到12个小时貌似才能继续登入付款。。但是我觉得这个还是个问题呀,估计还是会付款失败,求指导你这个信息是如何填的,我截图了给你看看!!谢谢谢谢!
这个其实还是要填你用来支付的那张卡的信息,State那项确实没有,还是选not applicable吧,其他项对应如实填就好。我最后是用信用卡支付的,所以直接选了BC省。我当时也被退出无数次,但是差不多十几分钟就可以重新登陆,感觉其实还是网络问题,耐心点,祝你好运。
当地游记攻略
加拿大网签付款页面出现问题历时3小时还未解决在线求助,万分感谢!!!已搞定
穷游兴趣小组
/thread-.html在type3中用“兜边命令做路径,为什么刀是逆时针走了?做图是已把图改为了顺时针啊?求各位高手指点一下。_百度知道
在type3中用“兜边命令做路径,为什么刀是逆时针走了?做图是已把图改为了顺时针啊?求各位高手指点一下。
提问者采纳
jpg" esrc="http.hiphotos.hiphotos,你再模似一下看看可以不<img class="ikqb_img" src="http,确定、退出CAM模式,点改变刀具路径.com/zhidao/pic/item/c9c93ddf8dcd00054ed,这个时候可以再改顺逆,图形上有黑色的线就是路径线,改好了://c;做好程式了://c,进入CAM模式://c,可以用编辑刀具路径./zhidao/wh%3D450%2C600/sign=6c50c660bb4eb99c77f3edf8dcd00054ed。.baidu。&nbsp.baidu,在输出时机器工作上面
提问者评价
太感谢了,真心有用
其他类似问题
为您推荐:
type3的相关知识
其他1条回答
改变图的颜色
一个像太极似的图标
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁作用:读取DC的一些打印区域信息,主要是像素和英寸方面的数据.
声明:GetDeviceCaps(int )
使用例子://所有像素数int pagecx=dc.GetDeviceCaps(HORZRES);int pagecy=dc.GetDeviceCaps(VERTRES);
//即每英寸点数short cxInch = dc.GetDeviceCaps(LOGPIXELSX);short cyInch = dc.GetDeviceCaps(LOGPIXELSY);
// 计算一个设备单位等于多少0.1mmdouble scaleX = 254.0 / (double)GetDeviceCaps(dc.m_hAttribDC,LOGPIXELSX);double scaleY = 254.0 / (double)GetDeviceCaps(dc.m_hAttribDC, LOGPIXELSY);
说明:主要用到的参数见例子中的:HORZRES,VERTRES,LOGPIXELSX,LOGPIXELSY.总的来说是为了方便控制打印或重画时的控制,如为了定制打印时,一般依据的是物理的长度,而不是像素,而DC一般是用像素的映射模式,所以需要一下转换,上面这个函数就为这种转换设计的.
GDI中有一个函数是GetDeviceCaps(),可以获取一些关于设备的一些属性,如HORZSIZE/HORZRES/LOGPIXELSX等。&&& 以上三者的关系通常满足:HORZSIZE = 25.4 * HORZRES/LOGPIXELSX&&& HORZSIZE为屏幕水平尺寸(定为度量尺寸,以mm计),HORZRES为水平的像素总数(定为像素大小,平时所说的屏幕分辨率,但在这不这么称呼。这里,分辨率定为&#8220;每英寸的像素数&#8221;),LOGPIXELSX为逻辑像素(假设的每英寸的像素数,并不是刚才所说的实际的&#8220;分辨率&#8221;)。因此HORZSIZE也称为逻辑宽度。&&& 当我们选择&#8220;显示&#8221;属性里的大字体时,LOGPIXELSX(通常分为96dpi与120dpi)变大了,这样假设原来的字体为10磅,则原来的字体横向所占像素(实际所占的像素数)为10*(1/72)*LOGPIXELSX,现在LOGPIXELSX变大了,则字体所占像素也大了,因此看起来字体大了。如果HORZRES不变的话,则HORZSIZE应该变小。然后这是和Windows有关的,在16位OS中,HORZSIZE值是固定的。&&& 在XP系统上验证了一下,发现HORZSIZE值与LOGPIXELSX的值也是不变的,如果改变HORZRES的话,则HORZSIZE会发生相应变化,但LOGPIXELSX不变,一直是96。&&& 验证数值是:当HORZRES/VERTRES分别为800/600、、时,LOGPIXELSX/LOGPIXELSY一直为96,但HORZSIZE/VERTSIZE分别为320/240、375/300、400/320。于是个人断定:LOGPIXELSX/LOGPIXELSY与所选的字体(如TrueType)有关,windows默认的字体LOGPIXELSX/LOGPIXELSY值是定的,选大字体或小字体取它们的值都是一样的,而一些字体是不同的。而HORZSIZE/VERTSIZE与系统版本有关,在有的系统中,这两个值是适合此分辨率的标准显示器的尺寸(定值,长宽比与分辨率的比一样),不是通过公式计算的,也不等于公式计算的值;而有的系统版本这两个值为公式所得的值。&&& 下边是petzold那本书上的两句(没摘英文的):&#8220;
然而,在Windows NT中,用老的方法定义HORZSIZE和VERTSIZE值。这种方法与Windows的16位版本一致。HORZRES和VERTRES值仍然表示水平和垂直图素的数值,LOGPIXELSX和LOGPIXELSY仍然与在「控制台」的「显示器」程序中选择的字体有关。在Windows 98中,LOGPIXELSX和LOGPIXELSY的典型值是96和120 dpi,这取决于您选择的是小字体还是大字体。
在Windows NT中的区别是HORZSIZE和VERTSIZE值固定表示标准显示器大小。对于普通的显示卡,取得的HORZSIZE和VERTSIZE值分别是320和240毫米。这些值是相同的,与选择的图素大小无关。因此,这些值与用HORZRES、VERTRES、LOGPIXELSX和LOGPIXELSY索引从GetDeviceCaps中得到的值不同。然而,可以用前面的公式计算在Windows 98下的HORZSIZE和VERTSIZE值。
HFONT&CreateFont( &&&&&&&&&&&&&&&& int nHeight,&&&&&&&&&&&//字体的高度&&&&&&&&&&&&&&&& int nWidth,&&&&&&&&&&&&//字体的宽度&&&&&&&&&&&&&&&& int nEscapement,&&&&&&&//字体显示的角度&&&&&&&&&&&&&&&& int nOrientation,&&&&&&//字体的角度&&&&&&&&&&&&&&&& int nWeight,&&&&&&&&&&&//字体的磅数&&&&&&&&&&&&&&&& BYTE bItalic,&&&&&&&&&&//斜体字体&&&&&&&&&&&&&&&& BYTE bUnderline,&&&&&& //带下划线的字体&&&&&&&&&&&&&&&& BYTE cStrikeOut,&&&&&& //带删除线的字体&&&&&&&&&&&&&&&& BYTE nCharSet,&&&&&&&& //所需的字符集&&&&&&&&&&&&&&&& BYTE nOutPrecision,&&& //输出的精度&&&&&&&&&&&&&&&& BYTE nClipPrecision,&& //裁减的精度 &&&&&&&&&&&&&&&& BYTE nQuality,&&&&&&&& //逻辑字体与输出设备的实际&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //字体之间的精度&&&&&&&&&&&&&&&& BYTE nPitchAndFamily,& //字体间距和字体集&&&&&&&&&&&&&&&& LPCTSTR lpszFacename&& //字体名称&&&&&&&&&&&&&& );
/************************************************************************/
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);
/************************************************************************/
&&&& 摘要: // 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...&&
一般Windows下的系统文件(夹)只让受限帐户读取而不让写入和修改。如果要开启写操作权限就需要手动修改文件(夹)的用户帐户安全权限(这操作当然要在管理员帐户下执行).以下用程序封装了一下该操作:
  先来个API版本:
  // 启用某个账户对某个文件(夹)的所有操作权限
  // pszPath: 文件(夹)路径
  // pszAccount: 账户名称
  BOOL& EnableFileAccountPrivilege (PCTSTR pszPath, PCTSTR pszAccount)
  BOOL bSuccess = TRUE;
  PACL pNewDacl = NULL, pOldDacl = NULL;
  EXPLICIT_ACCESS
  // 获取文件(夹)安全对象的DACL列表
  if (ERROR_SUCCESS != ::GetNamedSecurityInfo ((LPTSTR)pszPath, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, &pOldDacl, NULL, NULL))
  bSuccess& =& FALSE;
  // 此处不可直接用AddAccessAllowedAce函数,因为已有的DACL长度是固定,必须重新创建一个DACL对象
  // 生成指定用户帐户的访问控制信息(这里指定赋予全部的访问权限)
  ::BuildExplicitAccessWithName (&ea, (LPTSTR)pszAccount, GENERIC_ALL, GRANT_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT);
  // 创建新的ACL对象(合并已有的ACL对象和刚生成的用户帐户访问控制信息)
  if (ERROR_SUCCESS != ::SetEntriesInAcl(1, &ea, pOldDacl, &pNewDacl))
  bSuccess&& =& FALSE;
  }[next]
  // 设置文件(夹)安全对象的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 bS
  }ATL封装了安全操作函数,用ATL来写就简单多了: //
  // 启用某个账户对某个文件(夹)的所有操作权限(ATL版本)
  // pszPath: 文件(夹)路径
  // pszAccount: 账户名称
  BOOL& AtlEnableFileAccountPrivilege (PCTSTR pszPath, PCTSTR pszAccount)
  CDacl&
  CSid&&
  // 获取用户帐户标志符
  if (!sid.LoadAccount (pszAccount))
  return FALSE;
  // 获取文件(夹)的DACL
  if (!AtlGetDacl (pszPath, SE_FILE_OBJECT, &dacl))
  return FALSE;
  // 在DACL中添加新的ACE项
  dacl.AddAllowedAce (sid, GENERIC_ALL);
  // 设置文件(夹)的DACL
  return AtlSetDacl (pszPath, SE_FILE_OBJECT, dacl) ? TRUE : FALSE;
来源:\\\通过程序对文件夹的访问权限进行控制。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 & SecD 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(); __ } // & 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(); __ } // & 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(); __ } // & 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)pSidS // & 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)pSidA // & 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)pSidW // & create & a & DACL lRes & = & SetEntriesInAcl(3, & ea, & NULL, & &pDacl); if & (lRes & != & ERROR_SUCCESS) __ // & 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.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 & & 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 & & generate & message & and & exit. printf( "Failed & CreateDirectory\n "); exit(1); } // & Free & the & memory & allocated & for & the & SECURITY_DESCRIPTOR. if & (NULL & != & LocalFree(sa.lpSecurityDescriptor)) { // & Error & & 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); }
1 echo 和 @回显命令@ #关闭单行回显echo off #从下一行开始关闭回显@echo off #从本行开始关闭回显。一般批处理第一行都是这个echo on #从下一行开始打开回显echo #显示当前是 echo off 状态还是 echo on 状态echo. #输出一个&#8221;回车换行&#8221;,空白行#(同echo, echo+ echo[ echo] echo/ echo\)2 errorlevelecho %errorlevel%每个命令运行结束,可以用这个命令行格式查看返回码默认值为0,一般命令执行出错会设 errorlevel 为13 dir显示文件夹内容dir #显示当前目录中的文件和子目录dir /a #显示当前目录中的文件和子目录,包括隐藏文件和系统文件dir c: /a:d #显示 C 盘当前目录中的目录dir c: /a:-d #显示 C 盘根目录中的文件dir c:\ /b/p #/b只显示文件名,/p分页显示dir *.exe /s #显示当前目录和子目录里所有的.exe文件4 cd切换目录cd\ #进入根目录cd #显示当前目录cd /d d:\sdk #可以同时更改盘符和目录5 md创建目录md d:\a\b\c #如果 d:\a 不存在,将会自动创建中级目录D A J p(|0#如果命令扩展名被停用,则需要键入 mkdir \a\b\c。6 rd删除目录rd abc #删除当前目录里的 abc 子目录,要求为空目录rd /s/q d:\temp #删除 d:\temp 文件夹及其子文件夹和文件,/q安静模式7 del删除文件del d:\test.txt #删除指定文件,不能是隐藏、系统、只读文件del /q/a/f d:\temp\*.*删除 d:\temp 文件夹里面的所有文件,包括隐藏、只读、系统文件,不包括子目录del /q/a/f/s d:\temp\*.*删除 d:\temp 及子文件夹里面的所有文件,包括隐藏、只读、系统文件,不包括子目录8 ren重命名命令ren d:\temp tmp #支持对文件夹的重命名9 cls清屏10 type显示文件内容type c:\boot.ini #显示指定文件的内容,程序文件一般会显示乱码type *.txt #显示当前目录里所有.txt文件的内容11 copy拷贝文件copy c:\test.txt d:\test.bak复制 c:\test.txt 文件到 d:\ ,并重命名为 test.bakcopy con test.txt从屏幕上等待输入,按 Ctrl+Z 结束输入,输入内容存为test.txt文件con代表屏幕,prn代表打印机,nul代表空设备copy 1.txt + 2.txt 3.txt合并 1.txt 和 2.txt 的内容,保存为 3.txt 文件如果不指定 3.txt ,则保存到 1.txtcopy test.txt +复制文件到自己,实际上是修改了文件日期12 title设置cmd窗口的标题title 新标题 #可以看到cmd窗口的标题栏变了13 ver显示系统版本14 label 和 vol设置卷标vol #显示卷标label #显示卷标,同时提示输入新卷标label c:system #设置C盘的卷标为 system15 pause暂停命令16 rem 和 ::注释命令注释行不执行操作17 date 和 time日期和时间date #显示当前日期,并提示输入新日期,按\"回车\"略过输入date/t #只显示当前日期,不提示输入新日期time #显示当前时间,并提示输入新时间,按\"回车\"略过输入time/t #只显示当前时间,不提示输入新时间18 goto 和 :跳转命令:label #行首为:表示该行是标签行,标签行不执行操作goto label #跳转到指定的标签那一行19 find (外部命令)查找命令find \"abc\" c:\test.txt在 c:\test.txt 文件里查找含 abc 字符串的行如果找不到,将设 errorlevel 返回码为1find /i &#8220;abc&#8221; c:\test.txt查找含 abc 的行,忽略大小写find /c \"abc\" c:\test.txt显示含 abc 的行的行数20 more (外部命令)逐屏显示more c:\test.txt #逐屏显示 c:\test.txt 的文件内容21 tree显示目录结构tree d:\ #显示D盘的文件目录结构22 &顺序执行多条命令,而不管命令是否执行成功23 &&顺序执行多条命令,当碰到执行出错的命令后将不执行后面的命令find \"ok\" c:\test.txt && echo 成功如果找到了\"ok\"字样,就显示\"成功\",找不到就不显示24 ||顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令find \"ok\" c:\test.txt || echo 不成功如果找不到\"ok\"字样,就显示\"不成功\",找到了就不显示25 |管道命令dir *.* /s/a | find /c \".exe\"管道命令表示先执行 dir 命令,对其输出的结果执行后面的 find 命令该命令行结果:输出当前文件夹及所有子文件夹里的.exe文件的个数type c:\test.txt|more这个和 more c:\test.txt 的效果是一样的26 & 和 &&输出重定向命令& 清除文件中原有的内容后再写入&& 追加内容到文件末尾,而不会清除原有的内容主要将本来显示在屏幕上的内容输出到指定文件中指定文件如果不存在,则自动生成该文件type c:\test.txt &prn屏幕上不显示文件内容,转向输出到打印机echo hello world&con在屏幕上显示hello world,实际上所有输出都是默认 &con 的copy c:\test.txt f: &nul拷贝文件,并且不显示\"文件复制成功\"的提示信息,但如果f盘不存在,还是会显示出错信息copy c:\test.txt f: &nul 2&nul不显示&#8221;文件复制成功&#8221;的提示信息,并且f盘不存在的话,也不显示错误提示信息echo ^^W ^& ^W&c:\test.txt生成的文件内容为 ^W & W^ 和 & 是控制命令,要把它们输出到文件,必须在前面加个 ^ 符号27 &从文件中获得输入信息,而不是从屏幕上一般用于 date time label 等需要等待输入的命令@echo offecho &temp.txtdate &temp.txtdel temp.txt这样就可以不等待输入直接修改当前日期28 %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %*命令行传递给批处理的参数%0 批处理文件本身%1 第一个参数%9 第九个参数%* 从第一个参数开始的所有参数批参数(%n)的替代已被增强。您可以使用以下语法:%~1 - 删除引号(\"),扩充 %1%~f1 - 将 %1 扩充到一个完全合格的路径名%~d1 - 仅将 %1 扩充到一个驱动器号%~p1 - 仅将 %1 扩充到一个路径%~n1 - 仅将 %1 扩充到一个文件名%~x1 - 仅将 %1 扩充到一个文件扩展名%~s1 - 扩充的路径指含有短名%~a1 - 将 %1 扩充到文件属性%~t1 - 将 %1 扩充到文件的日期/时间%~z1 - 将 %1 扩充到文件的大小%~$PATH : 1 - 查找列在 PATH 环境变量的目录,并将 %1扩充到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩充到空字符串可以组合修定符来取得多重结果:%~dp1 - 只将 %1 扩展到驱动器号和路径%~nx1 - 只将 %1 扩展到文件名和扩展名%~dp$PATH:1 - 在列在 PATH 环境变量中的目录里查找 %1,并扩展到找到的第一个文件的驱动器号和路径。%~ftza1 - 将 %1 扩展到类似 DIR 的输出行。可以参照 call/? 或 for/? 看出每个参数的含意echo load \"%%1\" \"%%2\"&c:\test.txt生成的文件内容为 load \"%1\" \"%2\"批处理文件里,用这个格式把命令行参数输出到文件29 if判断命令if \"%1\"==\"/a\" echo 第一个参数是/aif /i \"%1\" equ \"/a\" echo 第一个参数是/a/i 表示不区分大小写,equ 和 == 是一样的,其它运算符参见 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设置&#8221;命令扩展名&#8221;和&#8221;延缓环境变量扩充&#8221;SETLOCAL ENABLEEXTENSIONS #启用\"命令扩展名\"SETLOCAL DISABLEEXTENSIONS #停用\"命令扩展名\"SETLOCAL ENABLEDELAYEDEXPANSION #启用\"延缓环境变量扩充\"SETLOCAL DISABLEDELAYEDEXPANSION #停用\"延缓环境变量扩充\"ENDLOCAL #恢复到使用SETLOCAL语句以前的状态&#8220;命令扩展名&#8221;默认为启用&#8220;延缓环境变量扩充&#8221;默认为停用批处理结束系统会自动恢复默认值可以修改注册表以禁用\"命令扩展名\",详见 cmd /? 。所以用到\"命令扩展名\"的程序,建议在开头和结尾加上 SETLOCAL ENABLEEXTENSIONS 和 ENDLOCAL 语句,以确保程序能在其它系统上正确运行&#8220;延缓环境变量扩充\&#8221;主要用于 if 和 for 的符合语句,在 set 的说明里有其实用例程31 set设置变量引用变量可在变量名前后加 % ,即 %变量名%set #显示目前所有可用的变量,包括系统变量和自定义的变量echo %SystemDrive% #显示系统盘盘符。系统变量可以直接引用set p #显示所有以p开头的变量,要是一个也没有就设errorlevel=1set p=aa1bb1aa2bb2 #设置变量p,并赋值为 = 后面的字符串,即aa1bb1aa2bb2echo %p% #显示变量p代表的字符串,即aa1bb1aa2bb2echo %p:~6% #显示变量p中第6个字符以后的所有字符,即aa2bb2echo %p:~6,3% #显示第6个字符以后的3个字符,即aa2echo %p:~0,3% #显示前3个字符,即aa1echo %p:~-2% #显示最后面的2个字符,即b2echo %p:~0,-2% #显示除了最后2个字符以外的其它字符,即aa1bb1aa2becho %p:aa=c% #用c替换变量p中所有的aa,即显示c1bb1c2bb2echo %p:aa=% #将变量p中的所有aa字符串置换为空,即显示1bb12bb2echo %p:*bb=c% #第一个bb及其之前的所有字符被替换为c,即显示c1aa2bb2set p=%p:*bb=c% #设置变量p,赋值为 %p:*bb=c% ,即c1aa2bb2set /a p=39 #设置p为数值型变量,值为39set /a p=39/10 #支持运算符,有小数时用去尾法,39/10=3.9,去尾得3,p=3set /a p=p/10 #用 /a 参数时,在 = 后面的变量可以不加%直接引用set /a p=&#&#8243; #&#8221;与&#8221;运算,要加引号。其它支持的运算符参见set/?set p= #取消p变量set /p p=请输入屏幕上显示&#8221;请输入&#8221;,并会将输入的字符串赋值给变量p注意这条可以用来取代 choice 命令注意变量在 if 和 for 的复合语句里是一次性全部替换的,如@echo offset p=aaaif %p%==aaa (echo %p%set p=bbbecho %p%)结果将显示aaaaaa因为在读取 if 语句时已经将所有 %p% 替换为aaa这里的\"替换\",在 /? 帮助里就是指\"扩充\"、\"环境变量扩充\"可以启用&#8221;延缓环境变量扩充&#8221;,用 ! 来引用变量,即 !变量名!@echo offSETLOCAL ENABLEDELAYEDEXPANSIONset p=aaaif %p%==aaa (echo %p%set p=bbbecho !p!)ENDLOCAL结果将显示aaabbb还有几个动态变量,运行 set 看不到%CD% #代表当前目录的字符串%DATE% #当前日期%TIME% #当前时间%RANDOM% #随机整数,介于0~32767%ERRORLEVEL% #当前 ERRORLEVEL 值%CMDEXTVERSION% #当前命令处理器扩展名版本号%CMDCMDLINE% #调用命令处理器的原始命令行可以用echo命令查看每个变量值,如 echo %time%注意 %time% 精确到毫秒,在批处理需要延时处理时可以用到32 start批处理中调用外部程序的命令,否则等外部程序完成后才继续执行剩下的指令33 call批处理中调用另外一个批处理的命令,否则剩下的批处理指令将不会被执行有时有的应用程序用start调用出错的,也可以call调用34 choice (外部命令)选择命令让用户输入一个字符,从而选择运行不同的命令,返回码errorlevel为;&#8230;win98里是win2000pro里没有,可以从win98里拷过来win2003里是choice.exechoice /N /C y /T 5 /D y&nul延时5秒35 assoc 和 ftype文件关联assoc 设置'文件扩展名'关联,关联到'文件类型'ftype 设置'文件类型'关联,关联到'执行程序和参数'当你双击一个.txt文件时,[url=file::;]windows[/url]并不是根据.txt直接判断用 notepad.exe 打开而是先判断.txt属于 txtfile '文件类型'再调用 txtfile 关联的命令行 txtfile=%SystemRoot%\system32\NOTEPAD.EXE %1可以在\"文件夹选项\"&#8594;\"文件类型\"里修改这2种关联assoc #显示所有'文件扩展名'关联assoc .txt #显示.txt代表的'文件类型',结果显示 .txt=txtfileassoc .doc #显示.doc代表的'文件类型',结果显示 .doc=Word.Document.8assoc .exe #显示.exe代表的'文件类型',结果显示 .exe=exefileftype #显示所有'文件类型'关联ftype exefile #显示exefile类型关联的命令行,结果显示 exefile=\"%1\" %* assoc .txt=Word.Document.8设置.txt为word类型的文档,可以看到.txt文件的图标都变了assoc .txt=txtfile恢复.txt的正确关联ftype exefile=\"%1\" %*恢复 exefile 的正确关联如果该关联已经被破坏,可以运行
,再输入这条命令
36 pushd 和 popd切换当前目录@echo offc: & cd\ & md mp3 #在 C:\ 建立 mp3 文件夹md d:\mp4 #在 D:\ 建立 mp4 文件夹cd /d d:\mp4 #更改当前目录为 d:\mp4pushd c:\mp3 #保存当前目录,并切换当前目录为 c:\mp3popd #恢复当前目录为刚才保存的 d:\mp4
37 for循环命令这个比较复杂,请对照 for/? 来看for %%i in (c: d: e: f:) do echo %%i依次调用小括号里的每个字符串,执行 do 后面的命令注意%%i,在批处理中 for 语句调用参数用2个%默认的字符串分隔符是\"空格键\",\"Tab键\",\"回车键\"for %%i in (*.txt) do find \"abc\" %%i对当前目录里所有的txt文件执行 find 命令for /r . %%i in (*.txt) do find \"abc\" %%i在当前目录和子目录里所有的.txt文件中搜索包含 abc 字符串的行for /r . %%i in (.) do echo %%~pni显示当前目录名和所有子目录名,包括路径,不包括盘符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的一串数字,2是数字序列的开头,8是结尾,1表示每次加1for /f %%i in ('set') do echo %%i对 set 命令的输出结果循环调用,每行一个for /f \"eol=P\" %%i in ('set') do echo %%i取 set 命令的输出结果,忽略以 P 开头的那几行for /f %%i in (d:\mp3.txt) do echo %%i显示 d:\mp3.txt 里的每个文件名,每行一个,不支持带空格的名称for /f \"delims=\" %%i in (d:\mp3.txt) do echo %%i显示 d:\mp3.txt 里的每个文件名,每行一个,支持带空格的名称for /f \"skip=5 tokens=4\" %%a in ('dir') do echo %%a对 dir 命令的结果,跳过前面5行,余下的每行取第4列每列之间的分隔符为默认的\"空格\"可以注意到 dir 命令输出的前5行是没有文件名的for /f \"tokens=1,2,3 delims=- \" %%a in ('date /t') do (echo %%aecho %%becho %%c)对 date /t 的输出结果,每行取1、2、3列第一列对应指定的 %%a ,后面的 %%b 和 %%c 是派生出来的,对应其它列分隔符指定为 - 和\"空格\",注意 delims=- 后面有个\"空格\"其中 tokens=1,2,3 若用 tokens=1-3 替换,效果是一样的for /f \"tokens=2* delims=- \" %%a in ('date /t') do echo %%b取第2列给 %%a ,其后的列都给 %%b
38 subst (外部命令)映射磁盘。subst z: \server\d #这样输入z:就可以访问\server\d了subst z: /d #取消该映射subst #显示目前所有的映时
39 xcopy (外部命令)文件拷贝xcopy d:\mp3 e:\mp3 /s/e/i/y复制 d:\mp3 文件夹、所有子文件夹和文件到 e:\ ,覆盖已有文件加 /i 表示如果 e:\ 没有 mp3 文件夹就自动新建一个,否则会有询问
3、if结合errorlevel使用: 说明:环境变量errorlevel的初始值为0,当一些命令执行不成功,就会返回一个数值,如:1 ,2 等 IF-ERRORLEVEL 测试代码: 复制代码 代码如下:@ECHO OFF XCOPY F:\test.bat D:\ IF ERRORLEVEL 1 ECHO 文件拷贝失败 IF ERRORLEVEL 0 ECHO 成功拷贝文件
如果文件拷贝成功,屏幕就会显示&#8220;成功拷贝文件&#8221;,否则就会显示&#8220;文件拷贝失败&#8221;。 IF ERRORLEVEL 是用来测试它的上一个DOS命令的返回值的,注意只是上一个命令的返回值,而且返回值必须依照从大到小次序顺序判断。 因此下面的批处理文件是错误的: @ECHO OFF XCOPY C:\AUTOEXEC.BAT D:\ IF ERRORLEVEL 0 ECHO 成功拷贝文件 IF ERRORLEVEL 1 ECHO 未找到拷贝文件 IF ERRORLEVEL 2 ECHO 用户通过ctrl-c中止拷贝操作 IF ERRORLEVEL 3 ECHO 预置错误阻止文件拷贝操作 IF ERRORLEVEL 4 ECHO 拷贝过程中写盘错误 无论拷贝是否成功,后面的: 未找到拷贝文件 用户通过ctrl-c中止拷贝操作 预置错误阻止文件拷贝操作 拷贝过程中写盘错误 都将显示出来。 复制代码 代码如下:附录: 以下就是几个常用命令的返回值及其代表的意义: backup 0 备份成功 1 未找到备份文件 2 文件共享冲突阻止备份完成 3 用户用ctrl-c中止备份 4 由于致命的错误使备份操作中止 diskcomp 0 盘比较相同 1 盘比较不同 2 用户通过ctrl-c中止比较操作 3 由于致命的错误使比较操作中止 4 预置错误中止比较 diskcopy 0 盘拷贝操作成功 1 非致命盘读/写错 2 用户通过ctrl-c结束拷贝操作 3 因致命的处理错误使盘拷贝中止 4 预置错误阻止拷贝操作 format 0 格式化成功 3 用户通过ctrl-c中止格式化处理 4 因致命的处理错误使格式化中止 5 在提示&#8220;proceed with format(y/n)?&#8221;下用户键入n结束 xcopy 0 成功拷贝文件 1 未找到拷贝文件 2 用户通过ctrl-c中止拷贝操作 4 预置错误阻止文件拷贝操作 5 拷贝过程中写盘错误
4、if还有一个特殊的用法就是可以用来检测某个变量是否已经被定义 用法示例: 复制代码 代码如下:@echo off set "str1=ok" set "str2=no" if defined str1 echo str1已经被定义 if defined str2 echo str2已经被定义 if defined str3 (echo str3已经被定义) else echo str3 没有被定义 pause&nul
if 命令示例详解
if,正如它E文中的意思,就是&#8220;如果&#8221;的意思,用来进行条件判断。翻译过来的意思就是:如果符合某一条件,便执行后面的命令。 主要用来判断,1、两个&#8220;字符串&#8221;是否相等;2、两个数值是大于、小于、等于,然后执行相应的命令。 当然还有特殊用法,如结合errorlevel:if errorlevel 1 echo error 或者结合defined(定义的意思):if defined test (echo It is defined) else echo It isn't defined
用法示例: 1、检测字符串(注意,用if检测字符串是否相等的时候,后面用的不是&#8220;=&#8221;,而是&#8220;==&#8221;): 复制代码 代码如下:@echo off set "str=this is a test" REM 检测变量%str%是否等于test,如果相等,显示OK,否则显示NO if "%str%"=="test" (echo OK) else echo NO pause&nul
2、检测数值:(注意,批处理中大于符号不能用:&#8220;&&#8221;,而用"gtr",其它的也类似) 比较运算符一览: EQU - 等于 NEQ - 不等于 LSS - 小于 LEQ - 小于或等于 GTR - 大于 GEQ - 大于或等于 检测数值 20 是否大于 15演示代码: 复制代码 代码如下:@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
在VC工程中添加多个RC文件
rc2里面的格式跟普通的rc是一样的文本格式,直接手工修改,也可以用VS打开修改.
有时需要把VC_Project2工程的资源合到VC_Project1工程的资源中(*.rc文件), 通常的做法就是用文本的方式打开VC_Project2.rc和VC_Project1.rc然后人工的判断拷贝粘贴了。
其实我们可以直接把VC_Project2.rc文件添加到VC_Project1工程中, 但此时编译可能会报下面错误
1&CVTRES : fatal error CVT1100: 重复的资源。type:VERSION, name:1, language:0x0804
1&LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
这个错误的意思就是资源定义重复了,其实重复也很正常,因为在创建VC_Project1和VC_Project2两个工程时,很多代码都是VC自动生成的,通常这些自动生成的代码就是产生这个错误的原因了。
解决办法就是把其中一个(那肯定是后来添加进来的那一个了)(这里是VC_Project2.rc)rc文件中与工程本身的rc(这里是VC_Project1.rc)文件相同的部分删掉即可。
还要注意的是移了VC_Project2.rc文件过来, 必须要把VC_Project2工程中对应的cpp和h文件还有最重要的一个是VC_Project2工程的resource.h文件也要移到VC_Project1工程中。
具体步骤如下:
1. 分别创建了TryRC和TryRC2的基于对话框的VC工程。
并在TryRC2工程中添加了对话框 ID是IDC_DIALOG1, IDC_DIALOG1中添加了一个按钮IDC_BUTTON1, IDC_DIALOG1绑定到CDlgR类中,两个文件分别是DlgR.cpp和DlgR.h
2. 看对比TryRC.rc和TryRC2.rc文件的内容
TryRC.rc(TryRC2.rc和TryRC.rc内容基本一致,只是多了一个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
/////////////////////////////////////////////////////////////////////////////
// 中文(中华人民共和国) 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
&&& "resource.h\0"
2 TEXTINCLUDE
&&& "#include ""afxres.h""\r\n"
3 TEXTINCLUDE
&&& "#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""&&&& // 标准组件\r\n"
&&& "#endif\r\n"
#endif&&& // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDR_MAINFRAME&&&&&&&&&& ICON&&&&&&&&&&&&&&&&&&& "res\\TryRC.ico"
/////////////////////////////////////////////////////////////////////////////
IDD_ABOUTBOX DIALOGEX 0, 0, 235, 55
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "关于TryRC"
FONT 9, "宋体", 0, 0, 0x1
&&& 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
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
&&& DEFPUSHBUTTON&& "确定",IDOK,263,7,50,16
&&& PUSHBUTTON&&&&& "取消",IDCANCEL,263,25,50,16
&&& CTEXT&&&&&&&&&& "TODO: 在此放置对话框控件。",IDC_STATIC,10,96,300,8
&&& PUSHBUTTON&&&&& "Button1",IDC_BUTTON1,7,7,50,14
/////////////////////////////////////////////////////////////////////////////
// Version
VS_VERSION_INFO VERSIONINFO
&FILEVERSION 1,0,0,1
&PRODUCTVERSION 1,0,0,1
&FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
&FILEFLAGS 0x1L
&FILEFLAGS 0x0L
&FILEOS 0x4L
&FILETYPE 0x1L
&FILESUBTYPE 0x0L
&&& BLOCK "StringFileInfo"
&&&&&&& BLOCK ""
&&&&&&& BEGIN
&&&&&&&&&&& VALUE "CompanyName", "TODO: &公司名&"
&&&&&&&&&&& VALUE "FileDescription", "TODO: &文件说明&"
&&&&&&&&&&& VALUE "FileVersion", "1.0.0.1"
&&&&&&&&&&& VALUE "InternalName", "TryRC.exe"
&&&&&&&&&&& VALUE "LegalCopyright", "TODO: (C) &公司名&。保留所有权利。"
&&&&&&&&&&& VALUE "OriginalFilename", "TryRC.exe"
&&&&&&&&&&& VALUE "ProductName", "TODO: &产品名&"
&&&&&&&&&&& VALUE "ProductVersion", "1.0.0.1"
&&&&&&& END
&&& BLOCK "VarFileInfo"
&&&&&&& VALUE "Translation", 0x804, 936
/////////////////////////////////////////////////////////////////////////////
// DESIGNINFO
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
&&& IDD_ABOUTBOX, DIALOG
&&&&&&& LEFTMARGIN, 7
&&&&&&& RIGHTMARGIN, 228
&&&&&&& TOPMARGIN, 7
&&&&&&& BOTTOMMARGIN, 48
&&& IDD_TRYRC_DIALOG, DIALOG
&&&&&&& LEFTMARGIN, 7
&&&&&&& RIGHTMARGIN, 313
&&&&&&& TOPMARGIN, 7
&&&&&&& BOTTOMMARGIN, 193
#endif&&& // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
// String Table
STRINGTABLE
&&& IDS_ABOUTBOX&&&&&&&&&&& "关于TryRC(&A)..."
#endif&&& // 中文(中华人民共和国) 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"&&&& // 标准组件
/////////////////////////////////////////////////////////////////////////////
#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(如果不把他们放在同一个目录应该就不用改名了)
4. 此时编译就会报上面说到的错误了。
所以在这里就要修改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
/////////////////////////////////////////////////////////////////////////////
// 中文(中华人民共和国) 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
&&& "resource1.h\0"&&&&&&&&&&&&&&&&& // 看这里,修改了
2 TEXTINCLUDE
&&& "#include ""afxres.h""\r\n"
3 TEXTINCLUDE
&&&& //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
&&&& //++这些部分不注释掉没编译错误,注释掉也没有编译错误
&&& "#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""&&&& // 标准组件\r\n"
&&& "#endif\r\n"
&&&&&&&& "\r\n"
&&&& //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
#endif&&& // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
//-IDR_MAINFRAME&&&&&&&&&& ICON&&&&&&&&&&&&&&&&&&& "res\\TryRC2.ico"
/////////////////////////////////////////////////////////////////////////////
//-------------------------------------------------------------------------//
//-----About对话框, 这些就是与TryRC.rc重复的了---------------------------//
//IDD_ABOUTBOX DIALOGEX 0, 0, 235, 55
//STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
//CAPTION "关于TryRC2"
//FONT 9, "宋体", 0, 0, 0x1
//&&& 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
//-------------------------------------------------------------------------//
//-----这个是TryRC2工程的主对话框,不包进来--------------------------------//
//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
//&&& DEFPUSHBUTTON&& "确定",IDOK,263,7,50,16
//&&& PUSHBUTTON&&&&& "取消",IDCANCEL,263,25,50,16
//&&& CTEXT&&&&&&&&&& "TODO: 在此放置对话框控件。",IDC_STATIC,10,96,300,8
//----------------------------------------------------------------------------//
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
&&& DEFPUSHBUTTON&& "确定",IDOK,61,121,50,14
&&& PUSHBUTTON&&&&& "取消",IDCANCEL,197,121,50,14
&&& PUSHBUTTON&&&&& "Button1",IDC_BUTTON1,39,46,50,14
/////////////////////////////////////////////////////////////////////////////
// Version
//-------------------------------------------------------------------------//
//----删掉删掉删掉------------------------------------------------//
//VS_VERSION_INFO VERSIONINFO
// FILEVERSION 1,0,0,1
// PRODUCTVERSION 1,0,0,1
// FILEFLAGSMASK 0x3fL
//#ifdef _DEBUG
// FILEFLAGS 0x1L
// FILEFLAGS 0x0L
// FILEOS 0x4L
// FILETYPE 0x1L
// FILESUBTYPE 0x0L
//&&& BLOCK "StringFileInfo"
//&&& BEGIN
//&&&&&&& BLOCK ""
//&&&&&&& BEGIN
//&&&&&&&&&&& VALUE "CompanyName", "TODO: &公司名&"
//&&&&&&&&&&& VALUE "FileDescription", "TODO: &文件说明&"
//&&&&&&&&&&& VALUE "FileVersion", "1.0.0.1"
//&&&&&&&&&&& VALUE "InternalName", "TryRC2.exe"
//&&&&&&&&&&& VALUE "LegalCopyright", "TODO: (C) &公司名&。保留所有权利。"
//&&&&&&&&&&& VALUE "OriginalFilename", "TryRC2.exe"
//&&&&&&&&&&& VALUE "ProductName", "TODO: &产品名&"
//&&&&&&&&&&& VALUE "ProductVersion", "1.0.0.1"
//&&&&&&& END
//&&& BLOCK "VarFileInfo"
//&&& BEGIN
//&&&&&&& VALUE "Translation", 0x804, 936
//-------------------------------------------------------------------------//
/////////////////////////////////////////////////////////////////////////////
// DESIGNINFO
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
&&&& //------------------------------------------------------------//
&&&& //-----------------删掉删掉删掉------------------------------//
//IDD_ABOUTBOX, DIALOG
&&& //BEGIN
&&& //&&& LEFTMARGIN, 7
&&& //&&& RIGHTMARGIN, 228
&&& //&&& TOPMARGIN, 7
&&& //&&& BOTTOMMARGIN, 48
&&& //IDD_TRYRC2_DIALOG, DIALOG
&&& //BEGIN
&&& //&&& LEFTMARGIN, 7
&&& //&&& RIGHTMARGIN, 313
&&& //&&& TOPMARGIN, 7
&&& //&&& BOTTOMMARGIN, 193
&&&& //------------------------------------------------------------//
&&& IDD_DIALOG1, DIALOG
&&&&&&& LEFTMARGIN, 7
&&&&&&& RIGHTMARGIN, 306
&&&&&&& TOPMARGIN, 7
&&&&&&& BOTTOMMARGIN, 135
#endif&&& // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
// String Table
//STRINGTABLE
&//&& IDS_ABOUTBOX&&&&&&&&&&& "关于TryRC2(&A)..."
#endif&&& // 中文(中华人民共和国) 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\TryRC2.rc2"& // 非Microsoft Visual C++ 编辑的资源
//#include "afxres.rc"&&&& // 标准组件
// 这里有一个TryRC2.rc2暂时不清楚它有什么用
//--------------------------------------------------------------------------//
/////////////////////////////////////////////////////////////////////////////
#endif&&& // not APSTUDIO_INVOKED
5. 在DlgR.h中添加该语句 #include "resource1.h"
这样子包含不是很好,一修改resource1.h就要编译DlgR.h和DlgR.cpp了
暂时没有解决办法。
6. 总结:其实这样子添加多个RC文件到工程的修改和拷贝粘贴RC文件差不多, 只是在工程的结构上比较明了一点,感觉也是比拷贝粘贴RC文件好。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cay22/archive//5625951.aspx
(注:%0就是该batch文件的文件名 )
这句的意思是 更改当前目录为批处理本身的目录 有些晕吧?不急,我举例 比如你有个批处理a.bat在D:\qq文件夹下& a.bat内容为 cd /d %~dp0 在这里 cd /d %~dp0的意思就是cd /d d:\qq %0代表批处理本身 d:\qq\a.bat ~dp是变量扩充 d既是扩充到分区号 d: p就是扩充到路径 \qq dp就是扩充到分区号路径 d:\qq
扩充变量语法详解:
:: 选项语法: :: ~I - 删除任何引号("),扩充 %I :: %~fI - 将 %I 扩充到一个完全合格的路径名 :: %~dI - 仅将 %I 扩充到一个驱动器号 :: %~pI - 仅将 %I 扩充到一个路径 :: %~nI - 仅将 %I 扩充到一个文件名 :: %~xI - 仅将 %I 扩充到一个文件扩展名 :: %~sI - 扩充的路径只含有短名 :: %~aI - 将 %I 扩充到文件的文件属性 :: %~tI - 将 %I 扩充到文件的日期/时间 :: %~zI - 将 %I 扩充到文件的大小 :: %~$PATH:I - 查找列在路径环境变量的目录,并将 %I 扩充 :: 到找到的第一个完全合格的名称。如果环境变量名 :: 未被定义,或者没有找到文件,此组合键会扩充到 :: 空字符串 :: 可以组合修饰符来得到多重结果: :: %~dpI - 仅将 %I 扩充到一个驱动器号和路径 :: %~nxI - 仅将 %I 扩充到一个文件名和扩展名 :: %~fsI - 仅将 %I 扩充到一个带有短名的完整路径名 :: %~dp$PATH:i - 查找列在路径环境变量的目录,并将 %I 扩充 :: 到找到的第一个驱动器号和路径。 :: %~ftzaI - 将 %I 扩充到类似输出线路的 DIR
本文来自CSDN博客,转载请标明出处:
0&& 操作成功完成。1&& 功能错误。2&& 系统找不到指定的文件。3&& 系统找不到指定的路径。4&& 系统无法打开文件。5&& 拒绝访问。6&& 句柄无效。7&& 存储控制块被损坏。8&& 存储空间不足,无法处理此命令。9&& 存储控制块地址无效。10&& 环境错误。11&& 试图加载格式错误的程序。12&& 访问码无效。13&& 数据无效。14&& 存储器不足,无法完成此操作。15&& 系统找不到指定的驱动器。16&& 无法删除目录。17&& 系统无法将文件移到不同的驱动器。18&& 没有更多文件。19&& 介质受写入保护。20&& 系统找不到指定的设备。21&& 设备未就绪。22&& 设备不识别此命令。23&& 数据错误 (循环冗余检查)。24&& 程序发出命令,但命令长度不正确。25&& 驱动器无法找出磁盘上特定区域或磁道的位置。26&& 无法访问指定的磁盘或软盘。27&& 驱动器找不到请求的扇区。28&& 打印机缺纸。29&& 系统无法写入指定的设备。30&& 系统无法从指定的设备上读取。31&& 连到系统上的设备没有发挥作用。32&& 进程无法访问文件,因为另一个程序正在使用此文件。33&& 进程无法访问文件,因为另一个程序已锁定文件的一部分。36&& 用来共享的打开文件过多。38&& 到达文件结尾。39&& 磁盘已满。50&& 不支持网络请求。51&& 远程计算机不可用 。52&& 在网络上已有重复的名称。53&& 找不到网络路径。54&& 网络忙。55&& 指定的网络资源或设备不再可用。56&& 已到达网络 BIOS 命令限制。57&& 网络适配器硬件出错。58&& 指定的服务器无法运行请求的操作。59&& 发生意外的网络错误。60&& 远程适配器不兼容。61&& 打印机队列已满。62&& 无法在服务器上获得用于保存待打印文件的空间。63&& 删除等候打印的文件。64&& 指定的网络名不再可用。65&& 拒绝网络访问。66&& 网络资源类型错误。67&& 找不到网络名。68&& 超过本地计算机网卡的名称限制。69&& 超出网络 BIOS 会话限制。70&& 远程服务器已暂停,或正在启动过程中。71&& 当前已无法再同此远程计算机连接,因为已达到计算机的连接数目极限。72&& 已暂停指定的打印机或磁盘设备。80&& 文件存在。82&& 无法创建目录或文件。83&& INT 24 失败。84&& 无法取得处理此请求的存储空间。85&& 本地设备名已在使用中。86&& 指定的网络密码错误。87&& 参数错误。88&& 网络上发生写入错误。89&& 系统无法在此时启动另一个进程。100&& 无法创建另一个系统信号灯。101&& 另一个进程拥有独占的信号灯。102&& 已设置信号灯且无法关闭。103&& 无法再设置信号灯。104&& 无法在中断时请求独占的信号灯。105&& 此信号灯的前一个所有权已结束。107&& 程序停止,因为替代的软盘未插入。108&& 磁盘在使用中,或被另一个进程锁定。109&& 管道已结束。110&& 系统无法打开指定的设备或文件。111&& 文件名太长。112&& 磁盘空间不足。113&& 无法再获得内部文件的标识。114&& 目标内部文件的标识不正确。117&& 应用程序制作的 IOCTL 调用错误。118&& 验证写入的切换参数值错误。119&& 系统不支持请求的命令。120&& 此功能只被此系统支持。121&& 信号灯超时时间已到。122&& 传递到系统调用的数据区太小。123&& 文件名、目录名或卷标语法不正确。124&& 系统调用级别错误。125&& 磁盘没有卷标。126&& 找不到指定的模块。127&& 找不到指定的程序。128&& 没有等候的子进程。130&& 试图使用操作(而非原始磁盘 I/O)的已打开磁盘分区的文件句柄。131&& 试图移动文件指针到文件开头之前。132&& 无法在指定的设备或文件上设置文件指针。133&& 包含先前加入驱动器的驱动器无法使用 JOIN 或 SUBST 命令。134&& 试图在已被合并的驱动器上使用 JOIN 或 SUBST 命令。135&& 试图在已被合并的驱动器上使用 JOIN 或 SUBST 命令。136&& 系统试图解除未合并驱动器的 JOIN。137&& 系统试图解除未替代驱动器的 SUBST。138&& 系统试图将驱动器合并到合并驱动器上的目录。139&& 系统试图将驱动器替代为替代驱动器上的目录。140&& 系统试图将驱动器合并到替代驱动器上的目录。141&& 系统试图替代驱动器为合并驱动器上的目录。142&& 系统无法在此时运行 JOIN 或 SUBST。143&& 系统无法将驱动器合并到或替代为相同驱动器上的目录。144&& 目录并非根目录下的子目录。145&& 目录非空。146&& 指定的路径已在替代中使用。147&& 资源不足,无法处理此命令。148&& 指定的路径无法在此时使用。149&& 企图将驱动器合并或替代为驱动器上目录是上一个替代的目标的驱动器。150&& 系统跟踪信息未在 CONFIG.SYS 文件中指定,或不允许跟踪。151&& 为 DosMuxSemWait 指定的信号灯事件个数错误。152&& DosMuxSemWait 不可运行。已设置过多的信号灯。153&& DosMuxSemWait 清单错误。154&& 输入的卷标超过目标文件系统的长度限制155&& 无法创建另一个线程。156&& 接收进程已拒绝此信号。157&& 段已被放弃且无法锁定。158&& 段已解除锁定。159&& 线程标识的地址错误。160&& 传递到 DosExecPgm 的参数字符串错误。161&& 指定的路径无效。162&& 信号已暂停。164&& 无法在系统中创建更多的线程。167&& 无法锁定文件区域。170&& 请求的资源在使用中。173&& 对于提供取消区域进行锁定的请求不明显。174&& 文件系统不支持锁定类型的最小单元更改。180&& 系统检测出错误的段号。183&& 当文件已存在时,无法创建该文件。186&& 传递的标志错误。187&& 找不到指定的系统信号灯名称。196&& 操作系统无法运行此应用程序。197&& 操作系统当前的配置不能运行此应用程序。199&& 操作系统无法运行此应用程序。200&& 代码段不可大于或等于 64K。203&& 操作系统找不到已输入的环境选项。205&& 命令子树中的进程没有信号处理程序。206&& 文件名或扩展名太长。207&& 第 2 环堆栈已被占用。208&& 没有正确输入文件名通配符 * 或 ?,或指定过多的文件名通配符。209&& 正在发送的信号错误。210&& 无法设置信号处理程序。212&& 段已锁定且无法重新分配。214&& 连到该程序或动态链接模块的动态链接模块太多。215&& 无法嵌套调用 LoadModule。230&& 管道状态无效。231&& 所有的管道实例都在使用中。232&& 管道正在关闭中。233&& 管道的另一端上无任何进程。234&& 更多数据可用。240&& 取消会话。254&& 指定的扩展属性名无效。255&& 扩展属性不一致。258&& 等待的操作过时。259&& 没有可用的数据了。266&& 无法使用复制功能。267&& 目录名无效。275&& 扩展属性在缓冲区中不适用。276&& 装在文件系统上的扩展属性文件已损坏。277&& 扩展属性表格文件已满。278&& 指定的扩展属性句柄无效。282&& 装入的文件系统不支持扩展属性。288&& 企图释放并非呼叫方所拥有的多用户终端运行程序。298&& 发向信号灯的请求过多。299&& 仅完成部分的 ReadProcessMemoty 或 WriteProcessMemory 请求。300&& 操作锁定请求被拒绝。301&& 系统接收了一个无效的操作锁定确认。487&& 试图访问无效的地址。534&& 算术结果超过 32 位。535&& 管道的另一端有一进程。536&& 等候打开管道另一端的进程。994&& 拒绝访问扩展属性。
ini文件(即Initialization file),这种类型的文件中通常存放的是一个程序的初始化信息。ini文件由若干个节(Section)组成,每个Section由若干键(Key)组成,每个Key可以赋相应的值。读写ini文件实际上就是读写某个的Section中相应的Key的值,而这只要借助几个函数即可完成。 一、向ini文件中写入信息的函数 1. 把信息写入系统的win.ini文件 BOOL WriteProfileString( & LPCTSTR lpAppName, // 节的名字,是一个以0结束的字符串 & LPCTSTR lpKeyName, // 键的名字,是一个以0结束的字符串。若为NULL,则删除整个节 & LPCTSTR lpString // 键的值,是一个以0结束的字符串。若为NULL,则删除对应的键 )
2. 把信息写入自己定义的.ini文件 BOOL WritePrivateProfileString( & LPCTSTR lpAppName, // 同上 & LPCTSTR lpKeyName, // 同上 & LPCTSTR lpString, // 同上 & LPCTSTR lpFileName // 要写入的文件的文件名。若该ini文件与程序在同一个目录下,也可使用相对路径,否则需要给出绝度路径。 )
如: ::WriteProfileString("Test","id","xym"); //在win.ini中创建一个Test节,并在该节中创建一个键id,其值为xym
::WritePrivateProfileString("Test","id","xym","d:\\vc\\Ex1\\ex1.ini"); //在Ex1目录下的ex1.ini中创建一个Test节,并在该节中创建一个键id,其值为xym
//若Ex1.ini文件与读写该文件的程序在同一个目录下,则上面语句也可写为: ::WritePrivateProfileString("Test","id","xym",".\\ex1.ini");
需要注意的是,C系列的语言中,转义字符'\\'表示反斜线'\'。另外,当使用相对路径时,\\前的.号不能丢掉了。
二、从ini文件中读取数据的函数 1、从系统的win.ini文件中读取信息 (1) 读取字符串 DWORD GetProfileString( & LPCTSTR lpAppName, // 节名 & LPCTSTR lpKeyName, // 键名,读取该键的值 & LPCTSTR lpDefault, // 若指定的键不存在,该值作为读取的默认值 & LPTSTR lpReturnedString, // 一个指向缓冲区的指针,接收读取的字符串 & DWORD nSize // 指定lpReturnedString指向的缓冲区的大小 )
如: CS ::GetProfileString("Test","id","Error",str.GetBuffer(20),20);
(2) 读取整数 UINT GetProfileInt( & LPCTSTR lpAppName, // 同上 & LPCTSTR lpKeyName, // 同上 & INT nDefault // 若指定的键名不存在,该值作为读取的默认值 )
如使用以下语句写入了年龄信息: ::WriteProfileString("Test","age","25"); //在win.ini中创建一个Test节,并在该节中创建一个键age,其值为25
则可用以下语句读取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文件与程序在同一个目录下,也可使用相对路径,否则需要给出绝度路径。 )
如: CS ::GetPrivateProfileString("Test","id","Error",str.GetBuffer(20),20,".\\ex1.ini"); 或: ::GetPrivateProfileString("Test","id","Error",str.GetBuffer(20),20,"d:\\vc\\Ex1\\ex1.ini");
(2) 读取整数
UINT GetPrivateProfileInt( & LPCTSTR lpAppName, // 同上 & LPCTSTR lpKeyName, // 同上 & INT nDefault, // 若指定的键名不存在,该值作为读取的默认值 & LPCTSTR lpFileName // 同上 )
如使用以下语句写入了年龄信息: ::WritePrivateProfileString("Test","age","25",".\\ex1.ini"); //在ex1.ini中创建一个Test节,并在该节中创建一个键age,其值为25
则可用以下语句读取age键的值:
age=::GetPrivateProfileInt("Test","age",0,".\\ex1.ini");
三、 删除键值或节
回顾一下WriteProfileString函数的说明 BOOL WriteProfileString( & LPCTSTR lpAppName, // 节的名字,是一个以0结束的字符串 & LPCTSTR lpKeyName, // 键的名字,是一个以0结束的字符串。若为NULL,则删除整个节 & LPCTSTR lpString // 键的值,是一个以0结束的字符串。若为NULL,则删除对应的键 )
由此可见,要删除某个节,只需要将WriteProfileString第二个参数设为NULL即可。而要删除某个键,则只需要将该函数的第三个参数设为NULL即可。这是删除系统的win.ini中的节或键,类似的,要删除自己定义的ini文件中的节或键,也可做相同的操作。 如: ::WriteProfileString("Test",NULL,NULL); //删除win.ini中的Test节 ::WriteProfileString("Test","id",NULL); //删除win.ini中的id键
::WritePrivateProfileString("Test",NULL,NULL,".\\ex1.ini"); //删除ex1.ini中的Test节 ::WritePrivateProfileString("Test","id",NULL,".\\ex1.ini"); //删除ex1.ini中的id键
四、如何判断一个ini文件中有多少个节 要判断一个ini文件中有多少个节,最简单的办法就是将所有的节名都找出来,然后统计节名的个数。而要将所有的节名找出来,使用GetPrivateProfileSectionNames函数就可以了,其原型如下: DWORD GetPrivateProfileSectionNames( & LPTSTR lpszReturnBuffer, // 指向一个缓冲区,用来保存返回的所有节名 & DWORD nSize, // 参数lpszReturnBuffer的大小 & LPCTSTR lpFileName // 文件名,若该ini文件与程序在同一个目录下,
//也可使用相对路径,否则需要给出绝度路径 )
下面的是用来统计一个ini文件中共有多少个节的函数,当然,如果需要同时找到每个节中的各个键及其值,根据找到节名就可以很容易的得到了。
/*统计共有多少个节 节名的分离方法:若chSectionNames数组的第一字符是'\0'字符,则表明 有0个节。否则,从chSectionNames数组的第一个字符开始,顺序往后找, 直到找到一个'\0'字符,若该字符的后继字符不是 '\0'字符,则表明前 面的字符组成一个节名。若连续找到两个'\0'字符,则统计结束*/
int CTestDlg::CalcCount(void) {& & TCHAR chSectionNames[2048]={0}; //所有节名组成的字符数组& & char * pSectionN //保存找到的某个节名字符串的首地址& & //i指向数组chSectionNames的某个位置,从0开始,顺序后移& & int j=0; //j用来保存下一个节名字符串的首地址相对于当前i的位置偏移量 & int count=0; //统计节的个数
& //CS & //char id[20]; & ::GetPrivateProfileSectionNames(chSectionNames,2048,".\\ex1.ini"); & for(i=0;i&2048;i++,j++) & {& &&& if(chSectionNames[0]=='\0') &&&&& //如果第一个字符就是0,则说明ini中一个节也没有 &&& if(chSectionNames[i]=='\0') &&& { &&&&& pSectionName=&chSectionNames[i-j]; //找到一个0,则说明从这个字符往前,减掉j个& 偏移量, &&&&& //就是一个节名的首地址
&&&&& j=-1; //找到一个节名后,j的值要还原,以统计下一个节名地址的偏移量 &&&&& //赋成-1是因为节名字符串的最后一个字符0是终止符,不能作为节名
&&&&& //的一部分 &&&&& /*::GetPrivateProfileString(pSectionName,"id","Error",id,20,".\\ex1.ini"); &&&&& name.Format("%s",id);*/ &&&&& //在获取节名的时候可以获取该节中键的值,前提是我们知道该节中有哪些键。&
&&&&& AfxMessageBox(pSectionName); //把找到的显示出来
&&&&& if(chSectionNames[i+1]==0) &&&&& { &&&&&&&&& //当两个相邻的字符都是0时,则所有的节名都已找到,循环终止& &&&&& } &&& }
本文来自CSDN博客,转载请标明出处:
在我们写的程序当中,总有一些配置信息需要保存下来,以便完成程序的功能,最简单的办法就是将这些信息写入INI文件中,程序初始化时再读入.具体应用如下:
一.将信息写入.INI文件中.
  1.所用的WINAPI函数原型为:
BOOL WritePrivateProfileString(
LPCTSTR lpAppName,
LPCTSTR lpKeyName,
LPCTSTR lpString,
LPCTSTR lpFileName
其中各参数的意义:
   LPCTSTR lpAppName 是INI文件中的一个字段名.
   LPCTSTR lpKeyName 是lpAppName下的一个键名,通俗讲就是变量名.
   LPCTSTR lpString 是键值,也就是变量的值,不过必须为LPCTSTR型或CString型的.
   LPCTSTR lpFileName 是完整的INI文件名.
2.具体使用方法:设现有一名学生,需把他的姓名和年龄写入 c:\stud\student.ini 文件中.
CString strName,strT
strName="张三";
::WritePrivateProfileString("StudentInfo","Name",strName,"c:\\stud\\student.ini");
  此时c:\stud\student.ini文件中的内容如下:
   [StudentInfo]
3.要将学生的年龄保存下来,只需将整型的值变为字符型即可:
strTemp.Format("%d",nAge);
::WritePrivateProfileString("StudentInfo","Age",strTemp,"c:\\stud\\student.ini");
二.将信息从INI文件中读入程序中的变量.
1.所用的WINAPI函数原型为:
DWORD GetPrivateProfileString(
LPCTSTR lpAppName,
LPCTSTR lpKeyName,
LPCTSTR lpDefault,
LPTSTR lpReturnedString,
DWORD nSize,
LPCTSTR lpFileName
其中各参数的意义:
   前二个参数与 WritePrivateProfileString中的意义一样.
   lpDefault : 如果INI文件中没有前两个参数指定的字段名或键名,则将此值赋给变量.
   lpReturnedString : 接收INI文件中的值的CString对象,即目的缓存器.
   nSize : 目的缓存器的大小.
   lpFileName : 是完整的INI文件名.
2.具体使用方法:现要将上一步中写入的学生的信息读入程序中.
CString strStudN
int nStudA
GetPrivateProfileString("StudentInfo","Name","默认姓名",strStudName.GetBuffer(MAX_PATH),MAX_PATH,"c:\\stud\\student.ini");
执行后 strStudName 的值为:"张三",若前两个参数有误,其值为:"默认姓名".
3.读入整型值要用另一个WINAPI函数:
UINT GetPrivateProfileInt(
LPCTSTR lpAppName,
LPCTSTR lpKeyName,
INT nDefault,
LPCTSTR lpFileName
这里的参数意义与上相同.使用方法如下:
nStudAge=GetPrivateProfileInt("StudentInfo","Age",10,"c:\\stud\\student.ini");
三.循环写入多个值,设现有一程序,要将最近使用的几个文件名保存下来,具体程序如下:
CString strTemp,strTempA;
int nCount=6;
file://共有6个文件名需要保存
for(i=0;i {strTemp.Format("%d",i);
strTempA=文件名;
file://文件名可以从数组,列表框等处取得.
::WritePrivateProfileString("UseFileName","FileName"+strTemp,strTempA,
"c:\\usefile\\usefile.ini");
strTemp.Format("%d",nCount);
::WritePrivateProfileString("FileCount","Count",strTemp,"c:\\usefile\\usefile.ini");
file://将文件总数写入,以便读出.
nCount=::GetPrivateProfileInt("FileCount","Count",0,"c:\\usefile\\usefile.ini");
for(i=0;i {strTemp.Format("%d",i);
strTemp="FileName"+strT
::GetPrivateProfileString("CurrentIni",strTemp,"default.fil", strTempA.GetBuffer(MAX_PATH),MAX_PATH,"c:\\usefile\\usefile.ini");
file://使用strTempA中的内容.
另外要注意以下三点:
1.INI文件的路径必须完整,文件名前面的各级目录必须存在,否则写入不成功,该函数返回 FALSE 值.
2.文件名的路径中必须为 \\ ,因为在VC++中, \\ 才表示一个 \ .
3.也可将INI文件放在程序所在目录,此时 lpFileName 参数为: ".\\student.ini".
先调用GetWindowRect后再调用ScreenToClient,这个时候得到的rect和直接使用GetClientRect得到的值是相等的。有时候需要获得窗口矩形的大小和客户区矩形的大小二者的值,故需要分别调用GetWindowRect和GetClientRect。如果只需要获得客户区矩形的大小,调用GetClientRect就行了。GetWindowRect和GetClientRect函数的说明如下:
CWnd::GetClientRect&&&&& void GetClientRect( LPRECT lpRect )Parameters:lpRect&&& Points to a RECT structure or a CRect object to receive the client coordinates. The left and top members will be 0. The right and bottom members will contain the width and height of the window.Remarks:&&& Copies the client coordinates of the CWnd client area into the structure pointed to by lpRect. The client coordinates specify the upper-left and lower-right corners of the client area. Since client coordinates are relative to the upper-left corners of the CWnd client area, the coordinates of the upper-left corner are (0,0).
CWnd::GetWindowRectvoid GetWindowRect( LPRECT lpRect )Parameters:lpRectPoints to a CRect object or a RECT structure that will receive the screen coordinates of the upper-left and lower-right corners.Remarks:Copies the dimensions of the bounding rectangle of the CWnd object to the structure pointed to by lpRect. The dimensions are given in screen coordinates relative to the upper-left corner of the display screen. The dimensions of the caption, border, and scroll bars, if present, are included.
GetWindowRect() 得到的是在屏幕坐标系下的RECT;(即以屏幕左上角为原点) GetClientRect() 得到的是在客户区坐标系下的RECT; (即以所在窗口左上角为原点) GetWindowRect()取的是整个窗口的矩形; GetClientRect()取的仅是客户区的矩形,也就是说不包括标题栏,外框等;
第一个函数获得的是窗口在屏幕上的位置,得到的结果可能是这样CRect(10,10,240,240); 第二个函数和它不同,它只获得了客户区的大小,因此得到的结果总是这样CRect(0,0,width,height);
ScreenToClient() 就是把屏幕坐标系下的RECT坐标转换为客户区坐标系下的RECT坐标。
The GetClientRect function retrieves the coordinates of a window's client area. The client coordinates specify the upper-left and lower-right corners of the client area. Because client coordinates are relative to the upper-left corner of a window's client area, the coordinates of the upper-left corner are (0,0).
GetClientRect得到的是客户区的大小,也就是说这样得到的左上角永远是(0,0)
The GetWindowRect function retrieves the dimensions of the bounding rectangle of the specified window. The dimensions are given in screen coordinates that are relative to the upper-left corner of the screen.
GetWindowRect 是窗口相对于整个屏幕的坐标,屏幕左上点为0,0
相互转化用ScreenToClient 或者 ClientToScreen
ClientToScreenThe ClientToScreen function converts the client coordinates of a specified point to screen coordinates. BOOL ClientToScreen(&& HWND hWnd,&&&&&&& // window handle for source coordinates&& LPPOINT lpPoint&& // pointer to structure containing screen coordinates);ParametershWnd Handle to the window whose client area is used for the conversion. lpPoint Pointer to a POINT structure that contains the client coordinates to be converted. The new screen coordinates are copied into this structure if the function succeeds. Return ValuesIf the function succeeds, the return value is nonzero.If the function fails, the return value is zero.
虽然存在调用GetWindowRect后再调用ScreenToClient==GetClientRect,但ScreenToClient()和ClientToScreen()两者都是属于WINDOWS API函数,可能是存在一定的冗余设计,但意义不同。不过在.Net Framework下对WINDOWS API函数进行了重新整理和优化,在获取控件或窗口的屏幕坐标和客户区坐标时更方便的多,只需要得到与控件或窗口相对应屏幕坐标和客户区坐标属性值就可以了。
ScreenToClientThe ScreenToClient function converts the screen coordinates of a specified point on the screen to client coordinates. BOOL ScreenToClient(&& HWND hWnd,&&&&&&&& // window handle for source coordinates&& LPPOINT lpPoint&&& // address of structure containing coordinates);Parameters:hWnd Handle to the window whose client area will be used for the conversion. lpPoint Pointer to a POINT structure that contains the screen coordinates to be converted. Return Values:If the function succeeds, the return value is nonzero.If the function fails, the return value is zero.
共25页:&&2&&&&&&&&&
311234567891011121314151617181920212223242526272829123456789101112
随笔 - 241
留言簿(15)
阅读排行榜
评论排行榜}

我要回帖

更多关于 万分感谢的意思 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信