Мне нужно использовать строку из системных ресурсов которые находятся в c:\windows\system32 и имеют расширение *mui. Например poqexec.exe.mui. Программа Resource hacker выдаёт такую структуру
1 MESSAGETABLE
{
0x40000001, "Обновление системы... (%5!Iu!%%)%r%0
"
0xC0000002, "Ошибка %4!lX! при операции обновления %1!Iu! из %2!Iu! (%3)%r%0
"
0xC0000003, "Неустранимая ошибка %4!lX! при операции обновл. %1!Iu! из %2!Iu! (%3)%r%0
"
}
Как мне вытащить строку по адресу 0x40000001 и использовать в дальнейшем в моей программе?
Пробую что-то типа этого:
HMODULE resContainer = LoadLibrary(L"C:\\Windows\\System32\
u-RU\\poqexec.exe.mui");
HRSRC myResource= FindResource(resContainer, MAKEINTRESOURCE(0x40000001), RT_MESSAGETABLE);
HGLOBAL myResourceData = LoadResource(resContainer, myResource);
Ответ
Для этого есть функция FormatMessage. Ваше приложение должно иметь ту же архитектуру (32бит или 64бит), что и DLL.
HMODULE resContainer = LoadLibrary(L"C:\\Windows\\System32\
u-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);
}
Комментариев нет:
Отправить комментарий