00001
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include "precomp.h"
00028 #include "CCPrintRegistry.h"
00029
00030 #include <winspool.h>
00031 #include <tchar.h>
00032
00039 DWORD CCPrintRegistry::GetRegistryDWORD(HANDLE hPrinter, LPCTSTR lpSetting, DWORD dwDefault)
00040 {
00041
00042 DWORD dwType, dwValue, dwSize = sizeof(DWORD);
00043 if (GetPrinterData(hPrinter, (LPTSTR)lpSetting, &dwType, (LPBYTE)&dwValue, sizeof(DWORD), &dwSize) != ERROR_SUCCESS)
00044 return dwDefault;
00045
00046 if (dwType != REG_DWORD)
00047 return dwDefault;
00048
00049 return dwValue;
00050 }
00051
00058 bool CCPrintRegistry::SetRegistryDWORD(HANDLE hPrinter, LPCTSTR lpSetting, DWORD dwValue)
00059 {
00060
00061 HRESULT hr = SetPrinterData(hPrinter, (LPTSTR)lpSetting, REG_DWORD, (LPBYTE)&dwValue, sizeof(dwValue));
00062 return hr == ERROR_SUCCESS;
00063 }
00064
00071 std::tstring CCPrintRegistry::GetRegistryString(HANDLE hPrinter, LPCTSTR lpSetting, LPCTSTR lpDefault)
00072 {
00073
00074 DWORD dwType, dwSize;
00075 LONG lRes = GetPrinterData(hPrinter, (LPTSTR)lpSetting, &dwType, NULL, 0, &dwSize);
00076 if (((lRes != ERROR_MORE_DATA) && (lRes != ERROR_SUCCESS)) || (dwType != REG_SZ))
00077 return lpDefault;
00078
00079 if (dwSize == 0)
00080 return _T("");
00081
00082 std::tstring sRet(lpDefault);
00083 TCHAR* lpData = new TCHAR[(dwSize / sizeof(TCHAR)) + 1];
00084 if (GetPrinterData(hPrinter, (LPTSTR)lpSetting, NULL, (LPBYTE)lpData, dwSize, &dwSize) == ERROR_SUCCESS)
00085 sRet = lpData;
00086 delete [] lpData;
00087
00088 return sRet;
00089 }
00090
00097 bool CCPrintRegistry::SetRegistryString(HANDLE hPrinter, LPCTSTR lpSetting, const std::tstring& sValue)
00098 {
00099
00100 return SetPrinterData(hPrinter, (LPTSTR)lpSetting, REG_SZ, (LPBYTE)sValue.c_str(), (WORD) ((sValue.size() + 1) * sizeof(TCHAR))) == ERROR_SUCCESS;
00101 }
00102
00108 bool CCPrintRegistry::EraseRegistryValue(HANDLE hPrinter, LPCTSTR lpSetting)
00109 {
00110 return (DeletePrinterData(hPrinter, (LPTSTR)lpSetting) == ERROR_SUCCESS);
00111 }
00112
00119 bool CCPrintRegistry::EnumRegistryValues(HANDLE hPrinter, STRLIST& lValues, LPCTSTR lpPrefix )
00120 {
00121
00122 DWORD dwValueSize = 0, dwIndex = 0, dw, dw2, dwRet;
00123 if (EnumPrinterData(hPrinter, 0, NULL, 0, &dwValueSize, NULL, NULL, 0, &dw) != ERROR_SUCCESS)
00124 return false;
00125
00126
00127 if (dwValueSize == 0)
00128 return true;
00129
00130
00131 TCHAR* pValueName = (TCHAR*)new char[dwValueSize];
00132 do
00133 {
00134
00135 dwRet = EnumPrinterData(hPrinter, dwIndex, pValueName, dwValueSize, &dw, NULL, NULL, 0, &dw2);
00136 if ((dwRet != ERROR_MORE_DATA) && (dwRet != ERROR_SUCCESS))
00137 break;
00138 dwIndex++;
00139 if (_tcslen(pValueName) == 0)
00140
00141 continue;
00142 if (lpPrefix != NULL)
00143 {
00144
00145 if (_tcsncmp(lpPrefix, pValueName, _tcslen(lpPrefix)) != 0)
00146
00147 continue;
00148 }
00149
00150 lValues.push_back(pValueName);
00151 } while (true);
00152
00153 delete [] pValueName;
00154
00155 return true;
00156 }