#include #include #include #include #include using namespace std; vector getArgs() { vector args; int argc; wchar_t** argv = CommandLineToArgvW(GetCommandLineW(), &argc); if (argv) { args.assign(argv, argv + argc); LocalFree(argv); } return args; } wstring escapeAndQuote(const wstring& s) { wstring result(L"\""); for (wstring::const_iterator i = s.begin(); i != s.end(); ++i) { const wchar_t c = *i; const wstring::const_iterator next = i + 1; if (c == L'"' || (c == L'\\' && (next == s.end() || *next == L'"'))) { result += L'\\'; } result += c; } result += L'"'; return result; } int main() { const vector argv = getArgs(); wstring args; if (argv.size() > 1) { for (vector::const_iterator i = argv.begin() + 1; i != argv.end(); ++i) { if (i != argv.begin() + 1) { args += L" "; } args += escapeAndQuote(*i); } } const int error_code = reinterpret_cast( ShellExecuteW(NULL, L"open", L"wmplayer.exe", args.c_str(), NULL , SW_SHOWNORMAL)); if (error_code < 33) { return EXIT_FAILURE; } } // g++ -Wall -Wextra redirect_to_wmp.cc -o redirect_to_wmp -O3 -s -mwindows && upx --best redirect_to_wmp.exe