⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menuutil.c

📁 本文件是ni公司的labwindows/cvi软件的部分例子和源程序
💻 C
📖 第 1 页 / 共 5 页
字号:
        char *subKeyName = NULL;        /* address of buffer for subkey string      */    DWORD subKeyNameSize;               char *tagName    = NULL;        /* address of buffer for name string        */    DWORD tagNameSize;                                                              char *tagValue   = NULL;        /* address of buffer for value string       */    DWORD tagValueSize;               DWORD subKeyCount;              /* buffer for number of subkeys             */    DWORD maxSubKeyLen;             /* buffer for longest subkey name length    */    DWORD valueCount;               /* buffer for number of value entries       */    DWORD maxValueNameLen;          /* buffer for longest value name length     */    DWORD maxValueLen;              /* buffer for longest value data length     */        HKEY  hKey, baseKey=0, subKey=0;        /* Verify rootKey value */    switch (rootKey) {        case 0:            hKey = HKEY_CLASSES_ROOT;            break;          case 1:            hKey = HKEY_CURRENT_USER;            break;          case 2:            hKey = HKEY_LOCAL_MACHINE;            break;          case 3:            hKey = HKEY_USERS;            break;          default:            error = -1;            goto Error;            break;      }           if (iniTextHandle) {        /* Open User's Key */        RegOpenKey(hKey, (LPCTSTR) baseKeyName, &baseKey);        if (error) goto Error;                /* Get Number of Subkeys */             error = RegQueryInfoKey (            baseKey,                /* handle of key to query                               */            NULL,                   /* address of buffer for class string                   */            NULL,                   /* address of size of class string buffer               */            NULL,                   /* reserved                                             */            &subKeyCount,           /* address of buffer for number of subkeys              */            &maxSubKeyLen,          /* address of buffer for longest subkey name length     */            NULL,                   /* address of buffer for longest class string length    */            NULL,                   /* address of buffer for number of value entries        */            NULL,                   /* address of buffer for longest value name length      */            NULL,                   /* address of buffer for longest value data length      */            NULL,                   /* address of buffer for security descriptor length     */            NULL                    /* address of buffer for last write time                */           );        if (error) goto Error;                   /* If there are subkeys, enumerate thru the subkeys */                     if (subKeyCount) {            /* Enumerate thru Subkey Names */                      nullChk(subKeyName = (char *) malloc(maxSubKeyLen+1));            subKeyName[0] = 0;            for (count = 1; count <= subKeyCount; count++) {                subKeyNameSize = (DWORD) maxSubKeyLen+1;                /* Get Subkey Name */                error = RegEnumKeyEx(                    baseKey,            /* handle of key to enumerate           */                    (DWORD)(count-1),   /* index of subkey to enumerate         */                    subKeyName,         /* address of buffer for subkey name    */                    &subKeyNameSize,    /* address for size of subkey buffer    */                    NULL,               /* reserved                             */                    NULL,               /* address of buffer for class string   */                    NULL,               /* address for size of class buffer     */                    NULL                /* address for time key last written to */                    );                if (error) goto Error;                                   /* Open Subkey */                error = RegOpenKey(baseKey, (LPCTSTR) subKeyName, &subKey);                if (error) goto Error;                        /* Get Number of Values */                      error = RegQueryInfoKey (                    subKey,                 /* handle of key to query                               */                    NULL,                   /* address of buffer for class string                   */                    NULL,                   /* address of size of class string buffer               */                    NULL,                   /* reserved                                             */                    NULL,                   /* address of buffer for number of subkeys              */                    NULL,                   /* address of buffer for longest subkey name length     */                    NULL,                   /* address of buffer for longest class string length    */                    &valueCount,            /* address of buffer for number of value entries        */                    &maxValueNameLen,       /* address of buffer for longest value name length      */                    &maxValueLen,           /* address of buffer for longest value data length      */                    NULL,                   /* address of buffer for security descriptor length     */                    NULL                    /* address of buffer for last write time                */                   );                if (error) goto Error;                                                  /* If there are values, create new section and enumerate thru the values */                            if (valueCount) {                    /* Enumerate thru Values Names */                              nullChk(tagName = (char *) malloc(maxValueNameLen+1));                    nullChk(tagValue = (char *) malloc(maxValueLen+1));                    tagName[0] = 0;                    tagValue[0] = 0;                    for (tag = 1; tag <= valueCount; tag++)                    {                        tagNameSize = (DWORD) maxValueNameLen+1;                        tagValueSize = (DWORD) maxValueLen+1;                        /* Get Subkey Name */                        error = RegEnumValue(                            subKey,             /* handle of key to query               */                            (DWORD)(tag-1),     /* index of value to query              */                              tagName,            /* address of buffer for value string   */                            &tagNameSize,       /* address for size of value buffer     */                            NULL,               /* reserved                             */                            NULL,               /* address of buffer for type code      */                                                        (LPBYTE)tagValue,   /* address of buffer for value data     */                                                        &tagValueSize       /* address for size of data buffer      */                                                       );                           if (error) goto Error;                                                   error = Ini_PutRawString (iniTextHandle, subKeyName, tagName, tagValue);                        if (error) goto Error;                                               } /* for loop */                                        if (tagName) {                        free(tagName);                        tagName = NULL;                    }                       if (tagValue) {                        free(tagValue);                        tagValue = NULL;                    }                                           } /* if (valueCount) */                                if (subKey) {                    RegCloseKey(subKey);                    subKey = NULL;                }            } /* for loop */                        if (subKeyName) {                free(subKeyName);                subKeyName = NULL;            }           } /* if (subKeyCount) */                if (baseKey) {            RegCloseKey(baseKey);            baseKey = NULL;        }    } /* if (iniTextHandle) */Error:    /* free malloc'd data */    if (subKeyName) {        free(subKeyName);        subKeyName = NULL;    }       if (tagName) {        free(tagName);        tagName = NULL;    }    if (tagValue) {        free(tagValue);        tagValue = NULL;    }               /* Close out any open keys */           if (subKey) {        RegCloseKey(subKey);        subKey = NULL;    }            if (baseKey) {        RegCloseKey(baseKey);        baseKey = NULL;    }    return error;}/*****************************************************//*  IniEx_WriteToRegistry()                          *//*                                                   *//*  Parameters:                                      *//*      handle for inifile Instrument driver         *//*      root Key  Valid values:                      *//*          0 = HKEY_CLASSES_ROOT                    *//*          1 = HKEY_CURRENT_USER                    *//*          2 = HKEY_LOCAL_MACHINE                   *//*          3 = HKEY_USERS                           *//*      base Key name                                *//*      whether to remove non list tags              *//*                                                   *//*  Return: status                                   *//*                                                   *//*  Purpose: Main routine for putting registry info  *//*****************************************************/static int IniEx_WriteToRegistry(    IniText iniTextHandle,     int rootKey,     char *baseKeyName,     int removeNonListTags){    int   error = 0;    int   count;    int   index;        char  *sectionName = NULL;    char  *tagName = NULL;    char  *tagValue = NULL;        HKEY  hKey, baseKey, subKey;    DWORD disposition;        switch (rootKey)    {        case 0:            hKey = HKEY_CLASSES_ROOT;            break;          case 1:            hKey = HKEY_CURRENT_USER;            break;          case 2:            hKey = HKEY_LOCAL_MACHINE;            break;          case 3:            hKey = HKEY_USERS;            break;          default:            error = -1;            goto Error;            break;      }       if (iniTextHandle) {        /* Open or Create the Base Section in Registry */        error = RegCreateKeyEx (hKey, (LPCTSTR) baseKeyName, 0, "", REG_OPTION_NON_VOLATILE,                            KEY_ALL_ACCESS, NULL, &baseKey, &disposition);        if (error) goto Error;                        for (count = 1; count <= Ini_NumberOfSections (iniTextHandle); count++) {            /* Get the Section Name */            if (!Ini_NthSectionName (iniTextHandle, count, &sectionName))                goto Error;                            /* Remove Section Name if specified */            if (removeNonListTags)                RegDeleteKey(baseKey, sectionName);                            /* Open or Create the "INIFILE" Section in Registry */            error = RegCreateKeyEx (baseKey, (LPCTSTR) sectionName, 0, "", REG_OPTION_NON_VOLATILE,                                KEY_ALL_ACCESS, NULL, &subKey, &disposition);            if (error) goto Error;                              for (index=1; index <= Ini_NumberOfItems (iniTextHandle, sectionName); index++) {                /* Get the tagName and Value */                if (!Ini_NthItemName (iniTextHandle, sectionName, index, &tagName))                     goto Error;                if (Ini_GetRawStringCopy (iniTextHandle, sectionName, tagName, &tagValue)<0)                     goto Error;                                error = RegSetValueEx (subKey, tagName, 0, REG_SZ, (CONST BYTE *)tagValue, strlen (tagValue)+1);                if (error) goto Error;                                if (tagValue) {                    free(tagValue);                    tagValue = NULL;                }               }                                      if (subKey) {                RegCloseKey(subKey);                subKey = NULL;            }        }    }    Error:    /* free any allocated memory */    if (tagValue) {        free(tagValue);        tagValue = NULL;    }       /* Close out any open keys */           if (subKey) {        RegCloseKey(subKey);        subKey = NULL;    }            if (baseKey) {        RegCloseKey(baseKey);        baseKey = NULL;    }    return error;}#endif /* #ifdef WIN32 *//*****************************************************//*                                                   *//*  MU_GetMenuListAttribute ()                       *//*                                                   *//*  Parameters:                                      *//*      menuList Handle                              *//*      index                                        *//*      attribute                                    *//*      data                                         *//*                                                   *//*  Output: error                                    *//*                                                   *//*  Purpose: Get a variety of information inside     *//*      menuList or an item in a menuList            *//*                                                   *//*****************************************************/int CVIFUNC MU_GetMenuListAttribute (    menuList handle,     int index,     int attribute,     void *value){    menuInfoRec * menuInfoPtr = NULL;    menuItemInfoRec * menuItemInfoPtr = NULL;    int item

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -