PROFILE.C
资源名称:MSDN_VC98.zip [点击查看]
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:9k
源码类别:
Windows编程
开发平台:
Visual C++
- /**************************************************************************
- *
- * THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
- * KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
- * PURPOSE.
- *
- * Copyright (C) 1992 - 1997 Microsoft Corporation. All Rights Reserved.
- *
- **************************************************************************/
- /****************************************************************************
- *
- * profile.c: Stores profile info in the Registry
- *
- * Vidcap32 Source code
- *
- ***************************************************************************/
- /*
- * win32/win16 utility functions to read and write profile items
- * for multimedia tools
- */
- #include <windows.h>
- #include <windowsx.h>
- #ifdef _WIN32
- #define KEYNAME "Software\Microsoft\Multimedia Tools\"
- #define ROOTKEY HKEY_CURRENT_USER
- #else
- #define INIFILE "mmtools.ini"
- #endif
- /*
- * read a BOOL flag from the profile, or return default if
- * not found.
- */
- BOOL
- mmGetProfileFlag(LPSTR appname, LPSTR valuename, BOOL bDefault)
- {
- #ifdef _WIN32
- char achName[MAX_PATH];
- HKEY hkey;
- DWORD dwType;
- BOOL bValue = bDefault;
- DWORD dwData;
- int cbData;
- lstrcpy(achName, KEYNAME);
- lstrcat(achName, appname);
- if (RegOpenKey(ROOTKEY, achName, &hkey) != ERROR_SUCCESS) {
- return(bDefault);
- }
- cbData = sizeof(dwData);
- if (RegQueryValueEx(
- hkey,
- valuename,
- NULL,
- &dwType,
- (PBYTE) &dwData,
- &cbData) == ERROR_SUCCESS) {
- if (dwType == REG_DWORD) {
- if (dwData) {
- bValue = TRUE;
- } else {
- bValue = FALSE;
- }
- }
- }
- RegCloseKey(hkey);
- return(bValue);
- #else
- char ach[10];
- GetPrivateProfileString(appname, valuename, "X", ach, sizeof(ach),
- INIFILE);
- switch(ach[0]) {
- case 'N':
- case 'n':
- case '0':
- return(FALSE);
- case 'Y':
- case 'y':
- case '1':
- return(TRUE);
- default:
- return(bDefault);
- }
- #endif
- }
- /*
- * write a boolean value to the registry, if it is not the
- * same as the default or the value already there
- */
- VOID
- mmWriteProfileFlag(LPSTR appname, LPSTR valuename, BOOL bValue, BOOL bDefault)
- {
- if (mmGetProfileFlag(appname, valuename, bDefault) == bValue) {
- return;
- }
- #ifdef _WIN32
- {
- char achName[MAX_PATH];
- HKEY hkey;
- lstrcpy(achName, KEYNAME);
- lstrcat(achName, appname);
- if (RegCreateKey(ROOTKEY, achName, &hkey) == ERROR_SUCCESS) {
- RegSetValueEx(
- hkey,
- valuename,
- 0,
- REG_DWORD,
- (PBYTE) &bValue,
- sizeof(bValue)
- );
- RegCloseKey(hkey);
- }
- }
- #else
- WritePrivateProfileString(
- appname,
- valuename,
- bValue ? "1" : "0",
- INIFILE);
- #endif
- }
- /*
- * read a UINT from the profile, or return default if
- * not found.
- */
- UINT
- mmGetProfileInt(LPSTR appname, LPSTR valuename, UINT uDefault)
- {
- #ifdef _WIN32
- char achName[MAX_PATH];
- HKEY hkey;
- DWORD dwType;
- UINT value = uDefault;
- DWORD dwData;
- int cbData;
- lstrcpy(achName, KEYNAME);
- lstrcat(achName, appname);
- if (RegOpenKey(ROOTKEY, achName, &hkey) != ERROR_SUCCESS) {
- return(uDefault);
- }
- cbData = sizeof(dwData);
- if (RegQueryValueEx(
- hkey,
- valuename,
- NULL,
- &dwType,
- (PBYTE) &dwData,
- &cbData) == ERROR_SUCCESS) {
- if (dwType == REG_DWORD) {
- value = (UINT)dwData;
- }
- }
- RegCloseKey(hkey);
- return(value);
- #else
- return(GetPrivateProfileInt(appname, valuename, uDefault, INIFILE);
- #endif
- }
- /*
- * write a UINT to the profile, if it is not the
- * same as the default or the value already there
- */
- VOID
- mmWriteProfileInt(LPSTR appname, LPSTR valuename, UINT uValue, UINT uDefault)
- {
- if (mmGetProfileInt(appname, valuename, uDefault) == uValue) {
- return;
- }
- #ifdef _WIN32
- {
- char achName[MAX_PATH];
- HKEY hkey;
- DWORD dwData = uValue;
- lstrcpy(achName, KEYNAME);
- lstrcat(achName, appname);
- if (RegCreateKey(ROOTKEY, achName, &hkey) == ERROR_SUCCESS) {
- RegSetValueEx(
- hkey,
- valuename,
- 0,
- REG_DWORD,
- (PBYTE) &dwData,
- sizeof(dwData)
- );
- RegCloseKey(hkey);
- }
- }
- #else
- char ach[12];
- wsprintf(ach, "%d", uValue);
- WritePrivateProfileString(
- appname,
- valuename,
- ach,
- INIFILE);
- #endif
- }
- /*
- * read a string from the profile into pResult.
- * result is number of bytes written into pResult
- */
- DWORD
- mmGetProfileString(
- LPSTR appname,
- LPSTR valuename,
- LPSTR pDefault,
- LPSTR pResult,
- int cbResult
- )
- {
- #ifdef _WIN32
- char achName[MAX_PATH];
- HKEY hkey;
- DWORD dwType;
- lstrcpy(achName, KEYNAME);
- lstrcat(achName, appname);
- if (RegOpenKey(ROOTKEY, achName, &hkey) == ERROR_SUCCESS) {
- if (RegQueryValueEx(
- hkey,
- valuename,
- NULL,
- &dwType,
- pResult,
- &cbResult) == ERROR_SUCCESS) {
- if (dwType == REG_SZ) {
- // cbResult is set to the size including null
- RegCloseKey(hkey);
- return(cbResult - 1);
- }
- }
- RegCloseKey(hkey);
- }
- // if we got here, we didn't find it, or it was the wrong type - return
- // the default string
- lstrcpy(pResult, pDefault);
- return(lstrlen(pDefault));
- #else
- return GetPrivateProfileString(
- appname,
- valuename,
- pDefault,
- pResult,
- cbResult
- INIFILE);
- #endif
- }
- /*
- * write a string to the profile
- */
- VOID
- mmWriteProfileString(LPSTR appname, LPSTR valuename, LPSTR pData)
- {
- #ifdef _WIN32
- char achName[MAX_PATH];
- HKEY hkey;
- lstrcpy(achName, KEYNAME);
- lstrcat(achName, appname);
- if (RegCreateKey(ROOTKEY, achName, &hkey) == ERROR_SUCCESS) {
- RegSetValueEx(
- hkey,
- valuename,
- 0,
- REG_SZ,
- pData,
- lstrlen(pData) + 1
- );
- RegCloseKey(hkey);
- }
- #else
- WritePrivateProfileString(
- appname,
- valuename,
- pData,
- INIFILE);
- #endif
- }
- /*
- * read binary values from the profile into pResult.
- * result is number of bytes written into pResult
- */
- DWORD
- mmGetProfileBinary(
- LPSTR appname,
- LPSTR valuename,
- LPVOID pDefault,
- LPVOID pResult, // if NULL, return the required size
- int cbSize
- )
- {
- char achName[MAX_PATH];
- HKEY hkey;
- DWORD dwType;
- int cbResult = cbSize;
- lstrcpy(achName, KEYNAME);
- lstrcat(achName, appname);
- if (RegOpenKey(ROOTKEY, achName, &hkey) == ERROR_SUCCESS) {
- if (RegQueryValueEx(
- hkey,
- valuename,
- NULL,
- &dwType,
- pResult,
- &cbResult) == ERROR_SUCCESS) {
- if (dwType == REG_BINARY) {
- // cbResult is the size
- RegCloseKey(hkey);
- return(cbResult);
- }
- }
- RegCloseKey(hkey);
- }
- // if we got here, we didn't find it, or it was the wrong type - return
- // the default values (use MoveMemory, since src could equal dst)
- MoveMemory (pResult, pDefault, cbSize);
- return cbSize;
- }
- /*
- * write binary data to the profile
- */
- VOID
- mmWriteProfileBinary(LPSTR appname, LPSTR valuename, LPVOID pData, int cbData)
- {
- char achName[MAX_PATH];
- HKEY hkey;
- lstrcpy(achName, KEYNAME);
- lstrcat(achName, appname);
- if (RegCreateKey(ROOTKEY, achName, &hkey) == ERROR_SUCCESS) {
- RegSetValueEx(
- hkey,
- valuename,
- 0,
- REG_BINARY,
- pData,
- cbData
- );
- RegCloseKey(hkey);
- }
- }