| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- #include "StdAfx.h"
- #include "NeroBurndisc.h"
- CDialog* CNeroBurndisc::m_pDailog = NULL;
- IdleCallback CNeroBurndisc::m_pIdelCallback = NULL;
- UserDialog CNeroBurndisc::m_pUserDialog = NULL;
- ProgressCallback CNeroBurndisc::m_pProgressCallback = NULL;
- ProgressCallback CNeroBurndisc::m_pSubTaskProgressCallback = NULL;
- AbortedCallback CNeroBurndisc::m_pAbortedCallback = NULL;
- AddLogLine CNeroBurndisc::m_pAddLogLine = NULL;
- SetPhaseCallback CNeroBurndisc::m_pSetPhaseCallback = NULL;
- DisableAbortCallback CNeroBurndisc::m_pDisableAbortCallback = NULL;
- SetMajorPhaseCallback CNeroBurndisc::m_pSetMajorPhaseCallback = NULL;
- WriteIOCallback CNeroBurndisc::m_pWriteIOCallback = NULL;
- ReadIOCallback CNeroBurndisc::m_pReadIOCallback = NULL;
- EOFCallback CNeroBurndisc::m_pEOFCallback = NULL;
- ErrorCallback CNeroBurndisc::m_pErrorCallback = NULL;
- CNeroBurndisc::CNeroBurndisc(void)
- :m_pNeroDeviceInfos(NULL)
- ,m_bInited(false)
- {
- }
- CNeroBurndisc::~CNeroBurndisc(void)
- {
- }
- static void NeroError (char *action) /* display Nero error and exit */
- {
- char *error = NeroGetLastError();
- puts (action);
- puts (error ? error : "failed");
- NeroFreeMem (error);
- }
- /************************************************************************/
- /* 函数:[3/21/2018 Jeff];
- /* 描述:;
- /* 参数:;
- /* [IN] :;
- /* [OUT] :;
- /* [IN/OUT] :;
- /* 返回:void;
- /* 注意:;
- /* 示例:;
- /*
- /* 修改:;
- /* 日期:;
- /* 内容:;
- /************************************************************************/
- bool CNeroBurndisc::NeroAPIInit()
- {
- // 加载Nero的库;
- if (!NeroAPIGlueConnect(NULL)) {
- m_strLastError = _T("连接NeroSDK失败!");
- return false;
- }
- // 获取Nero库版本信息;
- WORD ver1, ver2, ver3, ver4;
- if (!NeroGetAPIVersionEx(&ver1, &ver2, &ver3, &ver4, NULL)) {
- m_strLastError = _T("获取Nero Version失败!");
- return false;
- }
- // 初始化Nero环境(参数固定);
- strcpy_s(m_pcNeroFilesPath, 128, "NeroFiles");
- strcpy_s(m_pcVendor, 128, "nero");
- strcpy_s(m_pcSoftware, 128, "Nero - Burning Rom");
- strcpy_s(m_pcLanguageFile, 128, "Nero.txt");
- m_NeroSettings.nstNeroFilesPath = m_pcNeroFilesPath;
- m_NeroSettings.nstVendor = m_pcVendor;
- m_NeroSettings.nstIdle.ncCallbackFunction = CNeroBurndisc::m_pIdelCallback;
- m_NeroSettings.nstIdle.ncUserData = CNeroBurndisc::m_pDailog;
- m_NeroSettings.nstSoftware = m_pcSoftware;
- m_NeroSettings.nstUserDialog.ncCallbackFunction = CNeroBurndisc::m_pUserDialog;
- m_NeroSettings.nstUserDialog.ncUserData = CNeroBurndisc::m_pDailog;
- m_NeroSettings.nstLanguageFile = m_pcLanguageFile;
- NEROAPI_INIT_ERROR Err = NeroInit(&m_NeroSettings, NULL);
- switch (Err)
- {
- case NEROAPI_INIT_OK:
- m_strLastError = _T("初始化Nero成功!");
- break;
- case NEROAPI_INIT_INVALID_ARGS:
- m_strLastError = _T("NeroInit() : invalid args");
- break;
- case NEROAPI_INIT_INVALID_SERIAL_NUM:
- m_strLastError = _T("NeroInit() : invalid serial number");
- break;
- case NEROAPI_INIT_DEMOVERSION_EXPIRED:
- m_strLastError = _T("NeroInit() : demo version has expired");
- break;
- case NEROAPI_INIT_CANNOT_LOCK:
- m_strLastError = _T("NeroInit() : cannot lock");
- break;
- case NEROAPI_INIT_UNSPECIFIED_ERROR:
- m_strLastError = _T("NeroInit() : unspecified error");
- break;
- default:
- break;
- }
- return m_bInited = (Err == NEROAPI_INIT_OK ? true : false);
- }
- /************************************************************************/
- /* 函数:[3/21/2018 Jeff];
- /* 描述:;
- /* 参数:;
- /* [IN] :;
- /* [OUT] :;
- /* [IN/OUT] :;
- /* 返回:void;
- /* 注意:;
- /* 示例:;
- /*
- /* 修改:;
- /* 日期:;
- /* 内容:;
- /************************************************************************/
- int CNeroBurndisc::GetAvailableDrives()
- {
- if (!IsInited())
- return 0;
- // 清除之前的;
- if ( m_pNeroDeviceInfos )
- NeroFreeMem(m_pNeroDeviceInfos);
- // 参数一没什么意义,可以填MEDIA_NONE,MEDIA_CD或MEDIA_DVD_ANY;
- m_pNeroDeviceInfos = NeroGetAvailableDrivesEx(MEDIA_NONE, NULL);
- #ifdef _DEBUG
- if (m_pNeroDeviceInfos)
- {
- char szDeviceInfo[1024] = {0};
- for (int i = 0; i < m_pNeroDeviceInfos->nsdisNumDevInfos; i++)
- {
- char bufUnderrunProtName[128] = "";
- char *str;
- if (m_pNeroDeviceInfos->nsdisDevInfos[i].nsdiCapabilities & NSDI_BUF_UNDERRUN_PROT)
- {
- sprintf(bufUnderrunProtName, " (%s)", m_pNeroDeviceInfos->nsdisDevInfos[i].nsdiBufUnderrunProtName);
- if (m_pNeroDeviceInfos->nsdisDevInfos[i].nsdiMandatoryBUPSpeed)
- sprintf(bufUnderrunProtName + strlen(bufUnderrunProtName)," (recommanded when burning at %dX or faster)",m_pNeroDeviceInfos->nsdisDevInfos[i].nsdiMandatoryBUPSpeed);
- }
- sprintf_s(szDeviceInfo, "%c. %s: %d (%s), %d, %s%s (%s) (%d KB buffer)\n",
- // 盘符;
- m_pNeroDeviceInfos->nsdisDevInfos[i].nsdiDriveLetter ? m_pNeroDeviceInfos->nsdisDevInfos[i].nsdiDriveLetter : '?',
- // 设备名;
- m_pNeroDeviceInfos->nsdisDevInfos[i].nsdiDeviceName,
- // 适配号;
- m_pNeroDeviceInfos->nsdisDevInfos[i].nsdiHostAdapterNo,
- // 适配名;
- m_pNeroDeviceInfos->nsdisDevInfos[i].nsdiHostAdapterName,
- // 设置ID;
- m_pNeroDeviceInfos->nsdisDevInfos[i].nsdiDeviceID,
- // 容量(是否可刻录);
- m_pNeroDeviceInfos->nsdisDevInfos[i].nsdiCapabilities&NSDI_ALLOWED ? "" : "(Not allowed) ",
- bufUnderrunProtName,
- str = NeroGetTypeNameOfMedia(m_pNeroDeviceInfos->nsdisDevInfos[i].nsdiMediaSupport, ","),
- m_pNeroDeviceInfos->nsdisDevInfos[i].nsdiDriveBufferSize);
- OutputDebugStringA(szDeviceInfo);
- // 列出设备的写速度;
- for (int i = 0; i < (int)m_pNeroDeviceInfos->nsdisDevInfos[i].nsdiWriteSpeeds.nsiNumSupportedSpeeds; i++)
- {
- sprintf_s(szDeviceInfo, "%.1fX (%d KB/s)\n",
- (float)m_pNeroDeviceInfos->nsdisDevInfos[i].nsdiWriteSpeeds.nsiSupportedSpeedsKBs[i] / m_pNeroDeviceInfos->nsdisDevInfos[i].nsdiWriteSpeeds.nsiBaseSpeedKBs
- , m_pNeroDeviceInfos->nsdisDevInfos[i].nsdiWriteSpeeds.nsiSupportedSpeedsKBs[i]);
- OutputDebugStringA(szDeviceInfo);
- }
- NeroFreeMem(str);
- }
- }
- #endif
- return m_pNeroDeviceInfos ? m_pNeroDeviceInfos->nsdisNumDevInfos : 0;
- }
|