关于windows程序设计 列表框类 ——environ

来源:互联网 发布:金十网数据官网 编辑:程序博客网 时间:2024/06/10 20:25

void FillListBox (HWND hwndList) {     int     iLength ;     TCHAR * pVarBlock, * pVarBeg, * pVarEnd, * pVarName ;     pVarBlock = GetEnvironmentStrings () ;  // Get pointer to environment block     while (*pVarBlock)     {          if (*pVarBlock != '=')   // Skip variable names beginning with '='          {               pVarBeg = pVarBlock ;              // Beginning of variable name               while (*pVarBlock++ != '=') ;      // Scan until '='               pVarEnd = pVarBlock - 1 ;          // Points to '=' sign               iLength = pVarEnd - pVarBeg ;      // Length of variable name                    // Allocate memory for the variable name and terminating                    // zero. Copy the variable name and append a zero.               pVarName = calloc (iLength + 1, sizeof (TCHAR)) ;               CopyMemory (pVarName, pVarBeg, iLength * sizeof (TCHAR)) ;               pVarName[iLength] = '\0' ;                    // Put the variable name in the list box and free memory.               SendMessage (hwndList, LB_ADDSTRING, 0, (LPARAM) pVarName) ;               free (pVarName) ;          }          while (*pVarBlock++ != '\0') ;     // Scan until terminating zero     }     FreeEnvironmentStrings (pVarBlock) ;}

  

 你如果不知道环境字符串的构造,解释了你也不懂,建议查看一下GetEnvironmentStrings ()的帮助文档,弄清楚了环境字符串你自然就懂了这个函数的意思。环境字符串的构造类似为为"path=c://Windows\0lib=f://lib\0\0",该函数主要获取键值,即"path"和"lib"。

追问
GetEnvironmentStrings ()的帮助文档我会没看过吗?反复看过几次了。哥们,我是实验过,输出过的。while(*pVarBlock++!='=');  pVarEnd=pVarBlock-1; iLength=pVarEnd-pVarBeg;现在主要是这3句我不明白,你有没有看懂我的问题啊?要是这么简单的注释,我也懂啦。关键是细节。

回答
首先你注意while(*pVarBlock++!='=');后面的那个分号。相当于while(*pVarBlock!='=')        pVarBlock++;举个例子吧,假如环境字符串为"path=c://Windows\0lib=f://lib\0\0",while(*pVarBlock++!='=');就是如果*pVarBlock不为'=',pVarBlock指向下一个字符,所以次循环结束后*pVarBlock为'=';也就是path的后一个位置,iLength=pVarBlock-1-pVarBeg也就是求出path 的长度,因为pVarBlock指向path的后一个位置,pVarBeg指向path的开始。后面的就是分配内存保存字符串path.
http://baike.baidu.com/view/95930.htm 
最后注意:如果环境内存块中的环境变量为"path=c://Windows\0lib=f://lib\0\0",对于每个设备环境变量是以"\0"结尾的,是以"\0"标识内存块中设备环境变量的结束,这个函数其实就是获得"path"和"lib"这俩个字符串,并把它们写入列表框中。
原创粉丝点击