📄 skinlist.cpp
字号:
/**************************************************************************************
* *
* *
**************************************************************************************/
#include "SkinList.h"
#include <windows.h>
#include <string.h>
#include <stdlib.h>
/*
* 外壳信息类
*/
SkinInfo::SkinInfo(char *directory) {
this->directory = (char *) new char[strlen(directory)+1];
this->directory = strcpy(this->directory, directory);
this->directory[strlen(directory)] = '\0';
this->name = strrchr(this->directory, '\\') + 1;
if(name == NULL) {
name = directory;
}
}
SkinInfo::~SkinInfo() {
free(this->directory);
}
/*
* 外壳链表类
*/
SkinList::SkinList() {
this->totalSkins = 0;
this->skins = NULL;
this->skinsDir = NULL;
/*
* 从注册表中得到链表路径
*/
HKEY key;
DWORD created, size, type;
LONG result;
/*
* 打开注册键
*/
result = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\DivXNetworks\\ThePlaya",
0, "CONFIG", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
NULL, &key, &created);
if(result != ERROR_SUCCESS) {
MessageBox(NULL, "Couldn't load skins directories", "", MB_OK);
return;
}
switch(created) {
case REG_CREATED_NEW_KEY:
/*
* 第一次启动(缺省)
*
*/
this->skinsDir = NULL;
break;
case REG_OPENED_EXISTING_KEY:
/*
* 读值
*/
this->skinsDir = (char *) new char[MAX_PATH];
size = MAX_PATH;
result = RegQueryValueEx(key, "SkinsDir", 0, &type, (BYTE *)this->skinsDir, &size);
if(result == ERROR_MORE_DATA) {
this->skinsDir = (char *) realloc(this->skinsDir, size);
result = RegQueryValueEx(key, "SkinsDir", 0, &type, (BYTE *)this->skinsDir, &size);
}
if(result != ERROR_SUCCESS) {
free(this->skinsDir);
this->skinsDir = NULL;
}
break;
default:
break;
}
RegCloseKey(key);
}
SkinList::~SkinList() {
free(this->skinsDir);
}
void SkinList::Add(SkinInfo *skinInfo) {
skinlist_t *node;
node = (skinlist_t *) new skinlist_t;
node->info = skinInfo;
node->next = this->skins;
this->skins = node;
this->totalSkins++;
}
int SkinList::SetDir(char *dir) {
this->skinsDir = dir;
HKEY key;
DWORD created;
LONG result;
/*
* 尝试打开注册键
*/
result = RegCreateKeyEx(HKEY_CURRENT_USER, "Software\\DivXNetworks\\ThePlaya",
0, "CONFIG", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
NULL, &key, &created);
if(result != ERROR_SUCCESS) {
MessageBox(NULL, "Couldn't save skins dir", "", MB_OK);
return 0;
}
RegSetValueEx(key, "SkinsDir", 0, REG_SZ, (BYTE *) this->skinsDir, strlen(this->skinsDir));
return 1;
}
int SkinList::Scan() {
this->totalSkins = 0;
this->skins = NULL;
if(this->skinsDir != NULL && strcmp(this->skinsDir, "Default") != 0) {
WIN32_FIND_DATA dirData;
HANDLE hFind = NULL, hSkin = NULL;
char *str;
str = (char *) new char[(strlen(this->skinsDir))];
strcpy(str, this->skinsDir);
hFind = FindFirstFile(strcat(str, "\\*.*"), &dirData);
if(hFind != NULL) {
if(strcmp(dirData.cFileName, ".") != 0 && strcmp(dirData.cFileName, "..") != 0) {
if(dirData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
this->Add(new SkinInfo(dirData.cFileName));
}
}
while(FindNextFile(hFind, &dirData)) {
if(strcmp(dirData.cFileName, ".") != 0 && strcmp(dirData.cFileName, "..") != 0) {
if(dirData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
char filename[MAX_PATH];
strcpy(filename, this->skinsDir);
strcat(strcat(filename, "\\"), dirData.cFileName);
this->Add(new SkinInfo(filename));
}
}
}
FindClose(hFind);
}
}
return 0;
}
int Reset() {
return 0;
}
int SkinList::getNumberOfSkins() {
return this->totalSkins;
}
SkinInfo *SkinList::getSkinInfo(int position) {
if(position >= 0 && position < this->totalSkins) {
int i;
skinlist_t *node;
node = this->skins;
for(i = 0; i < position; i++) {
node = node->next;
}
return node->info;
}
return NULL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -