Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 665

/ вопрос решён /

Доброго времени суток, уважаемые эксперты! Рад приветсвовать вас.

Суть вопроса заключается в следущем, как можно вытащить картинки из следущих файлов программными средствами???

C:\Windows\System32\
imageres.dll
shell32.dll
mmres.dll
DDORes.dll

Очень нужно помогите пожалуйста.

winner13 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: winner13 (статус: 1-ый класс)
Вопрос отправлен: 6 октября 2011, 01:11
Состояние вопроса: решён, ответов: 2.

Ответ #1. Отвечает эксперт: Localiz

Здравствуйте, winner13!
вот простая программа IconLover
http://www.aha-soft.com/iconlover/

Ответ отправил: Localiz (статус: 1-ый класс)
Время отправки: 6 октября 2011, 08:05

Ответ #2. Отвечает эксперт: Мережников Андрей

Здравствуйте, winner13!
В DelphiWorld есть такой код для вытаскивания иконок (если конечно нужны иконки) - см.приложение

Приложение:
  1.  
  2.  
  3.  
  4.  
  5. type ThIconArray = array[0..0] of hIcon;
  6. type PhIconArray = ^ThIconArray;
  7.  
  8. function ExtractIconExA(lpszFile: PAnsiChar;
  9. nIconIndex: Integer;
  10. phiconLarge : PhIconArray;
  11. phiconSmall: PhIconArray;
  12. nIcons: UINT): UINT; stdcall;
  13. external 'shell32.dll' name 'ExtractIconExA';
  14.  
  15. function ExtractIconExW(lpszFile: PWideChar;
  16. nIconIndex: Integer;
  17. phiconLarge: PhIconArray;
  18. phiconSmall: PhIconArray;
  19. nIcons: UINT): UINT; stdcall;
  20. external 'shell32.dll' name 'ExtractIconExW';
  21.  
  22. function ExtractIconEx(lpszFile: PAnsiChar;
  23. nIconIndex: Integer;
  24. phiconLarge : PhIconArray;
  25. phiconSmall: PhIconArray;
  26. nIcons: UINT): UINT; stdcall;
  27. external 'shell32.dll' name 'ExtractIconExA';
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36. procedure TForm1.Button1Click(Sender: TObject);
  37. var
  38. NumIcons: integer;
  39. pTheLargeIcons: phIconArray;
  40. pTheSmallIcons: phIconArray;
  41. LargeIconWidth: integer;
  42. SmallIconWidth: integer;
  43. SmallIconHeight: integer;
  44. i: integer;
  45. TheIcon: TIcon;
  46. TheBitmap: TBitmap;
  47. begin
  48. NumIcons :=
  49. ExtractIconEx('C:\Program Files\Borland\Delphi 3\BIN\delphi32.exe',
  50. -1, nil, nil, 0);
  51. if NumIcons > 0 then
  52. begin
  53. LargeIconWidth := GetSystemMetrics(SM_CXICON);
  54. SmallIconWidth := GetSystemMetrics(SM_CXSMICON);
  55. SmallIconHeight := GetSystemMetrics(SM_CYSMICON);
  56. GetMem(pTheLargeIcons, NumIcons * sizeof(hIcon));
  57. GetMem(pTheSmallIcons, NumIcons * sizeof(hIcon));
  58. FillChar(pTheLargeIcons^, NumIcons * sizeof(hIcon), #0);
  59. FillChar(pTheSmallIcons^, NumIcons * sizeof(hIcon), #0);
  60. ExtractIconEx('C:\Program Files\Borland\Delphi 3\BIN\delphi32.exe',
  61. 0, pTheLargeIcons, pTheSmallIcons, numIcons);
  62. {$IFOPT R+}
  63. {$DEFINE CKRANGE}
  64. {$R-}
  65. {$ENDIF}
  66. for i := 0 to (NumIcons - 1) do
  67. begin
  68. DrawIcon(Form1.Canvas.Handle, i * LargeIconWidth, 0, pTheLargeIcons^[i]);
  69. TheIcon := TIcon. Create;
  70. TheBitmap := TBitmap.Create;
  71. TheIcon.Handle := pTheSmallIcons^[i];
  72. TheBitmap.Width := TheIcon.Width;
  73. TheBitmap.Height := TheIcon.Height;
  74. TheBitmap.Canvas.Draw(0, 0, TheIcon);
  75. TheIcon.Free;
  76. Form1.Canvas.StretchDraw(Rect(i * SmallIconWidth,
  77. 100, (i + 1) * SmallIconWidth, 100 + SmallIconHeight), TheBitmap);
  78. TheBitmap.Free;
  79. end;
  80. {$IFDEF CKRANGE}
  81. {$UNDEF CKRANGE}
  82. {$R+}
  83. {$ENDIF}
  84. FreeMem(pTheLargeIcons, NumIcons * sizeof(hIcon));
  85. FreeMem(pTheSmallIcons, NumIcons * sizeof(hIcon));
  86. end;
  87. end;
  88.  
  89.  
  90.  


Ответ отправил: Мережников Андрей (статус: Абитуриент)
Время отправки: 6 октября 2011, 20:28
Оценка за ответ: 5

Комментарий к оценке: Спасибо.

Мини-форум вопроса

Всего сообщений: 12; последнее сообщение — 13 октября 2011, 17:23; участников в обсуждении: 4.
Amidamaru

Amidamaru (статус: 4-ый класс), 6 октября 2011, 01:40 [#1]:

картинки? иконки?
тогда копай в сторону LoadIcon
если же именно картинки (bmp например)
то наверно тебе будет нужен LoadImage (он тоже может загружать иконки)
чтобы получить значение для параметра hinst, наверное нужно вызвать LoadLibrary
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.
min@y™

min@y™ (статус: Доктор наук), 6 октября 2011, 08:12 [#2]:

Тебе надо написать программу для вытаскивания ресурсов или готовая прога подойдёт?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
winner13

winner13 (статус: 1-ый класс), 6 октября 2011, 18:55 [#3]:

Угу в том и дело, что нужно писать программу, вытаскивающую из ресурсов картинки, спасибо за подсказку готовой программы, но что то типа такой же только с хотябы минимальным функционалом нужно. Основное ТЗ, это вытаскивать именно ресурс из рпедставленных мной выше фалов.
Не решимых проблем нет, есть неприятные для нас решения.
winner13

winner13 (статус: 1-ый класс), 7 октября 2011, 14:19 [#4]:

=( Мда , оказывается нужно вытаскивать изображения фоновых каритнок виндовс, начиная от фона окон, заканчивая фоном исполняймых модулей... Помогите пожалуйста... Где все фоновые картинки в windows хранятся???
Не решимых проблем нет, есть неприятные для нас решения.
min@y™

min@y™ (статус: Доктор наук), 7 октября 2011, 14:47 [#5]:

Цитата (winner13):

Где все фоновые картинки в windows хранятся???

А что такое фоновые картинки?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Вадим К

Вадим К (статус: Академик), 7 октября 2011, 14:47 [#6]:

а что такое "фоновые картинки" ? картинка рабочего стола?
Галочка "подтверждения прочтения" - вселенское зло.
winner13

winner13 (статус: 1-ый класс), 8 октября 2011, 00:08 [#7]:

Нет фоновые картинки к примеру вот,

http://res2.windows.microsoft.com/resbox/ru-RU/Windows%207/Main/d593c384-8b1c-4f74-ac25-74c8a3e6e1b2_0.png тут фоновая картинка в панеле, картинка откудато из системы подгружается.

http://www.hackzone.ru/content/users/3243/Activation.JPG
Вот тут ключики и синенький фон, тоже из системы откудато подгружается.

http://img.x-drivers.ru/articles/54/windows_geniune.jpg тут логотипи синенький фон тоже из системы подгружается.

Нужно приложение научить рандомно испльзовать вот эти погружаймые фоны, для солидности. И мне как обучающий пример или опыт будет.(Если справлюсь и найду где это всё хранится, и научусь вытаскивать)
Не решимых проблем нет, есть неприятные для нас решения.
min@y™

min@y™ (статус: Доктор наук), 8 октября 2011, 09:08 [#8]:

Могу дать свой пример программы, которая выдирает и отображает игральные карты из стандартной cards.dll.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
winner13

winner13 (статус: 1-ый класс), 8 октября 2011, 23:15 [#9]:

Буду очень рад примеру +)
Не решимых проблем нет, есть неприятные для нас решения.
min@y™

min@y™ (статус: Доктор наук), 9 октября 2011, 09:00 [#10]:

Цитата (winner13):

Буду очень рад примеру +)

Забирай тут.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
winner13

winner13 (статус: 1-ый класс), 11 октября 2011, 11:54 [#11]:

Наверное будет следующий вопрос, а как теперь из сторонних dll вытаскивать ресурсы не зная их номеров ...
Не решимых проблем нет, есть неприятные для нас решения.
winner13

winner13 (статус: 1-ый класс), 13 октября 2011, 17:23 [#12]:

var
h: THandle;
B : TBitmap;
begin
h := LoadLibrary("MULTYRES.DLL");
b := TBitmap.Create;
if h <= 32 then
ShowMessage("Bad Dll Load")
else
begin
b.LoadFromResourceName(h, "B1");
Image1.Picture.Bitmap.Assign(b);
FreeLibrary(h);
end;
Не решимых проблем нет, есть неприятные для нас решения.

13 октября 2011, 17:23: Статус вопроса изменён на решённый (изменил автор вопроса — winner13)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:28
Выполнено за 0.02 сек.