Непонятно, логика его присутствия- экзешник- это первый параметр, чё ищем- третий, результат- возаращвемое значение, а второй чё такое? ...Но как бы то и был, вообще не понять, в msnd приведён пример где подставляются уже готовые известные числовые значение, а где их брать-то? Так-то я только ищу ресурс и мне про него ничего неизвестно, ни один из идентификторов кроме того, чо он по сути. Ищу иконку экзешника. Спасибо, откликнется Код (Text): hRes = FindResource((HMODULE)hExe, "хзчёписать", RT_ICON); if (hRes == NULL) { cout<< "Всё плохо"<< endl; } И вот ещё , в третий парамет чё писать, RT_GROUP_ICON или RT_ICON?
hRes = FindResource((HMODULE)hExe, MAKEINTRESOURCE(1), RT_ICON); Это для получения Raw данных иконки с номером 1. RT_GROUP_ICON это хидер для иконок.
Ну вот опят за рыбу деньги, так мне же неизвестно чё сюда писать MAKEINTRESOURCE(сюда) Я же говорю- мне ничего неизвестно об иконке кроме того, что она есть. И да, по ссылке я сходил и не только по ней а вот ещё и сюда: http://msdn.microsoft.com/en-us/lib...48008(v=vs.85).aspx#_win32_Updating_Resources Код (Text): #define IDD_HAND_ABOUTBOX 103 ///Тут всякий разный код hRes = FindResource(hExe, MAKEINTRESOURCE(IDD_HAND_ABOUTBOX), RT_DIALOG); if (hRes == NULL) { ErrorHandler(TEXT("Could not locate dialog box.")); return; } Нормально? Это то, о чём я говорю. Челы подставлят известное им числовое значение 103, а где его берут неизвестно и я не вижу честное слово, где бы это было написано
amvoz 1) в *.rc файле IDD_HAND_ABOUTBOX ICON DISCARDABLE "1.ico" 2) в коде: hRes = FindResource(0, MAKEINTRESOURCE(IDD_HAND_ABOUTBOX), "ICON"); hResLoad = LoadResource(0, hRes); lpStubMapping = LockResource(hResLoad); 3) в "resource.h" #define IDD_HAND_ABOUTBOX 103
Ну да, всё так, вот я перечислил ресурсы некоторого экзешника, где из ресурсов- одна иконка и я их себе переписал: Код (Text): Имя типа в виде числа 3 Имя ресурса в виде числа 1 Имя языка в виде числа 1033 Имя типа в виде числа 14 Имя ресурса в виде числа 2373288 Имя языка в виде числа 1033 А теперь я пишу исходник, который должен эти ресурсы как бы стырить, и вот я тырю сперва один ресурс а потом второй Код (Text): FindResource(0, (чё сюда писать?), (и сюда?)); Ну я не знаю, у меня ума хватает только на: Код (Text): FindResource((HMODULE)hExe, 1, 3); Естественно, компилятор ругается на это. +++++++++++++++++++++++++++++++++++++++++++++= А если использовать MAKEINTRESOURCEA, как преддложено выше Код (Text): FindResource((HMODULE)hExe, MAKEINTRESOURCEA(1), ??); , то я посмотрел чё это за макрос Код (Text): #define MAKEINTRESOURCEA(i) (LPSTR)((DWORD)((WORD)(i))) #define MAKEINTRESOURCEW(i) (LPWSTR)((DWORD)((WORD)(i))) Так он чё, преобразует единицу к указателю на какую-то область памяти (какую-то там строку)???? (HRSRC FindResource(HMODULE hModule, LPCTSTR lpName,LPCTSTR lpType))
Да, очевидно ведь. О циклах не слышали? Если хотите извлечь иконку, то RT_GROUP_ICON это ICO хидер, с одной поправкой заместо raw оффсетов как в файле там имя иконки из группы RT_ICON
отнюдь, я не просто так спрашиваю: Код (Text): if (!(hRes = FindResource((HMODULE)hExe, MAKEINTRESOURCEA(1), MAKEINTRESOURCEA(3)))) { cout<< "всё плохо"<< endl; }; getchar (); А потом приаттачиваюсь OLLyDbg к процессу и в памяти наблюдаю, что таких адресов-то там в помине нет, ни единицы, ни тройки, там адресация начинается с 10000!
В чем вопрос-то? Я вас не понимаю? Если offset < 0x10000 то это числовое имя, если больше то это адрес на UNICODE строку. Что тут не понятного?
Меня умные слова офсет, юникод. числовое имя я прочая путают. Программа использует адрес 1, а такого адреса нет! Всё нормально? Вас не смущает? Ну ладно, может кто другой ответит. Как ещё объяснить, я не знаю.
amvoz Преобразование к указателю — чисто формальная операция. Чтобы компилятор не ругался. Само числовое значение как было, так и останется единицей (или тройкой), и, естесственно, не станет по волшебству указывать на выделенную память. Выделенное жирным неверно. 2373288 = 0x2436A8 > 0xFFFF => ресурс имеет строковое имя (IS_INTRESOURCE вернёт false).
Всё же правильно? Код (Text): if ((IS_INTRESOURCE(lpType))) printf("Имя ресурса в виде числа %d\n", lpName); else printf("Имя ресурса строчное %s\n", lpName); получается большое-большое число