diff --git a/_tmain.cpp b/_tmain.cpp index 82b7eeb..9358e89 100644 --- a/_tmain.cpp +++ b/_tmain.cpp @@ -1,71 +1,78 @@ -#include -#include #include +#include +#include #include +#include +#include +#include #include "WinRarConfig.hpp" #include "WinRarKeygen.hpp" #include +std::string WideToUtf8(const std::wstring& wstr) { + if (wstr.empty()) return {}; + int size = WideCharToMultiByte(CP_UTF8, 0, wstr.data(), (int)wstr.size(), nullptr, 0, nullptr, nullptr); + std::string result(size, 0); + WideCharToMultiByte(CP_UTF8, 0, wstr.data(), (int)wstr.size(), &result[0], size, nullptr, nullptr); + return result; +} + +std::wstring Utf8ToWide(const std::string& str) { + if (str.empty()) return {}; + int size = MultiByteToWideChar(CP_UTF8, 0, str.data(), (int)str.size(), nullptr, 0); + std::wstring result(size, 0); + MultiByteToWideChar(CP_UTF8, 0, str.data(), (int)str.size(), &result[0], size); + return result; +} + void Help() { - _putts(TEXT("Please use the following command:\n")); - _putts(TEXT("Usage:")); - _putts(TEXT(" winrar-keygen.exe ")); - _putts(TEXT("")); - _putts(TEXT("Example:")); - _putts(TEXT(" winrar-keygen.exe \"Github\" \"Single PC usage license\"\n")); + std::wcout << L"Please use the following command:\n"; + std::wcout << L"Usage:\n"; + std::wcout << L" winrar-keygen.exe \n\n"; + std::wcout << L"Example:\n"; + std::wcout << L" winrar-keygen.exe \"GitHub\" \"Single PC usage license\"\n"; } void PrintRegisterInfo(const WinRarKeygen::RegisterInfo& Info) { - _tprintf_s(TEXT("%hs\n"), "RAR registration data"); - _tprintf_s(TEXT("%hs\n"), Info.UserName.c_str()); - _tprintf_s(TEXT("%hs\n"), Info.LicenseType.c_str()); - _tprintf_s(TEXT("UID=%hs\n"), Info.UID.c_str()); - for (size_t i = 0; i < Info.HexData.length(); i += 54) { - _tprintf_s(TEXT("%.54hs\n"), Info.HexData.c_str() + i); + std::wstring user = Utf8ToWide(Info.UserName); + std::wstring license = Utf8ToWide(Info.LicenseType); + std::wstring uid = Utf8ToWide(Info.UID); + std::wstring data = Utf8ToWide(Info.HexData); + + std::wcout << L"RAR registration data\n"; + std::wcout << user << L"\n"; + std::wcout << license << L"\n"; + std::wcout << L"UID=" << uid << L"\n"; + + for (size_t i = 0; i < data.length(); i += 54) { + std::wcout << data.substr(i, 54) << L"\n"; } } -std::string ToACP(PCWSTR lpszUnicodeString) { - int len; - - len = WideCharToMultiByte(CP_ACP, 0, lpszUnicodeString, -1, NULL, 0, NULL, NULL); - if (len == 0) { - auto err = GetLastError(); - throw std::system_error(err, std::system_category()); +int wmain(int argc, wchar_t* argv[]) { + SetConsoleOutputCP(CP_UTF8); // powershell code page set to 65001 + if (_setmode(_fileno(stdout), _O_U8TEXT) == -1) { + std::wcerr << L"Failed to set console to UTF-8 output mode.\n"; } - - std::string Result(len, '\x00'); - - len = WideCharToMultiByte(CP_ACP, 0, lpszUnicodeString, -1, Result.data(), static_cast(Result.length()), NULL, NULL); - if (len == 0) { - auto err = GetLastError(); - throw std::system_error(err, std::system_category()); - } - - while (Result.back() == '\x00') { - Result.pop_back(); - } - - return Result; -} - -int _tmain(int argc, PTSTR argv[]) { setlocale(LC_ALL, ""); + if (argc == 3) { try { + std::string user = WideToUtf8(argv[1]); + std::string license = WideToUtf8(argv[2]); + PrintRegisterInfo( -#if defined(_UNICODE) || defined(UNICODE) - WinRarKeygen::GenerateRegisterInfo(ToACP(argv[1]).c_str(), ToACP(argv[2]).c_str()) -#else - WinRarKeygen::GenerateRegisterInfo(argv[1], argv[2]) -#endif + WinRarKeygen::GenerateRegisterInfo(user.c_str(), license.c_str()) ); - } catch (std::exception& e) { - _tprintf_s(TEXT("%hs\n"), e.what()); + } + catch (std::exception& e) { + std::wcerr << L"Error: " << e.what() << L"\n"; return -1; } - } else { + } + else { Help(); } + return 0; } diff --git a/bin/Win32-Release/winrar-keygen.exe b/bin/Win32-Release/winrar-keygen.exe index 7d0c8fe..cd0a1fc 100644 Binary files a/bin/Win32-Release/winrar-keygen.exe and b/bin/Win32-Release/winrar-keygen.exe differ diff --git a/bin/x64-Release/winrar-keygen.exe b/bin/x64-Release/winrar-keygen.exe index 45a628e..5cae8d8 100644 Binary files a/bin/x64-Release/winrar-keygen.exe and b/bin/x64-Release/winrar-keygen.exe differ diff --git a/winrar-keygen.aps b/winrar-keygen.aps index cce83fa..54fd58a 100644 Binary files a/winrar-keygen.aps and b/winrar-keygen.aps differ diff --git a/winrar-keygen.rc b/winrar-keygen.rc index 737bbcd..ba3b4b9 100644 --- a/winrar-keygen.rc +++ b/winrar-keygen.rc @@ -51,8 +51,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 3,0,0,0 - PRODUCTVERSION 3,0,0,0 + FILEVERSION 3,1,0,0 + PRODUCTVERSION 3,1,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -69,12 +69,12 @@ BEGIN BEGIN VALUE "CompanyName", "WinRAR Keygen" VALUE "FileDescription", "WinRAR Key Generation Tool" - VALUE "FileVersion", "3.0.0.0" + VALUE "FileVersion", "3.1.0.0" VALUE "InternalName", "winrar-keygen.exe" - VALUE "LegalCopyright", "Copyright (C) 2024 MIT License" + VALUE "LegalCopyright", "Copyright (C) 2021 Bitcookies" VALUE "OriginalFilename", "winrar-keygen.exe" VALUE "ProductName", "WinRAR Keygen" - VALUE "ProductVersion", "3.0.0.0" + VALUE "ProductVersion", "3.1.0.0" END END BLOCK "VarFileInfo"