Fixed line endings and applied gitignore

This commit is contained in:
2014-07-26 09:43:40 +03:00
parent 0c57cabe56
commit 7cba5cc109
542 changed files with 112014 additions and 119759 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,285 +1,285 @@
/*
Copyright (C) 2012 Brian Ferguson
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include "StdAfx.h"
#include <wrl/client.h>
enum MeasureType
{
TYPE_FOLDERPATH,
TYPE_FOLDERSIZE,
TYPE_FILECOUNT,
TYPE_FOLDERCOUNT,
TYPE_FILENAME,
TYPE_FILETYPE,
TYPE_FILESIZE,
TYPE_FILEDATE,
TYPE_FILEPATH,
TYPE_ICON
};
enum DateType
{
DTYPE_MODIFIED,
DTYPE_CREATED,
DTYPE_ACCESSED
};
enum SortType
{
STYPE_NAME,
STYPE_SIZE,
STYPE_TYPE,
STYPE_DATE
};
enum IconSize
{
IS_SMALL = 1, // 16x16
IS_MEDIUM = 0, // 32x32
IS_LARGE = 2, // 48x48
IS_EXLARGE = 4 // 256x256
};
enum RecursiveType
{
RECURSIVE_NONE,
RECURSIVE_PARTIAL,
RECURSIVE_FULL
};
struct FileInfo
{
std::wstring fileName;
std::wstring path;
std::wstring ext;
bool isFolder;
UINT64 size;
FILETIME createdTime;
FILETIME modifiedTime;
FILETIME accessedTime;
FileInfo() :
fileName(L""),
path(L""),
ext(L""),
isFolder(false),
size(0),
createdTime(),
modifiedTime(),
accessedTime() { }
};
struct ChildMeasure;
struct ParentMeasure
{
std::wstring path;
std::wstring wildcardSearch;
SortType sortType;
DateType sortDateType;
int count;
RecursiveType recursiveType;
bool sortAscending;
bool showDotDot;
bool showFile;
bool showFolder;
bool showHidden;
bool showSystem;
bool hideExtension;
std::vector<std::wstring> extensions;
std::wstring finishAction;
std::vector<ChildMeasure*> iconChildren;
std::vector<FileInfo> files;
int fileCount;
int folderCount;
UINT64 folderSize;
bool needsUpdating;
bool needsIcons;
int indexOffset;
HANDLE thread;
void* rm;
HWND hwnd;
void* skin;
LPCWSTR name;
ChildMeasure* ownerChild;
ParentMeasure() :
path(),
wildcardSearch(),
folderSize(0),
sortType(STYPE_NAME),
sortDateType(DTYPE_MODIFIED),
count(0),
sortAscending(true),
showDotDot(true),
showFile(true),
showFolder(true),
showHidden(true),
showSystem(false),
hideExtension(false),
extensions(),
finishAction(),
iconChildren(),
files(),
skin(nullptr),
name(),
ownerChild(nullptr),
rm(),
hwnd(),
thread(nullptr),
fileCount(0),
folderCount(0),
needsUpdating(true),
needsIcons(true),
indexOffset(0),
recursiveType(RECURSIVE_NONE) { }
};
struct ChildMeasure
{
MeasureType type;
DateType date;
IconSize iconSize;
std::wstring iconPath;
int index;
bool ignoreCount;
std::wstring strValue;
ParentMeasure* parent;
ChildMeasure() :
type(TYPE_FOLDERPATH),
date(DTYPE_MODIFIED),
iconSize(IS_LARGE),
iconPath(),
index(1),
ignoreCount(false),
strValue(),
parent(nullptr) { }
};
std::vector<std::wstring> Tokenize(const std::wstring& str, const std::wstring& delimiters)
{
std::vector<std::wstring> tokens;
std::wstring::size_type lastPos = str.find_first_not_of(delimiters, 0);
std::wstring::size_type pos = str.find_first_of(delimiters, lastPos);
while (std::wstring::npos != pos || std::wstring::npos != lastPos)
{
tokens.emplace_back(str.substr(lastPos, pos - lastPos));
lastPos = str.find_first_not_of(delimiters, pos);
pos = str.find_first_of(delimiters, lastPos);
}
return tokens;
}
void GetParentFolder(std::wstring& path)
{
std::vector<std::wstring> tokens = Tokenize(path, L"\\");
if (tokens.size() < 2)
{
path.clear();
}
else
{
path.clear();
for (size_t i = 0; i < tokens.size() - 1; ++i)
{
path += tokens[i];
path += L"\\";
}
}
}
bool ShowContextMenu(HWND hwnd, std::wstring& path)
{
POINT pos;
GetCursorPos(&pos);
// If the mouse is outside of the boundaries of
// the skin, use the upper-left corner of the skin
RECT rect;
GetWindowRect(hwnd, &rect);
if (pos.x < rect.left || pos.x > rect.right ||
pos.y < rect.top || pos.y > rect.bottom)
{
pos.x = rect.left;
pos.y = rect.top;
}
ITEMIDLIST* id = nullptr;
HRESULT result = SHParseDisplayName(path.c_str(), nullptr, &id, 0, nullptr);
if (!SUCCEEDED(result) || !id)
return false;
Microsoft::WRL::ComPtr<IShellFolder> iFolder = nullptr;
LPCITEMIDLIST idChild = nullptr;
result = SHBindToParent(id, IID_IShellFolder, (void**)&iFolder, &idChild);
if (!SUCCEEDED(result) || !iFolder)
return false;
Microsoft::WRL::ComPtr<IContextMenu> iMenu = nullptr;
result = iFolder->GetUIObjectOf(hwnd, 1, (const ITEMIDLIST **)&idChild, IID_IContextMenu, nullptr, (void**)&iMenu);
if (!SUCCEEDED(result) || !iFolder)
return false;
HMENU hMenu = CreatePopupMenu();
if (!hMenu)
return false;
if (SUCCEEDED(iMenu->QueryContextMenu(hMenu, 0, 1, 0x7FFF, CMF_NORMAL)))
{
int iCmd = TrackPopupMenuEx(hMenu, TPM_RETURNCMD, pos.x, pos.y, hwnd, NULL);
if (iCmd > 0)
{
CMINVOKECOMMANDINFOEX info = { 0 };
info.cbSize = sizeof(info);
info.fMask = CMIC_MASK_UNICODE | CMIC_MASK_ASYNCOK;
info.hwnd = hwnd;
info.lpVerb = MAKEINTRESOURCEA(iCmd - 1);
info.lpVerbW = MAKEINTRESOURCEW(iCmd - 1);
info.nShow = SW_SHOWNORMAL;
iMenu->InvokeCommand((LPCMINVOKECOMMANDINFO)&info);
}
}
DestroyMenu(hMenu);
return true;
}
/*std::wstring UINT64_To_String(UINT64 value)
{
std::wstring result;
result.reserve(20); // Max of 20 digits possible
do
{
result += "0123456789"[value % 10];
value /= 10;
}
while(value);
std::reverse(result.begin(), result.end());
return result;
/*
Copyright (C) 2012 Brian Ferguson
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include "StdAfx.h"
#include <wrl/client.h>
enum MeasureType
{
TYPE_FOLDERPATH,
TYPE_FOLDERSIZE,
TYPE_FILECOUNT,
TYPE_FOLDERCOUNT,
TYPE_FILENAME,
TYPE_FILETYPE,
TYPE_FILESIZE,
TYPE_FILEDATE,
TYPE_FILEPATH,
TYPE_ICON
};
enum DateType
{
DTYPE_MODIFIED,
DTYPE_CREATED,
DTYPE_ACCESSED
};
enum SortType
{
STYPE_NAME,
STYPE_SIZE,
STYPE_TYPE,
STYPE_DATE
};
enum IconSize
{
IS_SMALL = 1, // 16x16
IS_MEDIUM = 0, // 32x32
IS_LARGE = 2, // 48x48
IS_EXLARGE = 4 // 256x256
};
enum RecursiveType
{
RECURSIVE_NONE,
RECURSIVE_PARTIAL,
RECURSIVE_FULL
};
struct FileInfo
{
std::wstring fileName;
std::wstring path;
std::wstring ext;
bool isFolder;
UINT64 size;
FILETIME createdTime;
FILETIME modifiedTime;
FILETIME accessedTime;
FileInfo() :
fileName(L""),
path(L""),
ext(L""),
isFolder(false),
size(0),
createdTime(),
modifiedTime(),
accessedTime() { }
};
struct ChildMeasure;
struct ParentMeasure
{
std::wstring path;
std::wstring wildcardSearch;
SortType sortType;
DateType sortDateType;
int count;
RecursiveType recursiveType;
bool sortAscending;
bool showDotDot;
bool showFile;
bool showFolder;
bool showHidden;
bool showSystem;
bool hideExtension;
std::vector<std::wstring> extensions;
std::wstring finishAction;
std::vector<ChildMeasure*> iconChildren;
std::vector<FileInfo> files;
int fileCount;
int folderCount;
UINT64 folderSize;
bool needsUpdating;
bool needsIcons;
int indexOffset;
HANDLE thread;
void* rm;
HWND hwnd;
void* skin;
LPCWSTR name;
ChildMeasure* ownerChild;
ParentMeasure() :
path(),
wildcardSearch(),
folderSize(0),
sortType(STYPE_NAME),
sortDateType(DTYPE_MODIFIED),
count(0),
sortAscending(true),
showDotDot(true),
showFile(true),
showFolder(true),
showHidden(true),
showSystem(false),
hideExtension(false),
extensions(),
finishAction(),
iconChildren(),
files(),
skin(nullptr),
name(),
ownerChild(nullptr),
rm(),
hwnd(),
thread(nullptr),
fileCount(0),
folderCount(0),
needsUpdating(true),
needsIcons(true),
indexOffset(0),
recursiveType(RECURSIVE_NONE) { }
};
struct ChildMeasure
{
MeasureType type;
DateType date;
IconSize iconSize;
std::wstring iconPath;
int index;
bool ignoreCount;
std::wstring strValue;
ParentMeasure* parent;
ChildMeasure() :
type(TYPE_FOLDERPATH),
date(DTYPE_MODIFIED),
iconSize(IS_LARGE),
iconPath(),
index(1),
ignoreCount(false),
strValue(),
parent(nullptr) { }
};
std::vector<std::wstring> Tokenize(const std::wstring& str, const std::wstring& delimiters)
{
std::vector<std::wstring> tokens;
std::wstring::size_type lastPos = str.find_first_not_of(delimiters, 0);
std::wstring::size_type pos = str.find_first_of(delimiters, lastPos);
while (std::wstring::npos != pos || std::wstring::npos != lastPos)
{
tokens.emplace_back(str.substr(lastPos, pos - lastPos));
lastPos = str.find_first_not_of(delimiters, pos);
pos = str.find_first_of(delimiters, lastPos);
}
return tokens;
}
void GetParentFolder(std::wstring& path)
{
std::vector<std::wstring> tokens = Tokenize(path, L"\\");
if (tokens.size() < 2)
{
path.clear();
}
else
{
path.clear();
for (size_t i = 0; i < tokens.size() - 1; ++i)
{
path += tokens[i];
path += L"\\";
}
}
}
bool ShowContextMenu(HWND hwnd, std::wstring& path)
{
POINT pos;
GetCursorPos(&pos);
// If the mouse is outside of the boundaries of
// the skin, use the upper-left corner of the skin
RECT rect;
GetWindowRect(hwnd, &rect);
if (pos.x < rect.left || pos.x > rect.right ||
pos.y < rect.top || pos.y > rect.bottom)
{
pos.x = rect.left;
pos.y = rect.top;
}
ITEMIDLIST* id = nullptr;
HRESULT result = SHParseDisplayName(path.c_str(), nullptr, &id, 0, nullptr);
if (!SUCCEEDED(result) || !id)
return false;
Microsoft::WRL::ComPtr<IShellFolder> iFolder = nullptr;
LPCITEMIDLIST idChild = nullptr;
result = SHBindToParent(id, IID_IShellFolder, (void**)&iFolder, &idChild);
if (!SUCCEEDED(result) || !iFolder)
return false;
Microsoft::WRL::ComPtr<IContextMenu> iMenu = nullptr;
result = iFolder->GetUIObjectOf(hwnd, 1, (const ITEMIDLIST **)&idChild, IID_IContextMenu, nullptr, (void**)&iMenu);
if (!SUCCEEDED(result) || !iFolder)
return false;
HMENU hMenu = CreatePopupMenu();
if (!hMenu)
return false;
if (SUCCEEDED(iMenu->QueryContextMenu(hMenu, 0, 1, 0x7FFF, CMF_NORMAL)))
{
int iCmd = TrackPopupMenuEx(hMenu, TPM_RETURNCMD, pos.x, pos.y, hwnd, NULL);
if (iCmd > 0)
{
CMINVOKECOMMANDINFOEX info = { 0 };
info.cbSize = sizeof(info);
info.fMask = CMIC_MASK_UNICODE | CMIC_MASK_ASYNCOK;
info.hwnd = hwnd;
info.lpVerb = MAKEINTRESOURCEA(iCmd - 1);
info.lpVerbW = MAKEINTRESOURCEW(iCmd - 1);
info.nShow = SW_SHOWNORMAL;
iMenu->InvokeCommand((LPCMINVOKECOMMANDINFO)&info);
}
}
DestroyMenu(hMenu);
return true;
}
/*std::wstring UINT64_To_String(UINT64 value)
{
std::wstring result;
result.reserve(20); // Max of 20 digits possible
do
{
result += "0123456789"[value % 10];
value /= 10;
}
while(value);
std::reverse(result.begin(), result.end());
return result;
}*/

View File

@ -1,40 +1,40 @@
#include <VerRsrc.h>
#include "../../Version.h"
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 2,0,3,0
PRODUCTVERSION PRODUCTVER
FILEFLAGSMASK 0x17L
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
#else
FILEFLAGS 0x0L
#endif
FILEOS VOS_NT_WINDOWS32
FILETYPE VFT_DLL
FILESUBTYPE VFT_UNKNOWN
{
BLOCK "StringFileInfo"
{
BLOCK "040904E4"
{
VALUE "FileVersion", "2.0.3.0"
VALUE "LegalCopyright", "<22> 2012 - Brian Ferguson"
VALUE "ProductName", "Rainmeter"
#ifdef _WIN64
VALUE "ProductVersion", STRPRODUCTVER " (64-bit)"
#else
VALUE "ProductVersion", STRPRODUCTVER " (32-bit)"
#endif //_WIN64
}
}
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x409, 1252
}
}
#include <VerRsrc.h>
#include "../../Version.h"
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 2,0,3,0
PRODUCTVERSION PRODUCTVER
FILEFLAGSMASK 0x17L
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
#else
FILEFLAGS 0x0L
#endif
FILEOS VOS_NT_WINDOWS32
FILETYPE VFT_DLL
FILESUBTYPE VFT_UNKNOWN
{
BLOCK "StringFileInfo"
{
BLOCK "040904E4"
{
VALUE "FileVersion", "2.0.3.0"
VALUE "LegalCopyright", "<22> 2012 - Brian Ferguson"
VALUE "ProductName", "Rainmeter"
#ifdef _WIN64
VALUE "ProductVersion", STRPRODUCTVER " (64-bit)"
#else
VALUE "ProductVersion", STRPRODUCTVER " (32-bit)"
#endif //_WIN64
}
}
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x409, 1252
}
}

View File

@ -1,47 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(SolutionDir)Build\VS\Rainmeter.Cpp.Default.props" />
<PropertyGroup Label="Globals">
<ProjectGuid>{64FDEE97-6B7E-40E5-A489-ECA322825BC8}</ProjectGuid>
<ConfigurationType>DynamicLibrary</ConfigurationType>
<TargetName>FileView</TargetName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<Import Project="$(SolutionDir)Build\VS\Rainmeter.Cpp.props" />
<Import Project="$(SolutionDir)Build\VS\RainmeterPlugin.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>_USRDLL;HAVE_CONFIG_H;SUPPORT_UTF8;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
</Link>
<Link>
<AdditionalDependencies>Shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="PluginFileView.h" />
<ClInclude Include="StdAfx.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="PluginFileView.cpp" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="PluginFileView.rc" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Common\Common.vcxproj">
<Project>{19312085-aa51-4bd6-be92-4b6098cca539}</Project>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(SolutionDir)Build\VS\Rainmeter.Cpp.Default.props" />
<PropertyGroup Label="Globals">
<ProjectGuid>{64FDEE97-6B7E-40E5-A489-ECA322825BC8}</ProjectGuid>
<ConfigurationType>DynamicLibrary</ConfigurationType>
<TargetName>FileView</TargetName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<Import Project="$(SolutionDir)Build\VS\Rainmeter.Cpp.props" />
<Import Project="$(SolutionDir)Build\VS\RainmeterPlugin.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>_USRDLL;HAVE_CONFIG_H;SUPPORT_UTF8;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
</Link>
<Link>
<AdditionalDependencies>Shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="PluginFileView.h" />
<ClInclude Include="StdAfx.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="PluginFileView.cpp" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="PluginFileView.rc" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Common\Common.vcxproj">
<Project>{19312085-aa51-4bd6-be92-4b6098cca539}</Project>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -1,13 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ResourceCompile Include="PluginFileView.rc" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="PluginFileView.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="PluginFileView.h" />
<ClInclude Include="StdAfx.h" />
</ItemGroup>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ResourceCompile Include="PluginFileView.rc" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="PluginFileView.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="PluginFileView.h" />
<ClInclude Include="StdAfx.h" />
</ItemGroup>
</Project>

View File

@ -1,41 +1,41 @@
/*
Copyright (C) 2012 Brian Ferguson
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef __STDAFX_H__
#define __STDAFX_H__
// WinAPI
#include <Windows.h>
#include <commctrl.h>
#include <commoncontrols.h>
#include <process.h>
#include <Shellapi.h>
#include <Shlwapi.h>
#include <ShlObj.h>
#include <VersionHelpers.h>
// STL
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
// Rainmeter API
#include "../API/RainmeterAPI.h"
/*
Copyright (C) 2012 Brian Ferguson
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef __STDAFX_H__
#define __STDAFX_H__
// WinAPI
#include <Windows.h>
#include <commctrl.h>
#include <commoncontrols.h>
#include <process.h>
#include <Shellapi.h>
#include <Shlwapi.h>
#include <ShlObj.h>
#include <VersionHelpers.h>
// STL
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
// Rainmeter API
#include "../API/RainmeterAPI.h"
#endif