Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Функции записи CD RW

14K
11 декабря 2006 года
Vladimir03
18 / / 19.06.2006
Как писать CD RW (DVD RW). Есть ли какие-нибудь функции записи CD RW (DVD RW)?
6.4K
12 декабря 2006 года
Host
122 / / 22.09.2005
Цитата: Vladimir03
Как писать CD RW (DVD RW). Есть ли какие-нибудь функции записи CD RW (DVD RW)?




Конечно есть, не только Nero записывает диски:)
http://msdn2.microsoft.com/en-gb/library/aa365379.aspx

240
12 декабря 2006 года
aks
2.5K / / 14.07.2006
У Nero кстати есть хороший SDK для записи.
14K
14 декабря 2006 года
Vladimir03
18 / / 19.06.2006
Хотелось бы примерчиков каких-нибудь или кусочков кода.
6.4K
14 декабря 2006 года
Host
122 / / 22.09.2005
Цитата: Vladimir03
Хотелось бы примерчиков каких-нибудь или кусочков кода.



http://forum.vingrad.ru/index.php?act=ST&f=96&t=95309

14K
14 декабря 2006 года
Vladimir03
18 / / 19.06.2006
Там речь идет о подключении службы Imapi, а у меня почему-то файл "Imapi.h" 2005 студия не находит. Ищу поиском, нигде нет. На работе Билдер стоит 2006, там есть такой файл, но оттуда он, как обычно, наверно не подойдет. Где брать заголовочный файл?
14K
15 декабря 2006 года
Vladimir03
18 / / 19.06.2006



Файл подключил. Подошел из Билдера. Только тема по указанной ссылке так и не раскрыта. От нее ушли в сторону.
Там есть такой код:
IDiscRecorder* recorder;
MEDIAINFO mi;
hr = pDiskMaster->SetActiveDiscRecorder(recorder);
Или тут пропущен код или я что-то не догоняю. В функции SetActiveDiscRecorder идет обращение к неизвестному объекту. Как из объекта recordersEnum получить существующий recorder?

6.4K
15 декабря 2006 года
Host
122 / / 22.09.2005
Цитата: Vladimir03
Файл подключил. Подошел из Билдера. Только тема по указанной ссылке так и не раскрыта. От нее ушли в сторону.
Там есть такой код:
IDiscRecorder* recorder;
MEDIAINFO mi;
hr = pDiskMaster->SetActiveDiscRecorder(recorder);
Или тут пропущен код или я что-то не догоняю. В функции SetActiveDiscRecorder идет обращение к неизвестному объекту. Как из объекта recordersEnum получить существующий recorder?



Сначала получаеш список доступных рекордеров, затем выбираеш, какой тебя устраивает, и устанавливаеш его активным.

 
Код:
[SIZE=2]HRESULT hRes;[/SIZE]
[SIZE=2][SIZE=2]ULONG num;[/SIZE]
[/SIZE][SIZE=2]IEnumDiscRecorders* pEnumRec = NULL;[/SIZE]
[SIZE=2]IDiscRecorder* pDiscRec = NULL;[/SIZE]
 
[SIZE=2][SIZE=2]hRes = pDiscMaster->EnumDiscRecorders(&pEnumRec);[/SIZE]
[SIZE=2][SIZE=2]hRes = pEnumRec->Next(1,&pDiscRec,&num);[/SIZE]
[SIZE=2][SIZE=2]hRes = pDiscMaster->SetActiveDiscRecorder(pDiscRec);[/SIZE]
[/SIZE][/SIZE][/SIZE]
[SIZE=2]
[/SIZE]
14K
15 декабря 2006 года
Vladimir03
18 / / 19.06.2006
Щас попробую
14K
15 декабря 2006 года
Vladimir03
18 / / 19.06.2006
Эта часть кода прошла нормально. Приводы находятся, активизируются. Даже получилось вытащить имена и ревизии прошивок. Собственно до самой записи еще не дошел. По логике диск стереть сначала нужно. А как? Что-то в этих объектах я не нашел методов для очистки диска.
6.4K
16 декабря 2006 года
Host
122 / / 22.09.2005
Цитата: Vladimir03
Эта часть кода прошла нормально. Приводы находятся, активизируются. Даже получилось вытащить имена и ревизии прошивок. Собственно до самой записи еще не дошел. По логике диск стереть сначала нужно. А как? Что-то в этих объектах я не нашел методов для очистки диска.



 
Код:
[SIZE=2][COLOR=black]hRes = pDiscRec->Erase(FALSE);[/COLOR][/SIZE]


Позволяет стереть перезаписываемый диск. Патаметр TRUE - полная очистка диска, FALSE - быстрая очистка (таблица файлов).

Перед использованием рекордер должен быть открыт для эксклюзивного использования:
 
Код:
[SIZE=2][COLOR=black]hRes = pDiscRec->OpenExclusive();[/COLOR][/SIZE]
14K
16 декабря 2006 года
Vladimir03
18 / / 19.06.2006
Спасибо. Уже нашел. Теперь не разберусь, как создать и записать образ. Я так понял, функция записи работает через образ. Пытаюсь для примера прожечь всего один файл. Все вроде идет без ошибок, но когда смотрю диск, он чистый и на нем нет никаких файлов. Мой код:
Код:
HANDLE hFile;
    DWORD ReadedBytes=0;
    hr=pImage->CreateStream(OLESTR("Рисунок.jpg"), STGM_READWRITE|STGM_SHARE_EXCLUSIVE, 0 ,0, &pStream);
    hFile=CreateFile("C:\\Рисунок.jpg", FILE_READ_DATA, NULL, NULL, OPEN_EXISTING, NULL, NULL);
    ReadFile(hFile, &buf, 1024, &ReadedBytes, NULL);
    do
    {
        pStream->Write(buf, ReadedBytes, NULL);
        ReadFile(hFile, &buf, 1024, &ReadedBytes, NULL);
    }
    while (ReadedBytes>0);
    CloseHandle(hFile);
    p = NULL, Vendor = NULL, Product = NULL, Revision = NULL;
    hr=joilet->AddData(pImage, 1);
    hr=pDiskMaster->RecordDisc(FALSE, TRUE);
    hr=pStream->Release();
    hr=pImage->Release();
    hr = pDiskMaster->Close();
    CoUninitialize();


Где же лажа?
6.4K
17 декабря 2006 года
Host
122 / / 22.09.2005
Код:
[SIZE=2]HRESULT hRes;[/SIZE]
[SIZE=2]IStorage* pStorage = NULL, * pSubStorage = NULL;[/SIZE]
[SIZE=2]IStream* pStream = NULL; [/SIZE]
 
[SIZE=2]//корневой элемент - создается файл образа в папке с проектом[/SIZE]
[SIZE=2]hRes = StgCreateStorageEx( L[/SIZE][SIZE=2][COLOR=#800000]"write.stg"[/COLOR][/SIZE][SIZE=2], STGM_CREATE|STGM_SHARE_EXCLUSIVE|STGM_READWRITE, [/SIZE][SIZE=2]STGFMT_STORAGE, 0, NULL, NULL, IID_IStorage, [/SIZE][SIZE=2][COLOR=#0000ff]reinterpret_cast[/COLOR][/SIZE][SIZE=2]<[/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2]**>(&pStorage));[/SIZE]
 
[SIZE=2]//папка - в корне образа[/SIZE]
[SIZE=2]hRes = pStorage->CreateStorage(L[/SIZE][SIZE=2][COLOR=#800000]"folder"[/COLOR][/SIZE][SIZE=2],STGM_READWRITE|STGM_SHARE_EXCLUSIVE,NULL,NULL,&pSubStorage);[/SIZE]
 
[SIZE=2]//файл в подпапке в образе[/SIZE]
[SIZE=2]hRes = pSubStorage->CreateStream(L[/SIZE][SIZE=2][COLOR=#800000]"Notepad.exe"[/COLOR][/SIZE][SIZE=2],STGM_READWRITE|STGM_SHARE_EXCLUSIVE,0,0,&pStream);[/SIZE]


Формируеш свой образ, а потом - прожигаеш. Посмотри, как ты создаеш свой pImage.
14K
17 декабря 2006 года
Vladimir03
18 / / 19.06.2006
А дальше-то что делать? Как прожечь-то. Что у меня в коде не так? Я pImage так же создаю как и твой pStorage. Что у меня пропущено? Почему ни одного файла на диске после прожига нет? А
hr=joilet->AddData(pImage, 1) возвращает мне "Отказано в доступе". Нужен ли вообще этот код?
14K
17 декабря 2006 года
Vladimir03
18 / / 19.06.2006
С записью разобрался. Оказывается лажа тут:
 
Код:
hr=joilet->AddData(pImage, 1);
    hr=pDiskMaster->RecordDisc(FALSE, TRUE);
    hr=pStream->Release();
    hr=pImage->Release();
    hr = pDiskMaster->Close();

Фрагмент hr=pStream->Release(); находится не в том месте.
Он должен бать до метода AddData(). Все прожигается.
Теперь хочу разобраться с IDiscMaster::ProgressAdvise, чтобы наглядно показывать процесс записи/очистки диска. Нет ли у тебя, Host (больше, я смотрю, этот вопрос никому не интересен) , на этот счет каких нибудь наработок?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог