1
0
mirror of synced 2025-01-19 01:24:15 +01:00

fix: Opening files with unicode names through the command line

This commit is contained in:
WerWolv 2022-10-07 10:14:24 +02:00
parent 210106901e
commit 484481f886
3 changed files with 26 additions and 2 deletions

View File

@ -188,6 +188,7 @@ namespace hex {
};
const ProgramArguments &getProgramArguments();
std::optional<std::u8string> getProgramArgument(int index);
float getTargetFPS();
void setTargetFPS(float fps);

View File

@ -11,6 +11,12 @@
#include <nlohmann/json.hpp>
#if defined(OS_WINDOWS)
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <shellapi.h>
#endif
namespace hex {
namespace ImHexApi::Common {
@ -399,6 +405,21 @@ namespace hex {
return impl::s_programArguments;
}
std::optional<std::u8string> getProgramArgument(int index) {
if (index >= impl::s_programArguments.argc) {
return std::nullopt;
}
#if defined(OS_WINDOWS)
std::wstring wideArg = ::CommandLineToArgvW(::GetCommandLineW(), &impl::s_programArguments.argc)[index];
std::string byteArg = std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t>().to_bytes(wideArg);
return std::u8string(byteArg.begin(), byteArg.end());
#else
return std::u8string(reinterpret_cast<const char8_t *>(impl::s_programArguments.argv[index]));
#endif
}
static float s_targetFPS = 60.0F;

View File

@ -54,8 +54,10 @@ int main(int argc, char **argv, char **envp) {
if (argc == 1)
; // No arguments provided
else if (argc >= 2) {
for (auto i = 1; i < argc; i++)
EventManager::post<RequestOpenFile>(argv[i]);
for (auto i = 1; i < argc; i++) {
if (auto argument = ImHexApi::System::getProgramArgument(i); argument.has_value())
EventManager::post<RequestOpenFile>(argument.value());
}
}
try {