📄 win32prefs.cpp
字号:
/*____________________________________________________________________________
FreeAmp - The Free MP3 Player
Portions Copyright (C) 1998-1999 EMusic.com
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
$Id: win32prefs.cpp,v 1.18 2000/06/22 15:27:17 elrod Exp $
____________________________________________________________________________*/
#include <stdio.h>
#include <assert.h>
#include "win32prefs.h"
// location
const HKEY kMainKey = HKEY_CURRENT_USER;
const char* kFreeAmpKey = "SOFTWARE\\"BRANDING_COMPANY;
const char* kFreeAmpVersionKey = BRANDING" v"FREEAMP_MAJOR_VERSION"."FREEAMP_MINOR_VERSION;
const char* kMainComponentKey = "Main";
// default values
const char* kDefaultUI = "freeamp.ui";
const char* kDefaultPMO = "soundcard.pmo";
const bool kDefaultStayOnTop = false;
const bool kDefaultLiveInTray = false;
const int32 kDefaultWindowPosition = 0;
Win32Prefs::
Win32Prefs()
{
LONG result;
char* prefsKey = NULL;
int32 keyLength = strlen(kFreeAmpKey) +
strlen(kFreeAmpVersionKey) +
strlen(kMainComponentKey) + 3;
m_prefsKey = NULL;
prefsKey = new char[keyLength];
sprintf(prefsKey, "%s\\%s\\%s", kFreeAmpKey,
kFreeAmpVersionKey,
kMainComponentKey);
result = RegOpenKeyEx( kMainKey,
prefsKey,
0,
KEY_WRITE|KEY_READ,
&m_prefsKey);
delete [] prefsKey;
if(result != ERROR_SUCCESS)
m_prefsKey = NULL;
Initialize();
}
Win32Prefs::
Win32Prefs(const char* componentName)
{
LONG result;
char* prefsKey = NULL;
int32 keyLength = strlen(kFreeAmpKey) +
strlen(kFreeAmpVersionKey) + 3;
assert(componentName);
m_prefsKey = NULL;
if(componentName)
{
keyLength += strlen(componentName);
prefsKey = new char[keyLength];
sprintf(prefsKey, "%s\\%s\\%s", kFreeAmpKey,
kFreeAmpVersionKey,
componentName);
result = RegOpenKeyEx( kMainKey,
prefsKey,
0,
KEY_WRITE|KEY_READ,
&m_prefsKey);
delete [] prefsKey;
if(result != ERROR_SUCCESS)
{
DWORD disposition;
HKEY freeampKey;
HKEY versionKey;
// create the main key in the windows registry
result = RegCreateKeyEx(kMainKey,
kFreeAmpKey,
NULL,
"",
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,
NULL,
&freeampKey,
&disposition);
if(result == ERROR_SUCCESS)
{
// create the version key under the freeamp key
result = RegCreateKeyEx(freeampKey,
kFreeAmpVersionKey,
NULL,
"",
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,
NULL,
&versionKey,
&disposition);
}
if(result == ERROR_SUCCESS)
{
// create the component key under the version key
result = RegCreateKeyEx(versionKey,
componentName,
NULL,
"",
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,
NULL,
&m_prefsKey,
&disposition);
}
if(result != ERROR_SUCCESS)
{
m_prefsKey = NULL;
}
}
}
}
Win32Prefs::
~Win32Prefs()
{
if(m_prefsKey)
{
RegCloseKey(m_prefsKey);
}
}
Error
Win32Prefs::
Initialize()
{
LONG result;
uint32 length;
char path[MAX_PATH] = {0x00};
char cwd[MAX_PATH]= {0x00};
Error error = kError_UnknownErr;
// Where are we starting the program from?
GetCurrentDirectory(sizeof(cwd), cwd);
if(m_prefsKey)
{
// people DO move their apps around on windows
length = sizeof(path);
error = GetPrefString(kInstallDirPref, path, &length);
char foo[MAX_PATH] = {0x00};
sprintf(foo,"%s\\freeamp.exe",cwd);
WIN32_FIND_DATA win32fd;
// check for freeamp exe in cwd
HANDLE h = FindFirstFile(foo, &win32fd);
if (h != INVALID_HANDLE_VALUE)
{
//if (win32fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if(IsError(error) || strcmp(cwd, path))
{
result = RegSetValueEx( m_prefsKey,
kInstallDirPref,
NULL,
REG_SZ,
(LPBYTE)cwd,
strlen(cwd) + 1);
strcat(cwd, "\\db");
result = RegSetValueEx( m_prefsKey,
kDatabaseDirPref,
NULL,
REG_SZ,
(LPBYTE)cwd,
strlen(cwd) + 1);
}
}
FindClose(h);
}
error = kError_NoErr;
}
else // keys need to be created for the first time
{
DWORD disposition;
HKEY freeampKey;
HKEY versionKey;
// create the main key in the windows registry
result = RegCreateKeyEx(kMainKey,
kFreeAmpKey,
NULL,
"",
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,
NULL,
&freeampKey,
&disposition);
if(result == ERROR_SUCCESS)
{
// create the version key under the freeamp key
result = RegCreateKeyEx(freeampKey,
kFreeAmpVersionKey,
NULL,
"",
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,
NULL,
&versionKey,
&disposition);
}
if(result == ERROR_SUCCESS)
{
// create the version key under the freeamp key
result = RegCreateKeyEx(versionKey,
kMainComponentKey,
NULL,
"",
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,
NULL,
&m_prefsKey,
&disposition);
}
if(result != ERROR_SUCCESS)
error = kError_NoPrefs;
RegCloseKey(freeampKey);
RegCloseKey(versionKey);
}
SetDefaults();
Save();
return error;
}
Error
Win32Prefs::
SetDefaults()
{
char cwd[MAX_PATH]= {0x00};
char path[MAX_PATH];
char buf[1024];
uint32 size;
bool dummyBool;
//int32 dummyInt32;
// Where are we starting the program from?
GetCurrentDirectory(sizeof(cwd), cwd);
// set install directory value
size = sizeof(buf);
if (GetPrefString(kInstallDirPref, buf, &size) == kError_NoPrefValue)
SetPrefString(kInstallDirPref, cwd);
// set music directory value
size = sizeof(buf);
if (GetPrefString(kSaveMusicDirPref, buf, &size) == kError_NoPrefValue)
{
strcpy(path, cwd);
strcat(path, "\\");
strcat(path, "My Music");
SetPrefString(kSaveMusicDirPref, path);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -