/* Copyright (C) 2012 Sebastian Herbord. All rights reserved. This file is part of Mod Organizer. Mod Organizer 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 3 of the License, or (at your option) any later version. Mod Organizer 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 Mod Organizer. If not, see . */ #ifndef UTIL_H #define UTIL_H #include #include #define WIN32_LEAN_AND_MEAN #include #include namespace MOShared { /// Test if a file (or directory) by the specified name exists bool FileExists(const std::string &filename); bool FileExists(const std::wstring &filename); bool FileExists(const std::wstring &searchPath, const std::wstring &filename); std::string ToString(const std::wstring &source, bool utf8); std::wstring ToWString(const std::string &source, bool utf8); std::string &ToLower(std::string &text); std::string ToLower(const std::string &text); std::wstring &ToLower(std::wstring &text); std::wstring ToLower(const std::wstring &text); bool CaseInsensitiveEqual(const std::wstring &lhs, const std::wstring &rhs); namespace env { class Module { public: explicit Module(QString path, std::size_t fileSize); const QString& path() const; QString displayPath() const; std::size_t fileSize() const; const QString& version() const; const QString& versionString() const; QString timestampString() const; QString toString() const; private: struct FileInfo { VS_FIXEDFILEINFO ffi; QString fileDescription; }; QString m_path; std::size_t m_fileSize; QString m_version; QDateTime m_timestamp; QString m_versionString; QString m_md5; FileInfo getFileInfo() const; QString getVersion(const VS_FIXEDFILEINFO& fi) const; QDateTime getTimestamp(const VS_FIXEDFILEINFO& fi) const; QString getMD5() const; VS_FIXEDFILEINFO getFixedFileInfo(std::byte* buffer) const; QString getFileDescription(std::byte* buffer) const; }; class WindowsVersion { public: WindowsVersion(); QString toString() const; private: DWORD m_realMajor, m_realMinor, m_realBuild; DWORD m_major, m_minor, m_build; QString m_buildLab, m_productName, m_releaseID; DWORD m_UBR; std::optional m_elevated; void getVersion(); void getRealVersion(HINSTANCE ntdll); void getReportedVersion(HINSTANCE ntdll); void getRelease(); void getElevated(); }; class Environment { public: Environment(); const std::vector& loadedModules(); const WindowsVersion& windowsVersion() const; private: std::vector m_modules; WindowsVersion m_windows; void getLoadedModules(); }; } // namespace env MOBase::VersionInfo createVersionInfo(); } // namespace MOShared #endif // UTIL_H