PROFILE.C
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:9k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /**************************************************************************
  2.  *
  3.  *  THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
  4.  *  KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  5.  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
  6.  *  PURPOSE.
  7.  *
  8.  *  Copyright (C) 1992 - 1997 Microsoft Corporation.  All Rights Reserved.
  9.  *
  10.  **************************************************************************/
  11. /****************************************************************************
  12.  *
  13.  *   profile.c: Stores profile info in the Registry 
  14.  *
  15.  *   Vidcap32 Source code
  16.  *
  17.  ***************************************************************************/
  18. /*
  19.  * win32/win16 utility functions to read and write profile items
  20.  * for multimedia tools
  21.  */
  22. #include <windows.h>
  23. #include <windowsx.h>
  24. #ifdef _WIN32
  25. #define KEYNAME     "Software\Microsoft\Multimedia Tools\"
  26. #define ROOTKEY     HKEY_CURRENT_USER
  27. #else
  28. #define INIFILE    "mmtools.ini"
  29. #endif
  30. /*
  31.  * read a BOOL flag from the profile, or return default if
  32.  * not found.
  33.  */
  34. BOOL
  35. mmGetProfileFlag(LPSTR appname, LPSTR valuename, BOOL bDefault)
  36. {
  37. #ifdef _WIN32
  38.     char achName[MAX_PATH];
  39.     HKEY hkey;
  40.     DWORD dwType;
  41.     BOOL bValue = bDefault;
  42.     DWORD dwData;
  43.     int cbData;
  44.     lstrcpy(achName, KEYNAME);
  45.     lstrcat(achName, appname);
  46.     if (RegOpenKey(ROOTKEY, achName, &hkey) != ERROR_SUCCESS) {
  47.         return(bDefault);
  48.     }
  49.     cbData = sizeof(dwData);
  50.     if (RegQueryValueEx(
  51.         hkey,
  52.         valuename,
  53.         NULL,
  54.         &dwType,
  55.         (PBYTE) &dwData,
  56.         &cbData) == ERROR_SUCCESS) {
  57.             if (dwType == REG_DWORD) {
  58.                 if (dwData) {
  59.                     bValue = TRUE;
  60.                 } else {
  61.                     bValue = FALSE;
  62.                 }
  63.             }
  64.     }
  65.     RegCloseKey(hkey);
  66.     return(bValue);
  67. #else
  68.     char ach[10];
  69.     GetPrivateProfileString(appname, valuename, "X", ach, sizeof(ach),
  70.             INIFILE);
  71.     switch(ach[0]) {
  72.     case 'N':
  73.     case 'n':
  74.     case '0':
  75.         return(FALSE);
  76.     case 'Y':
  77.     case 'y':
  78.     case '1':
  79.         return(TRUE);
  80.     default:
  81.         return(bDefault);
  82.     }
  83. #endif
  84. }
  85. /*
  86.  * write a boolean value to the registry, if it is not the
  87.  * same as the default or the value already there
  88.  */
  89. VOID
  90. mmWriteProfileFlag(LPSTR appname, LPSTR valuename, BOOL bValue, BOOL bDefault)
  91. {
  92.     if (mmGetProfileFlag(appname, valuename, bDefault) == bValue) {
  93.         return;
  94.     }
  95. #ifdef _WIN32
  96.     {
  97.         char achName[MAX_PATH];
  98.         HKEY hkey;
  99.         lstrcpy(achName, KEYNAME);
  100.         lstrcat(achName, appname);
  101.         if (RegCreateKey(ROOTKEY, achName, &hkey) == ERROR_SUCCESS) {
  102.             RegSetValueEx(
  103.                 hkey,
  104.                 valuename,
  105.                 0,
  106.                 REG_DWORD,
  107.                 (PBYTE) &bValue,
  108.                 sizeof(bValue)
  109.             );
  110.             RegCloseKey(hkey);
  111.         }
  112.     }
  113. #else
  114.     WritePrivateProfileString(
  115.         appname,
  116.         valuename,
  117.         bValue ? "1" : "0",
  118.         INIFILE);
  119. #endif
  120. }
  121. /*
  122.  * read a UINT from the profile, or return default if
  123.  * not found.
  124.  */
  125. UINT
  126. mmGetProfileInt(LPSTR appname, LPSTR valuename, UINT uDefault)
  127. {
  128. #ifdef _WIN32
  129.     char achName[MAX_PATH];
  130.     HKEY hkey;
  131.     DWORD dwType;
  132.     UINT value = uDefault;
  133.     DWORD dwData;
  134.     int cbData;
  135.     lstrcpy(achName, KEYNAME);
  136.     lstrcat(achName, appname);
  137.     if (RegOpenKey(ROOTKEY, achName, &hkey) != ERROR_SUCCESS) {
  138.         return(uDefault);
  139.     }
  140.     cbData = sizeof(dwData);
  141.     if (RegQueryValueEx(
  142.         hkey,
  143.         valuename,
  144.         NULL,
  145.         &dwType,
  146.         (PBYTE) &dwData,
  147.         &cbData) == ERROR_SUCCESS) {
  148.             if (dwType == REG_DWORD) {
  149.                 value = (UINT)dwData;
  150.             }
  151.     }
  152.     RegCloseKey(hkey);
  153.     return(value);
  154. #else
  155.     return(GetPrivateProfileInt(appname, valuename, uDefault, INIFILE);
  156. #endif
  157. }
  158. /*
  159.  * write a UINT to the profile, if it is not the
  160.  * same as the default or the value already there
  161.  */
  162. VOID
  163. mmWriteProfileInt(LPSTR appname, LPSTR valuename, UINT uValue, UINT uDefault)
  164. {
  165.     if (mmGetProfileInt(appname, valuename, uDefault) == uValue) {
  166.         return;
  167.     }
  168. #ifdef _WIN32
  169.     {
  170.         char achName[MAX_PATH];
  171.         HKEY hkey;
  172.         DWORD dwData = uValue;
  173.         lstrcpy(achName, KEYNAME);
  174.         lstrcat(achName, appname);
  175.         if (RegCreateKey(ROOTKEY, achName, &hkey) == ERROR_SUCCESS) {
  176.             RegSetValueEx(
  177.                 hkey,
  178.                 valuename,
  179.                 0,
  180.                 REG_DWORD,
  181.                 (PBYTE) &dwData,
  182.                 sizeof(dwData)
  183.             );
  184.             RegCloseKey(hkey);
  185.         }
  186.     }
  187. #else
  188.     char ach[12];
  189.     wsprintf(ach, "%d", uValue);
  190.     WritePrivateProfileString(
  191.         appname,
  192.         valuename,
  193.         ach,
  194.         INIFILE);
  195. #endif
  196. }
  197. /*
  198.  * read a string from the profile into pResult.
  199.  * result is number of bytes written into pResult
  200.  */
  201. DWORD
  202. mmGetProfileString(
  203.     LPSTR appname,
  204.     LPSTR valuename,
  205.     LPSTR pDefault,
  206.     LPSTR pResult,
  207.     int cbResult
  208. )
  209. {
  210. #ifdef _WIN32
  211.     char achName[MAX_PATH];
  212.     HKEY hkey;
  213.     DWORD dwType;
  214.     lstrcpy(achName, KEYNAME);
  215.     lstrcat(achName, appname);
  216.     if (RegOpenKey(ROOTKEY, achName, &hkey) == ERROR_SUCCESS) {
  217.         if (RegQueryValueEx(
  218.             hkey,
  219.             valuename,
  220.             NULL,
  221.             &dwType,
  222.             pResult,
  223.             &cbResult) == ERROR_SUCCESS) {
  224.                 if (dwType == REG_SZ) {
  225.                     // cbResult is set to the size including null
  226.                     RegCloseKey(hkey);
  227.                     return(cbResult - 1);
  228.                 }
  229.         }
  230.         RegCloseKey(hkey);
  231.     }
  232.     // if we got here, we didn't find it, or it was the wrong type - return
  233.     // the default string
  234.     lstrcpy(pResult, pDefault);
  235.     return(lstrlen(pDefault));
  236. #else
  237.     return GetPrivateProfileString(
  238.                 appname,
  239.                 valuename,
  240.                 pDefault,
  241.                 pResult,
  242.                 cbResult
  243.                 INIFILE);
  244. #endif
  245. }
  246. /*
  247.  * write a string to the profile
  248.  */
  249. VOID
  250. mmWriteProfileString(LPSTR appname, LPSTR valuename, LPSTR pData)
  251. {
  252. #ifdef _WIN32
  253.     char achName[MAX_PATH];
  254.     HKEY hkey;
  255.     lstrcpy(achName, KEYNAME);
  256.     lstrcat(achName, appname);
  257.     if (RegCreateKey(ROOTKEY, achName, &hkey) == ERROR_SUCCESS) {
  258.         RegSetValueEx(
  259.             hkey,
  260.             valuename,
  261.             0,
  262.             REG_SZ,
  263.             pData,
  264.             lstrlen(pData) + 1
  265.         );
  266.         RegCloseKey(hkey);
  267.     }
  268. #else
  269.     WritePrivateProfileString(
  270.         appname,
  271.         valuename,
  272.         pData,
  273.         INIFILE);
  274. #endif
  275. }
  276. /*
  277.  * read binary values from the profile into pResult.
  278.  * result is number of bytes written into pResult
  279.  */
  280. DWORD
  281. mmGetProfileBinary(
  282.     LPSTR appname,
  283.     LPSTR valuename,
  284.     LPVOID pDefault,  
  285.     LPVOID pResult,   // if NULL, return the required size
  286.     int cbSize
  287. )
  288. {
  289.     char achName[MAX_PATH];
  290.     HKEY hkey;
  291.     DWORD dwType;
  292.     int cbResult = cbSize;
  293.     lstrcpy(achName, KEYNAME);
  294.     lstrcat(achName, appname);
  295.     if (RegOpenKey(ROOTKEY, achName, &hkey) == ERROR_SUCCESS) {
  296.         if (RegQueryValueEx(
  297.             hkey,
  298.             valuename,
  299.             NULL,
  300.             &dwType,
  301.             pResult,
  302.             &cbResult) == ERROR_SUCCESS) {
  303.                 if (dwType == REG_BINARY) {
  304.                     // cbResult is the size
  305.                     RegCloseKey(hkey);
  306.                     return(cbResult);
  307.                 }
  308.         }
  309.         RegCloseKey(hkey);
  310.     }
  311.     // if we got here, we didn't find it, or it was the wrong type - return
  312.     // the default values (use MoveMemory, since src could equal dst)
  313.     MoveMemory (pResult, pDefault, cbSize);
  314.     return cbSize;
  315. }
  316. /*
  317.  * write binary data to the profile
  318.  */
  319. VOID
  320. mmWriteProfileBinary(LPSTR appname, LPSTR valuename, LPVOID pData, int cbData)
  321. {
  322.     char achName[MAX_PATH];
  323.     HKEY hkey;
  324.     lstrcpy(achName, KEYNAME);
  325.     lstrcat(achName, appname);
  326.     if (RegCreateKey(ROOTKEY, achName, &hkey) == ERROR_SUCCESS) {
  327.         RegSetValueEx(
  328.             hkey,
  329.             valuename,
  330.             0,
  331.             REG_BINARY,
  332.             pData,
  333.             cbData
  334.         );
  335.         RegCloseKey(hkey);
  336.     }
  337. }