|
|
/**************************************************************************
* * 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 - 1995 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(LPTSTR appname, LPTSTR valuename, BOOL bDefault) { #ifdef _WIN32
TCHAR 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
TCHAR 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(LPTSTR appname, LPTSTR valuename, BOOL bValue, BOOL bDefault) { if (mmGetProfileFlag(appname, valuename, bDefault) == bValue) { return; }
#ifdef _WIN32
{ TCHAR 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(LPTSTR appname, LPTSTR valuename, UINT uDefault) { #ifdef _WIN32
TCHAR 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(LPTSTR appname, LPTSTR valuename, UINT uValue, UINT uDefault) { if (mmGetProfileInt(appname, valuename, uDefault) == uValue) { return; }
#ifdef _WIN32
{ TCHAR 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) &uValue, sizeof(uValue) );
RegCloseKey(hkey); } }
#else
TCHAR 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( LPTSTR appname, LPTSTR valuename, LPTSTR pDefault, LPTSTR pResult, int cbResult ) { #ifdef _WIN32
TCHAR 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(LPTSTR appname, LPTSTR valuename, LPSTR pData) { #ifdef _WIN32
TCHAR 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( LPTSTR appname, LPTSTR valuename, LPVOID pDefault, LPVOID pResult, // if NULL, return the required size
int cbSize ) { TCHAR 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(LPTSTR appname, LPTSTR valuename, LPVOID pData, int cbData) { TCHAR 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); } }
|