Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
1

Работа с ресурсами: извлечение файла на жесткий диск

01.09.2012, 14:25. Показов 2405. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Господа у меня в программе в ресурсах лежит файл .exe каким образом я могу его извлеч на жёсткий диск ? Примного буду благодарен за короткий примерчик .
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.09.2012, 14:25
Ответы с готовыми решениями:

Работа с ресурсами файла
Моя задача написать программу в среде Builder C++ которая будет изменять версию заданного файла...

Работа с ресурсами другого файла
У меня есть готовая dll(написанная на C#) Возможно ли сделать что бы мною написанная программа...

Жесткий диск не отображается в Bios'e на ноутбуке HP, при установке Windows 7 пишет, не удалось найти жесткий диск
Здравствуйте, я пишу в форум впервые, поэтому прошу меня извинить, если мой лексикон немного не...

Жесткий диск не виден в Bios'e на ноутбуке HP g6-2128sr, при установке Windows 7/8 пишет, не удалось найти жесткий диск
Всем доброго времени суток. Очень нуждаюсь в помощи с ноутбуком HP Pavilion G6-2128sr. Проблема...

11
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
01.09.2012, 15:08 2
C++
1
2
3
4
5
6
7
8
9
                HRSRC hResInfo = ::FindResource(hInst, MAKEINTRESOURCE(ID_EXE), RT_RCDATA);
                HGLOBAL hRes = ::LoadResource(hInst, hResInfo);
                LPVOID memRes = ::LockResource(hRes);
                DWORD sizeRes = ::SizeofResource(hInst, hResInfo);
 
                HANDLE hFile = ::CreateFile("F:\\myFile.exe", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
                DWORD dwWritten = 0;
                ::WriteFile(hFile, memRes, sizeRes, &dwWritten, NULL);
                ::CloseHandle(hFile);
, RC-файл имеет вид

#include "res.h"

ID_EXE RCDATA "tt.exe"
2
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
01.09.2012, 21:08  [ТС] 3
спасибо буду пробовать если что отпишусь

Добавлено через 23 минуты
UI, я не много изменил задание , но суть проблемы та же , пытаюсь иконку скопировать но он копирует , но появляется иконка в 0 байт , что я сделал не так ?
C++
1
2
3
4
5
6
7
8
9
hResInfo = ::FindResourceA(hin, MAKEINTRESOURCE(IDB_ICO), RT_ICON );
                 hRes = ::LoadResource(hin, hResInfo);
                 memRes = ::LockResource(hRes);
                 sizeRes = ::SizeofResource(hin, hResInfo);
 
 hFile = ::CreateFile("C:\\1.ico", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
                 dwWritten = 0;
                ::WriteFile(hFile, memRes, sizeRes, &dwWritten, NULL);
                ::CloseHandle(hFile);
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
01.09.2012, 22:08 4
Нет. С иконками так нельзя. У тебя уже на FindResourceA будет проблема, она вернет NULL. Так?

Ищи RT_GROUP_ICON, а потом - уже внутри группы - ищи саму иконку.
1
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
01.09.2012, 23:00  [ТС] 5
UI, можете что нибудь посоветовать почитать или ссылочку дать , где можно почитать , что бы не задавать глупых вопросов и по пустикам не безпокоить.

Добавлено через 12 минут
блин и с .exe таже система создаётся файл в нём 0 байт
C++
1
2
3
4
5
6
7
8
9
10
hResInfo = ::FindResourceA(hin, MAKEINTRESOURCE(IDB_PROG), RT_RCDATA );
                 hRes = ::LoadResource(hin, hResInfo);
                 memRes = ::LockResource(hRes);
                 sizeRes = ::SizeofResource(hin, hResInfo);
 
 hFile = ::CreateFile("C:\\1.exe", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
                 dwWritten = 0;
                ::WriteFile(hFile, memRes, sizeRes, &dwWritten, NULL);
              
                ::CloseHandle(hFile);
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
01.09.2012, 23:09 6
Лучший ответ Сообщение было отмечено volvo как решение

Решение

Цитата Сообщение от Игорь с++ Посмотреть сообщение
блин и с .exe таже система создаётся файл в нём 0 байт
У меня вытаскивается полностью. Вот проект: по клику мышью в окне выбросит файл "empty.exe" из ресурсов в папку D:\test под именем myFile.exe (с иконками - чуть позже сделаю пример)
Вложения
Тип файла: zip work_res.zip (55.1 Кб, 59 просмотров)
1
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
02.09.2012, 00:38  [ТС] 7
Хм я конечго извеняюсь , но делаю пустой проект в Dev C++ тупо пихаю ваш код , у меня не работает , ваш exe - шник отрабатывает на УРА !!!!!!!!!
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
02.09.2012, 00:48 8
Ну, тогда прикрепи свой проект.
0
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
02.09.2012, 00:52  [ТС] 9
Вот пожалуйста
Вложения
Тип файла: rar Project.rar (501.9 Кб, 26 просмотров)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
02.09.2012, 01:59 10
Игорь с++, а тебя не удивило, что размер Project1.exe - всего 22К? Если в него включен мегабайтный файл, то уж всяко побольше должно быть, правда?

В общем, я всегда подозревал, что DevC++ это не та IDE, на которую стоит тратить время, теперь я в этом еще раз убедился. При компиляции RC-файла она никак не может сообразить, что такое RCDATA, пришлось ее тыкать носом:
Код
ID_EXE 10 "1.exe"
, только тогда она начала включать 1.exe в проект и вытягивать его по клику.
1
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
02.09.2012, 02:26  [ТС] 11
спасибо огромное , а не могли бы вы пояснить , что такое - 10
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
02.09.2012, 03:10 12
10 - это значение RCDATA. Почему из-под DevC++ компилятор ресурсов не воспринимает RCDATA, а воспринимает только непосредственное значение - не имею понятия.
1
02.09.2012, 03:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.09.2012, 03:10
Помогаю со студенческими работами здесь

скажите у меня жесткий диск на ноутбуке 1Тб очень сильно греется доходит до 45-47 градусов, подскажите что делать. (жесткий диск полностью занят инфор
скажите у меня жесткий диск на ноутбуке 1Тб очень сильно греется доходит до 45-47 градусов,...

Жёсткий диск ST3250310AS. Жёсткий диск готов или нет?
всем привет. есть жёсткий диск ST3250310AS. проверил hdd scan выдал такую вещь read...

Перенос файла загрузки на другой жесткий диск
где нибудь есть видео как перененсти файл загрузки с одного жесткого диска на другой???

Запуск файла из оперативной памяти не используя жесткий диск
Добрый день! Давайте представим, что нам нельзя ничего хранить на ЖД, но у нас есть в какой-нибудь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru