Страницы

Поиск по вопросам

четверг, 26 декабря 2019 г.

Как вытащить строку из системных mui файлов?

#winapi


Мне нужно использовать строку из системных ресурсов которые находятся в c:\windows\system32
и имеют расширение *mui. Например poqexec.exe.mui. Программа Resource hacker выдаёт
такую структуру

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 и использовать в дальнейшем в моей программе?

Пробую что-то типа этого:

HMODULE resContainer = LoadLibrary(L"C:\\Windows\\System32\\ru-RU\\poqexec.exe.mui");
HRSRC myResource= FindResource(resContainer, MAKEINTRESOURCE(0x40000001), RT_MESSAGETABLE);
HGLOBAL myResourceData = LoadResource(resContainer, myResource);

    


Ответы

Ответ 1



Для этого есть функция FormatMessage. Ваше приложение должно иметь ту же архитектуру (32бит или 64бит), что и DLL. 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); }

Комментариев нет:

Отправить комментарий