Files
hrynco-kswitcher/src/utilities.h
T

42 lines
1.3 KiB
C++

#pragma once
#include <algorithm>
#include <cwchar>
#include <filesystem>
#include <string>
#include <vector>
namespace ks
{
// Scan each time the menu opens, relative to the resident executable, not its working directory.
inline std::vector<std::filesystem::path> discoverUtilities(const std::filesystem::path &folder,
std::error_code &error)
{
error.clear();
std::vector<std::filesystem::path> result;
std::filesystem::directory_iterator it(folder, error), end;
if (error == std::errc::no_such_file_or_directory) error.clear();
while (!error && it != end)
{
std::error_code entryError;
if (_wcsicmp(it->path().extension().c_str(), L".exe") == 0 && it->is_regular_file(entryError))
result.push_back(it->path());
it.increment(error);
}
if (error) result.clear();
std::sort(result.begin(), result.end(), [](const auto &a, const auto &b) {
return _wcsicmp(a.filename().c_str(), b.filename().c_str()) < 0;
});
return result;
}
inline std::wstring utilityMenuLabel(const std::filesystem::path &path)
{
std::wstring label;
for (wchar_t ch : path.stem().wstring())
{
label += ch;
if (ch == L'&') label += ch; // Win32 uses ampersands for access keys.
}
return label;
}
}