我需要在winapi C / C ++应用程序中使用Windows / system32 /中扩展名为* .mui的系统资源中的字符串。 F.e. winload.exe.mui。

“资源黑客”程序给我这个:

1 MESSAGETABLE
{
0x40000001,     "Обновление системы... (%5!Iu!%%)%r%0\r\n"
0xC0000002,     "Ошибка %4!lX! при операции обновления %1!Iu! из %2!Iu! (%3)%r%0\r\n"
0xC0000003,     "Неустранимая ошибка %4!lX! при операции обновл. %1!Iu! из %2!Iu! (%3)%r%0\r\n"
}


我如何提取地址为0x40000001的字符串并在winapi应用中使用?

最佳答案

需要使用FormatMessage

HMODULE resContainer = LoadLibrary(L"C:\\Windows\\System32\\ru-RU\\poqexec.exe.mui");

LPTSTR pBuffer;   // Buffer to hold the textual error description.
if (FormatMessage(
    FORMAT_MESSAGE_ALLOCATE_BUFFER | // Function will handle memory allocation.
    FORMAT_MESSAGE_FROM_HMODULE | // Using a module's message table.
    FORMAT_MESSAGE_IGNORE_INSERTS,
    resContainer, // Handle to the DLL.
    0x40000001, // Message identifier.
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language.
    (LPTSTR)&pBuffer, // Buffer that will hold the text string.
    256, // Allocate at least this many chars for pBuffer.
    NULL // No insert values.
    ))
{
    MessageBox(0, pBuffer, 0, 0);
    LocalFree(pBuffer);
}

10-01 12:37