Каждая функция Windows имеет 2 версии:
SystemParametersInfoA() // Ascii
SystemParametersInfoW() // Unicode
Версия, оканчивающаяся на W
, является wide character type
(то есть Unicode) версией функции. Все \ 0, которые вы видите, это то, что каждый возвращаемый символ находится в Юникоде - 16 байт на символ - второй байт равен 0. Поэтому вам нужно сохранить результат в массиве wchar_t
и использовать 1007 * вместо printf
wchar_t oldWallPaper[MAX_PATH];
result = SystemParametersInfo(SPI_GETDESKWALLPAPER, MAX_PATH-1, oldWallPaper, 0);
wprintf( L"Current desktop background is %s\n", oldWallPaper );
Так что вы можете использовать A
версию SystemParametersInfoA()
, если вы одержимы тем, что не используете Unicode. Однако, для записи, вы всегда должны использовать Unicode.
Обычно SystemParametersInfo()
- это макрос, который оценивается как версия W
, если в вашей системе определен UNICODE.