?? menuutil.c
字號:
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, §ionName)) 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 + -