📄 options.cpp
字号:
#include "GSPlayer2.h"
#include "MainWnd.h"
#include "Options.h"
#define NAME_WINDOW_TOPMOST _T("Window Top Most")
#define NAME_WINDOW_LEFT _T("Window Left")
#define NAME_WINDOW_TOP _T("Window Top")
#define NAME_PLAY_REPEAT _T("Repeat")
#define NAME_PLAY_SHUFFLE _T("Shuffle")
#define NAME_LAST_DIR _T("LastDir")
#define NAME_SKIN_FILE _T("SkinFile")
#define NAME_SURROUND_ENABLE _T("SurroundEnable")
#define NAME_SURROUND_RATE _T("SurroundRate")
#define NAME_EQ_ENABLE _T("EqEnable")
#define NAME_EQ_PREAMP _T("Preamp")
#define NAME_EQ_BANK1 _T("EqBank1")
#define NAME_EQ_BANK2 _T("EqBank2")
#define NAME_EQ_BANK3 _T("EqBank3")
#define NAME_EQ_BANK4 _T("EqBank4")
#define NAME_EQ_BANK5 _T("EqBank5")
#define NAME_EQ_BANK6 _T("EqBank6")
#define NAME_EQ_BANK7 _T("EqBank7")
#define NAME_EQ_BANK8 _T("EqBank8")
#define NAME_EQ_BANK9 _T("EqBank9")
#define NAME_EQ_BANK10 _T("EqBank10")
#define NAME_BASSBOOST _T("BassBoost")
#define NAME_3DCHORUS_ENABLE _T("3DChorusEnable")
#define NAME_3DCHORUS_RATE _T("3DChorusRate")
#define NAME_REVERB_ENABLE _T("ReverbEnable")
#define NAME_REVERB_RATE _T("ReverbRate")
#define NAME_REVERB_DELAY _T("ReverbDelay")
#define NAME_ECHO_ENABLE _T("EchoEnable")
#define NAME_ECHO_RATE _T("EchoRate")
#define NAME_ECHO_DELAY _T("EchoDelay")
#define NAME_DRAW_PEEK _T("DrawPeek")
#define NAME_TIME_REVERSE _T("TimeReverse")
#define NAME_SAVE_DEFLIST _T("SaveDefPlayList")
#define NAME_ADD_EXISTING _T("AddExisting")
#define NAME_RESUME _T("Resume")
#define NAME_RESUME_TRACK _T("ResumeTrack")
#define NAME_RESUME_TIME _T("ResumeTime")
#define NAME_PLAYONSTART _T("PlayOnStart")
#define NAME_TRAYICON _T("TrayIcon")
#define NAME_SEARCHSUBFOLDERS _T("SearchSubFolders")
#define NAME_SCROLLTITLE _T("ScrollTitle")
#define NAME_OUTPUT_BUFF _T("OutputBufferLen")
#define NAME_OUTPUT_PREBUFF _T("OutputPrebuffer")
#define NAME_OUTPUT_FADE _T("OutputFade")
#define NAME_SCAN_COMPLETELY _T("ScanCompletely")
#define NAME_SUPPRESS_ZERO _T("SuppressZeroSamples")
#define NAME_ALWAYSOPENDEV _T("AlwaysOpenDev")
#define NAME_STREAMING_BUFF _T("StreamingBuffer")
#define NAME_STREAMING_PREBUFF _T("StreamingPreBuffer")
#define NAME_STREAMING_PROXY _T("StreamingProxy")
#define NAME_STREAMING_USEPROXY _T("StreamingUseProxy")
#define NAME_SLEEP_MINUTES _T("SleepMinutes")
#define NAME_SLEEP_POWEROFF _T("SleepPowerOff")
#define MAX_LOCATION 5
#define KEY_LOCATION _T("Software\\GreenSoftware\\GSPlayer\\MP3\\Location")
#define NAME_LOCATION _T("Location")
#define KEY_AUDIOFILE _T("GSPlayer AudioFile")
#define NAME_AUDIOFILE _T("Audio File")
#define KEY_PLAYLIST _T("GSPlayer Playlist")
#define NAME_PLAYLIST _T("Play List File")
#define VALUE_BACKUP _T("GSPlayer Backup")
#define OUTPUT_BUFF_MAX 5000
#define OUTPUT_BUFF_MIN 20
#define OUTPUT_PREBUFF_MAX 100
#define OUTPUT_PREBUFF_MIN 0
#define STREAMING_BUFF_MAX 1024
#define STREAMING_BUFF_MIN 4
#ifndef ListView_SetCheckState
#define ListView_SetCheckState(hwndLV, i, fCheck) \
ListView_SetItemState(hwndLV, i, INDEXTOSTATEIMAGEMASK((fCheck)?2:1), LVIS_STATEIMAGEMASK)
#endif
#ifndef ListView_GetCheckState
#define ListView_GetCheckState(hwndLV, i) \
((((UINT)(SNDMSG((hwndLV), LVM_GETITEMSTATE, (WPARAM)i, LVIS_STATEIMAGEMASK))) >> 12) -1)
#endif
COptions::COptions()
{
m_fTopMost = FALSE;
m_ptInitWnd.x = (GetSystemMetrics(SM_CXSCREEN) - MAINWND_WIDTH) / 2;
m_ptInitWnd.y = (GetSystemMetrics(SM_CYSCREEN) - MAINWND_HEIGHT) / 2;
*m_szLastDir = NULL;
*m_szSkinFile = NULL;
m_fDrawPeek = FALSE;
m_fShuffle = FALSE;
m_fRepeat = RepeatNone;
m_fResume = FALSE;
m_fPlayOnStart = FALSE;
m_fTimeReverse = FALSE;
m_fSaveDefList = TRUE;
m_fAddExisting = FALSE;
m_fTrayIcon = FALSE;
m_fSearchSubFolders = FALSE;
#ifdef _WIN32_WCE
m_fScrollTitle = FALSE;
#else
m_fScrollTitle = TRUE;
#endif
m_nSleepMinutes = 30;
m_fSleepPowerOff = TRUE;
m_nSleepTime= -1;
m_dwSleepLast = 0;
m_nResumeTrack = -1;
m_nResumeTime = 0;
m_hMap = NULL;
m_pszLocation = NULL;
}
COptions::~COptions()
{
}
void COptions::Load(HANDLE hMap)
{
HKEY hKey = 0;
TCHAR szProxy[MAX_URL] = {0};
MAP_GetOptions(hMap, &m_Options);
MAP_GetStreamingOptions(hMap, &m_StreamingOptions);
if (RegOpenKeyEx(HKEY_CURRENT_USER, KEY_SETTINGS,
0, KEY_READ, &hKey) == ERROR_SUCCESS) {
DWORD dwType, dwBuff, dwSize;
dwSize = sizeof(dwBuff);
// effect
EFFECT effect;
if (RegQueryValueEx(hKey, NAME_SURROUND_ENABLE, 0, &dwType, (LPBYTE)&effect.fEnable, &dwSize) != ERROR_SUCCESS)
effect.fEnable = FALSE;
if (RegQueryValueEx(hKey, NAME_SURROUND_RATE, 0, &dwType, (LPBYTE)&effect.nRate, &dwSize) != ERROR_SUCCESS)
effect.nRate = 25;
MAP_SetEffect(hMap, EFFECT_SURROUND, &effect);
if (RegQueryValueEx(hKey, NAME_3DCHORUS_ENABLE, 0, &dwType, (LPBYTE)&effect.fEnable, &dwSize) != ERROR_SUCCESS)
effect.fEnable = FALSE;
if (RegQueryValueEx(hKey, NAME_3DCHORUS_RATE, 0, &dwType, (LPBYTE)&effect.nRate, &dwSize) != ERROR_SUCCESS)
effect.nRate = 2;
MAP_SetEffect(hMap, EFFECT_3DCHORUS, &effect);
if (RegQueryValueEx(hKey, NAME_REVERB_ENABLE, 0, &dwType, (LPBYTE)&effect.fEnable, &dwSize) != ERROR_SUCCESS)
effect.fEnable = FALSE;
if (RegQueryValueEx(hKey, NAME_REVERB_RATE, 0, &dwType, (LPBYTE)&effect.nRate, &dwSize) != ERROR_SUCCESS)
effect.nRate = 20;
if (RegQueryValueEx(hKey, NAME_REVERB_DELAY, 0, &dwType, (LPBYTE)&effect.nDelay, &dwSize) != ERROR_SUCCESS)
effect.nDelay = 100;
MAP_SetEffect(hMap, EFFECT_REVERB, &effect);
if (RegQueryValueEx(hKey, NAME_ECHO_ENABLE, 0, &dwType, (LPBYTE)&effect.fEnable, &dwSize) != ERROR_SUCCESS)
effect.fEnable = FALSE;
if (RegQueryValueEx(hKey, NAME_ECHO_RATE, 0, &dwType, (LPBYTE)&effect.nRate, &dwSize) != ERROR_SUCCESS)
effect.nRate = 20;
if (RegQueryValueEx(hKey, NAME_ECHO_DELAY, 0, &dwType, (LPBYTE)&effect.nDelay, &dwSize) != ERROR_SUCCESS)
effect.nDelay = 100;
MAP_SetEffect(hMap, EFFECT_ECHO, &effect);
EQUALIZER eq;
if (RegQueryValueEx(hKey, NAME_EQ_ENABLE, 0, &dwType, (LPBYTE)&eq.fEnable, &dwSize) != ERROR_SUCCESS)
eq.fEnable = FALSE;
if (RegQueryValueEx(hKey, NAME_EQ_PREAMP, 0, &dwType, (LPBYTE)&eq.preamp, &dwSize) != ERROR_SUCCESS)
eq.preamp = 31;
if (RegQueryValueEx(hKey, NAME_EQ_BANK1, 0, &dwType, (LPBYTE)&eq.data[0], &dwSize) != ERROR_SUCCESS)
eq.data[0] = 31;
if (RegQueryValueEx(hKey, NAME_EQ_BANK2, 0, &dwType, (LPBYTE)&eq.data[1], &dwSize) != ERROR_SUCCESS)
eq.data[1] = 31;
if (RegQueryValueEx(hKey, NAME_EQ_BANK3, 0, &dwType, (LPBYTE)&eq.data[2], &dwSize) != ERROR_SUCCESS)
eq.data[2] = 31;
if (RegQueryValueEx(hKey, NAME_EQ_BANK4, 0, &dwType, (LPBYTE)&eq.data[3], &dwSize) != ERROR_SUCCESS)
eq.data[3] = 31;
if (RegQueryValueEx(hKey, NAME_EQ_BANK5, 0, &dwType, (LPBYTE)&eq.data[4], &dwSize) != ERROR_SUCCESS)
eq.data[4] = 31;
if (RegQueryValueEx(hKey, NAME_EQ_BANK6, 0, &dwType, (LPBYTE)&eq.data[5], &dwSize) != ERROR_SUCCESS)
eq.data[5] = 31;
if (RegQueryValueEx(hKey, NAME_EQ_BANK7, 0, &dwType, (LPBYTE)&eq.data[6], &dwSize) != ERROR_SUCCESS)
eq.data[6] = 31;
if (RegQueryValueEx(hKey, NAME_EQ_BANK8, 0, &dwType, (LPBYTE)&eq.data[7], &dwSize) != ERROR_SUCCESS)
eq.data[7] = 31;
if (RegQueryValueEx(hKey, NAME_EQ_BANK9, 0, &dwType, (LPBYTE)&eq.data[8], &dwSize) != ERROR_SUCCESS)
eq.data[8] = 31;
if (RegQueryValueEx(hKey, NAME_EQ_BANK10, 0, &dwType, (LPBYTE)&eq.data[9], &dwSize) != ERROR_SUCCESS)
eq.data[9] = 31;
MAP_SetEqualizer(hMap, &eq);
// bassboost
int nLevel;
if (RegQueryValueEx(hKey, NAME_BASSBOOST, 0, &dwType, (LPBYTE)&nLevel, &dwSize) != ERROR_SUCCESS)
nLevel = 0;
MAP_SetBassBoostLevel(hMap, nLevel);
// window positions
if (RegQueryValueEx(hKey, NAME_WINDOW_TOPMOST, 0, &dwType, (LPBYTE)&dwBuff, &dwSize) == ERROR_SUCCESS)
m_fTopMost = dwBuff;
if (RegQueryValueEx(hKey, NAME_WINDOW_LEFT, 0, &dwType, (LPBYTE)&dwBuff, &dwSize) == ERROR_SUCCESS)
m_ptInitWnd.x = dwBuff;
if (RegQueryValueEx(hKey, NAME_WINDOW_TOP, 0, &dwType, (LPBYTE)&dwBuff, &dwSize) == ERROR_SUCCESS)
m_ptInitWnd.y = dwBuff;
// general settings
if (RegQueryValueEx(hKey, NAME_PLAY_REPEAT, 0, &dwType, (LPBYTE)&dwBuff, &dwSize) == ERROR_SUCCESS)
m_fRepeat = dwBuff;
if (RegQueryValueEx(hKey, NAME_PLAY_SHUFFLE, 0, &dwType, (LPBYTE)&dwBuff, &dwSize) == ERROR_SUCCESS)
m_fShuffle = dwBuff;
if (RegQueryValueEx(hKey, NAME_DRAW_PEEK, 0, &dwType, (LPBYTE)&dwBuff, &dwSize) == ERROR_SUCCESS)
m_fDrawPeek = dwBuff;
if (RegQueryValueEx(hKey, NAME_TIME_REVERSE, 0, &dwType, (LPBYTE)&dwBuff, &dwSize) == ERROR_SUCCESS)
m_fTimeReverse = dwBuff;
if (RegQueryValueEx(hKey, NAME_SAVE_DEFLIST, 0, &dwType, (LPBYTE)&dwBuff, &dwSize) == ERROR_SUCCESS)
m_fSaveDefList = dwBuff;
if (RegQueryValueEx(hKey, NAME_ADD_EXISTING, 0, &dwType, (LPBYTE)&dwBuff, &dwSize) == ERROR_SUCCESS)
m_fAddExisting = dwBuff;
if (RegQueryValueEx(hKey, NAME_RESUME, 0, &dwType, (LPBYTE)&dwBuff, &dwSize) == ERROR_SUCCESS)
m_fResume = dwBuff;
if (RegQueryValueEx(hKey, NAME_RESUME_TRACK, 0, &dwType, (LPBYTE)&dwBuff, &dwSize) == ERROR_SUCCESS)
m_nResumeTrack = dwBuff;
if (RegQueryValueEx(hKey, NAME_RESUME_TIME, 0, &dwType, (LPBYTE)&dwBuff, &dwSize) == ERROR_SUCCESS)
m_nResumeTime = dwBuff;
if (RegQueryValueEx(hKey, NAME_PLAYONSTART, 0, &dwType, (LPBYTE)&dwBuff, &dwSize) == ERROR_SUCCESS)
m_fPlayOnStart = dwBuff;
if (RegQueryValueEx(hKey, NAME_TRAYICON, 0, &dwType, (LPBYTE)&dwBuff, &dwSize) == ERROR_SUCCESS)
m_fTrayIcon = dwBuff;
if (RegQueryValueEx(hKey, NAME_SEARCHSUBFOLDERS, 0, &dwType, (LPBYTE)&dwBuff, &dwSize) == ERROR_SUCCESS)
m_fSearchSubFolders = dwBuff;
if (RegQueryValueEx(hKey, NAME_SCROLLTITLE, 0, &dwType, (LPBYTE)&dwBuff, &dwSize) == ERROR_SUCCESS)
m_fScrollTitle = dwBuff;
if (RegQueryValueEx(hKey, NAME_SLEEP_MINUTES, 0, &dwType, (LPBYTE)&dwBuff, &dwSize) == ERROR_SUCCESS)
m_nSleepMinutes = dwBuff;
#ifdef _WIN32_WCE
if (RegQueryValueEx(hKey, NAME_SLEEP_POWEROFF, 0, &dwType, (LPBYTE)&dwBuff, &dwSize) == ERROR_SUCCESS)
m_fSleepPowerOff = dwBuff;
#endif
MAP_SetScanPeek(hMap, m_fDrawPeek);
// decoder
if (RegQueryValueEx(hKey, NAME_OUTPUT_BUFF, 0, &dwType, (LPBYTE)&dwBuff, &dwSize) == ERROR_SUCCESS)
m_Options.nOutputBufferLen = dwBuff;
if (RegQueryValueEx(hKey, NAME_OUTPUT_PREBUFF, 0, &dwType, (LPBYTE)&dwBuff, &dwSize) == ERROR_SUCCESS)
m_Options.nOutputPrebuffer = dwBuff;
if (RegQueryValueEx(hKey, NAME_OUTPUT_FADE, 0, &dwType, (LPBYTE)&dwBuff, &dwSize) == ERROR_SUCCESS)
m_Options.fFadeIn = dwBuff;
if (RegQueryValueEx(hKey, NAME_SCAN_COMPLETELY, 0, &dwType, (LPBYTE)&dwBuff, &dwSize) == ERROR_SUCCESS)
m_Options.fScanMpegCompletely = dwBuff;
if (RegQueryValueEx(hKey, NAME_SUPPRESS_ZERO, 0, &dwType, (LPBYTE)&dwBuff, &dwSize) == ERROR_SUCCESS)
m_Options.fSuppressZeroSamples = dwBuff;
if (RegQueryValueEx(hKey, NAME_ALWAYSOPENDEV, 0, &dwType, (LPBYTE)&dwBuff, &dwSize) == ERROR_SUCCESS)
m_Options.fAlwaysOpenDevice = dwBuff;
dwSize = sizeof(m_szLastDir);
if (RegQueryValueEx(hKey, NAME_LAST_DIR, 0, &dwType, (LPBYTE)&m_szLastDir, &dwSize) != ERROR_SUCCESS)
*m_szLastDir = NULL;
// skin
dwSize = sizeof(m_szSkinFile);
if (RegQueryValueEx(hKey, NAME_SKIN_FILE, 0, &dwType, (LPBYTE)&m_szSkinFile, &dwSize) != ERROR_SUCCESS)
*m_szSkinFile = NULL;
// streaming
dwSize = sizeof(dwBuff);
if (RegQueryValueEx(hKey, NAME_STREAMING_BUFF, 0, &dwType, (LPBYTE)&dwBuff, &dwSize) == ERROR_SUCCESS)
m_StreamingOptions.nBuf = dwBuff;
if (RegQueryValueEx(hKey, NAME_STREAMING_PREBUFF, 0, &dwType, (LPBYTE)&dwBuff, &dwSize) == ERROR_SUCCESS)
m_StreamingOptions.nPreBuf = dwBuff;
if (RegQueryValueEx(hKey, NAME_STREAMING_USEPROXY, 0, &dwType, (LPBYTE)&dwBuff, &dwSize) == ERROR_SUCCESS)
m_StreamingOptions.fUseProxy = dwBuff;
dwSize = sizeof(szProxy);
if (RegQueryValueEx(hKey, NAME_STREAMING_PROXY, 0, &dwType, (LPBYTE)&szProxy, &dwSize) != ERROR_SUCCESS)
*szProxy = NULL;
_tcscpy(m_StreamingOptions.szProxy, szProxy);
RegCloseKey(hKey);
}
MAP_SetOptions(hMap, &m_Options);
MAP_SetStreamingOptions(hMap, &m_StreamingOptions);
}
void COptions::Save(HANDLE hMap)
{
HKEY hKey = 0;
DWORD dwDisposition;
if (RegCreateKeyEx(HKEY_CURRENT_USER, KEY_SETTINGS, 0, NULL,
REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, &dwDisposition) == ERROR_SUCCESS) {
// effect
EFFECT effect;
MAP_GetEffect(hMap, EFFECT_SURROUND, &effect);
RegSetValueEx(hKey, NAME_SURROUND_ENABLE, 0, REG_DWORD, (LPBYTE)&effect.fEnable, sizeof(DWORD));
RegSetValueEx(hKey, NAME_SURROUND_RATE, 0, REG_DWORD, (LPBYTE)&effect.nRate, sizeof(DWORD));
MAP_GetEffect(hMap, EFFECT_3DCHORUS, &effect);
RegSetValueEx(hKey, NAME_3DCHORUS_ENABLE, 0, REG_DWORD, (LPBYTE)&effect.fEnable, sizeof(DWORD));
RegSetValueEx(hKey, NAME_3DCHORUS_RATE, 0, REG_DWORD, (LPBYTE)&effect.nRate, sizeof(DWORD));
MAP_GetEffect(hMap, EFFECT_REVERB, &effect);
RegSetValueEx(hKey, NAME_REVERB_ENABLE, 0, REG_DWORD, (LPBYTE)&effect.fEnable, sizeof(DWORD));
RegSetValueEx(hKey, NAME_REVERB_DELAY, 0, REG_DWORD, (LPBYTE)&effect.nDelay, sizeof(DWORD));
RegSetValueEx(hKey, NAME_REVERB_RATE, 0, REG_DWORD, (LPBYTE)&effect.nRate, sizeof(DWORD));
MAP_GetEffect(hMap, EFFECT_ECHO, &effect);
RegSetValueEx(hKey, NAME_ECHO_ENABLE, 0, REG_DWORD, (LPBYTE)&effect.fEnable, sizeof(DWORD));
RegSetValueEx(hKey, NAME_ECHO_DELAY, 0, REG_DWORD, (LPBYTE)&effect.nDelay, sizeof(DWORD));
RegSetValueEx(hKey, NAME_ECHO_RATE, 0, REG_DWORD, (LPBYTE)&effect.nRate, sizeof(DWORD));
EQUALIZER eq;
MAP_GetEqualizer(hMap, &eq);
RegSetValueEx(hKey, NAME_EQ_ENABLE, 0, REG_DWORD, (LPBYTE)&eq.fEnable, sizeof(DWORD));
RegSetValueEx(hKey, NAME_EQ_PREAMP, 0, REG_DWORD, (LPBYTE)&eq.preamp, sizeof(DWORD));
RegSetValueEx(hKey, NAME_EQ_BANK1, 0, REG_DWORD, (LPBYTE)&eq.data[0], sizeof(DWORD));
RegSetValueEx(hKey, NAME_EQ_BANK2, 0, REG_DWORD, (LPBYTE)&eq.data[1], sizeof(DWORD));
RegSetValueEx(hKey, NAME_EQ_BANK3, 0, REG_DWORD, (LPBYTE)&eq.data[2], sizeof(DWORD));
RegSetValueEx(hKey, NAME_EQ_BANK4, 0, REG_DWORD, (LPBYTE)&eq.data[3], sizeof(DWORD));
RegSetValueEx(hKey, NAME_EQ_BANK5, 0, REG_DWORD, (LPBYTE)&eq.data[4], sizeof(DWORD));
RegSetValueEx(hKey, NAME_EQ_BANK6, 0, REG_DWORD, (LPBYTE)&eq.data[5], sizeof(DWORD));
RegSetValueEx(hKey, NAME_EQ_BANK7, 0, REG_DWORD, (LPBYTE)&eq.data[6], sizeof(DWORD));
RegSetValueEx(hKey, NAME_EQ_BANK8, 0, REG_DWORD, (LPBYTE)&eq.data[7], sizeof(DWORD));
RegSetValueEx(hKey, NAME_EQ_BANK9, 0, REG_DWORD, (LPBYTE)&eq.data[8], sizeof(DWORD));
RegSetValueEx(hKey, NAME_EQ_BANK10, 0, REG_DWORD, (LPBYTE)&eq.data[9], sizeof(DWORD));
int nLevel = MAP_GetBassBoostLevel(hMap);
RegSetValueEx(hKey, NAME_BASSBOOST, 0, REG_DWORD, (LPBYTE)&nLevel, sizeof(DWORD));
// window positions
RegSetValueEx(hKey, NAME_WINDOW_TOPMOST, 0, REG_DWORD, (LPBYTE)&m_fTopMost, sizeof(DWORD));
RegSetValueEx(hKey, NAME_WINDOW_LEFT, 0, REG_DWORD, (LPBYTE)&m_ptInitWnd.x, sizeof(DWORD));
RegSetValueEx(hKey, NAME_WINDOW_TOP, 0, REG_DWORD, (LPBYTE)&m_ptInitWnd.y, sizeof(DWORD));
// general settings
RegSetValueEx(hKey, NAME_PLAY_REPEAT, 0, REG_DWORD, (LPBYTE)&m_fRepeat, sizeof(DWORD));
RegSetValueEx(hKey, NAME_PLAY_SHUFFLE, 0, REG_DWORD, (LPBYTE)&m_fShuffle, sizeof(DWORD));
RegSetValueEx(hKey, NAME_DRAW_PEEK, 0, REG_DWORD, (LPBYTE)&m_fDrawPeek, sizeof(DWORD));
RegSetValueEx(hKey, NAME_TIME_REVERSE, 0, REG_DWORD, (LPBYTE)&m_fTimeReverse, sizeof(DWORD));
RegSetValueEx(hKey, NAME_SAVE_DEFLIST, 0, REG_DWORD, (LPBYTE)&m_fSaveDefList, sizeof(DWORD));
RegSetValueEx(hKey, NAME_ADD_EXISTING, 0, REG_DWORD, (LPBYTE)&m_fAddExisting, sizeof(DWORD));
RegSetValueEx(hKey, NAME_RESUME, 0, REG_DWORD, (LPBYTE)&m_fResume, sizeof(DWORD));
RegSetValueEx(hKey, NAME_RESUME_TRACK, 0, REG_DWORD, (LPBYTE)&m_nResumeTrack, sizeof(DWORD));
RegSetValueEx(hKey, NAME_RESUME_TIME, 0, REG_DWORD, (LPBYTE)&m_nResumeTime, sizeof(DWORD));
RegSetValueEx(hKey, NAME_PLAYONSTART, 0, REG_DWORD, (LPBYTE)&m_fPlayOnStart, sizeof(DWORD));
RegSetValueEx(hKey, NAME_TRAYICON, 0, REG_DWORD, (LPBYTE)&m_fTrayIcon, sizeof(DWORD));
RegSetValueEx(hKey, NAME_SEARCHSUBFOLDERS, 0, REG_DWORD, (LPBYTE)&m_fSearchSubFolders, sizeof(DWORD));
RegSetValueEx(hKey, NAME_SCROLLTITLE, 0, REG_DWORD, (LPBYTE)&m_fScrollTitle, sizeof(DWORD));
RegSetValueEx(hKey, NAME_LAST_DIR, 0, REG_SZ, (LPBYTE)m_szLastDir, sizeof(TCHAR) * (_tcslen(m_szLastDir) + 1));
RegSetValueEx(hKey, NAME_SKIN_FILE, 0, REG_SZ, (LPBYTE)m_szSkinFile, sizeof(TCHAR) * (_tcslen(m_szSkinFile) + 1));
RegSetValueEx(hKey, NAME_SLEEP_MINUTES, 0, REG_DWORD, (LPBYTE)&m_nSleepMinutes, sizeof(DWORD));
#ifdef _WIN32_WCE
RegSetValueEx(hKey, NAME_SLEEP_POWEROFF, 0, REG_DWORD, (LPBYTE)&m_fSleepPowerOff, sizeof(DWORD));
#endif
// decoder
RegSetValueEx(hKey, NAME_OUTPUT_BUFF, 0, REG_DWORD,
(LPBYTE)&m_Options.nOutputBufferLen, sizeof(DWORD));
RegSetValueEx(hKey, NAME_OUTPUT_PREBUFF, 0, REG_DWORD,
(LPBYTE)&m_Options.nOutputPrebuffer, sizeof(DWORD));
RegSetValueEx(hKey, NAME_OUTPUT_FADE, 0, REG_DWORD,
(LPBYTE)&m_Options.fFadeIn, sizeof(DWORD));
RegSetValueEx(hKey, NAME_SCAN_COMPLETELY, 0, REG_DWORD,
(LPBYTE)&m_Options.fScanMpegCompletely, sizeof(DWORD));
RegSetValueEx(hKey, NAME_SUPPRESS_ZERO, 0, REG_DWORD,
(LPBYTE)&m_Options.fSuppressZeroSamples, sizeof(DWORD));
RegSetValueEx(hKey, NAME_ALWAYSOPENDEV, 0, REG_DWORD,
(LPBYTE)&m_Options.fAlwaysOpenDevice, sizeof(DWORD));
// streaming
RegSetValueEx(hKey, NAME_STREAMING_BUFF, 0, REG_DWORD,
(LPBYTE)&m_StreamingOptions.nBuf, sizeof(DWORD));
RegSetValueEx(hKey, NAME_STREAMING_PREBUFF, 0, REG_DWORD,
(LPBYTE)&m_StreamingOptions.nPreBuf, sizeof(DWORD));
RegSetValueEx(hKey, NAME_STREAMING_USEPROXY, 0, REG_DWORD,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -