亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cdinfo.cpp

?? CD刻錄,含有源代碼,好東西大家分享哈.互相交流學習.
?? CPP
字號:
////////////////////////////////////////////////////////////////
// MSDN Magazine -- April 2004
// If this code works, it was written by Paul DiLascia.
// If not, I don't know who wrote it.
// Compiles with Visual Studio .NET on Windows XP. Tab size=3.
//
#include "stdafx.h"
#include "IMAPITools.h"
#include "PropStgEnum.h"

using namespace IMAPITools;

// command-line flags
const enum {
	FRI_TERSE = 0,
	FRI_LIST_RECORDERS = 0x1,
	FRI_LIST_RECORDER_PROPS = 0x2,
	FRI_LIST_JOLIET_PROPS = 0x4,
	FRI_ALL = 0xFFFF
};

CString FormatRecorderInfo(DWORD flags);
CString FormatRecorderProps(CDiscRecorder& dr);
CString FormatJolietProps(CJolietDiscMaster& jdm);

// check for switch: / or -
inline BOOL isswitch(TCHAR c) { return c==_T('/') || c==_T('-'); }
static void help();

//////////////////
// Main entry point: parse switches before calling FormatRecorderInfo
//
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	DWORD flags = 0;

	// Parse command line. Switches can come in any order.
	for (int i=1; i<argc; i++) {
		if (isswitch(argv[i][0])) {
			for (UINT j=1; j<_tcslen(argv[i]); j++) {
				switch(argv[i][j]) {
				case _T('A'): case _T('a'):
					flags |= FRI_LIST_RECORDERS;
					break;
				case _T('P'): case _T('p'):
					flags |= FRI_LIST_RECORDER_PROPS|FRI_LIST_RECORDERS;
					break;
				case _T('J'): case _T('j'):
					flags |= FRI_LIST_JOLIET_PROPS|FRI_LIST_RECORDERS;
					break;
				case _T('V'): case _T('v'):
					flags |= FRI_ALL;
					break;
				case _T('?'):
				default:
					help();
					return 0;
				}
			}
		} else {
			help();
			return 0;
		}
	}

	CoInitialize(0); // initialize COM

	if (flags) {
		_ftprintf(stderr,_T("Please wait...\n"));
	}

	_tprintf(FormatRecorderInfo(flags));

	return 0;
}

//////////////////
// Format information about recorders into a string suitable for printf.
//
CString FormatRecorderInfo(DWORD flags)
{
	CString str,temp;

	// ICDBurn is the interface to see if writable CD exists	
	CCDBurn cdb;
	if (!cdb.HasRecordableDrive()) {
		str += _T("No recordable drive.\n");
		return str;
	}

	// drive letter
	CString dl = cdb.GetRecorderDriveLetter();
	temp.Format(_T("Default Recorder drive letter = %s\n"),
		SUCCEEDED(cdb.m_hr) ? (LPCTSTR)dl : _T("**undefined**"));
	str += temp;

	// burn path
	temp.Format(_T("Burn path = %s\n"), (LPCTSTR)cdb.GetBurnFolderPath());
	str += temp;

	if (flags==FRI_TERSE) {
		return str;
	}

	CDiscMaster dm; // IDiscMaster
	if (!dm.Open()) {
		temp.Format(_T("**Can't open DiscMaster: %s.\n"), GetErrorName(dm.m_hr));
		str += temp;
		return str;
	}

	// current active format
	IID iidActive = dm.GetActiveDiscMasterFormat();

	// list supported formats
	const MAXNFORMATS = 10;		// I've never seen more than 2
	IID formats[MAXNFORMATS];
	int nFormats = dm.GetSupportedFormats(formats,MAXNFORMATS);
	str += _T("Formats supported:\n");
	for (int i=0; i<nFormats; i++) {
		temp.Format(_T(" %s"), GetFormatName(formats[i]));
		str += temp;
		if (formats[i] == iidActive)
			str += _T(" ACTIVE");
		str += _T("\n");
	}

	if (!(flags & FRI_LIST_RECORDERS))
		return str;

	int count=1;
	CDiscRecorder dr;
	CDiscRecorderIterator itr(dm);

	while (itr.Next(dr)) {
		temp.Format(_T("Recorder #%d: \n"), count);
		str += temp;
		// Not really a GUID at all, just a long cryptic string.
//		temp.Format(_T(" Guid: %s\n"), (LPCTSTR)dr.GetRecorderGUID());
//		str += temp;

		temp.Format(_T(" PnP ID: %s\n"), (LPCTSTR)dr.GetBasePnPID());
		str += temp;
		temp.Format(_T(" Type: %s\n"),
			(LPCTSTR)GetRecorderTypeName(dr.GetRecorderType()));
		str += temp;
		temp.Format(_T(" Path: %s\n"), (LPCTSTR)dr.GetPath());
		str += temp;

		DISPLAYNAMES dn;
		dr.GetDisplayNames(dn);
		temp.Format(_T(" Vendor: %s\n"),(LPCTSTR)dn.vendor);
		str += temp;
		temp.Format(_T(" Product: %s\n"),(LPCTSTR)dn.product);
		str += temp;
		temp.Format(_T(" Revision: %s\n"),(LPCTSTR)dn.revision);
		str += temp;

		if (dr.OpenExclusive()) {
			temp.Format(_T(" State: %s\n"), GetRecorderStateName(dr.GetRecorderState()));
			str += temp;

			long mtype, mflags;
			if (dr.QueryMediaType(mtype, mflags)) {
				temp.Format(_T(" Media Type: %s=%d\n"),GetMediaTypeName(mtype),mtype);
				str += temp;
				temp.Format(_T(" Media Flags: %s=%d\n"),GetMediaFlagsName(mflags),mflags);
				str += temp;
			} else {
				temp.Format(_T(" **Unable to query media type, hr=%s\n"),
					GetErrorName(dr.m_hr));
				str += temp;
			}

			MEDIAINFO mi;
			if (dr.QueryMediaInfo(mi)) {
				temp.Format(_T(" Media Info: nSes=%d LastTrack=%d Start=%d Next=%d Free=%d\n"),
					mi.nSessions,
					mi.nLastTrack,
					mi.nStartAddress,
					mi.nNextWritable,
					mi.nFreeBlocks);
				str += temp;

			} else {
				temp.Format(_T(" **Unable to query media info, hr=%s\n"),
					GetErrorName(dr.m_hr));
				str += temp;
			}
			dr.Close();

		} else {
			temp.Format(_T(" **Unable to open exclusive, hr=%p\n"), dr.m_hr);
			str += temp;
		}

		if (flags & FRI_LIST_RECORDER_PROPS) {
			str += FormatRecorderProps(dr);
		}

		if (flags & FRI_LIST_JOLIET_PROPS) {
			dm.SetActiveDiscRecorder(dr);
			CJolietDiscMaster jdm(dm);
			str += FormatJolietProps(jdm);
		}


		count++;
	}

	return str;
}

//////////////////
// Format recorder information.
//
CString FormatDiscRecorderInfo(CDiscRecorder& dr,DWORD flags)
{
	CString str, temp;

	// Not really a GUID at all, just a long cryptic string.
	//		temp.Format(_T(" Guid: %s\n"), (LPCTSTR)dr.GetRecorderGUID());
	//		str += temp;

	temp.Format(_T(" PnP ID: %s\n"), (LPCTSTR)dr.GetBasePnPID());
	str += temp;
	temp.Format(_T(" Type: %s\n"),
		(LPCTSTR)GetRecorderTypeName(dr.GetRecorderType()));
	str += temp;
	temp.Format(_T(" Path: %s\n"), (LPCTSTR)dr.GetPath());
	str += temp;

	DISPLAYNAMES dn;
	dr.GetDisplayNames(dn);
	temp.Format(_T(" Vendor: %s\n"),(LPCTSTR)dn.vendor);
	str += temp;
	temp.Format(_T(" Product: %s\n"),(LPCTSTR)dn.product);
	str += temp;
	temp.Format(_T(" Revision: %s\n"),(LPCTSTR)dn.revision);
	str += temp;

	if (dr.OpenExclusive()) {
		temp.Format(_T(" State: %s\n"), GetRecorderStateName(dr.GetRecorderState()));
		str += temp;

		long mtype, mflags;
		if (dr.QueryMediaType(mtype, mflags)) {
			temp.Format(_T(" Media Type: %s=%d\n"),GetMediaTypeName(mtype),mtype);
			str += temp;
			temp.Format(_T(" Media Flags: %s=%d\n"),GetMediaFlagsName(mflags),mflags);
			str += temp;
		} else {
			temp.Format(_T(" **Unable to query media type, hr=%s\n"),
				GetErrorName(dr.m_hr));
			str += temp;
		}

		MEDIAINFO mi;
		if (dr.QueryMediaInfo(mi)) {
			temp.Format(_T(" Media Info: nSes=%d LastTrack=%d Start=%d Next=%d Free=%d\n"),
				mi.nSessions,
				mi.nLastTrack,
				mi.nStartAddress,
				mi.nNextWritable,
				mi.nFreeBlocks);
			str += temp;

		} else {
			temp.Format(_T(" **Unable to query media info, hr=%s\n"),
				GetErrorName(dr.m_hr));
			str += temp;
		}
		dr.Close();

	} else {
		temp.Format(_T(" **Unable to open exclusive, hr=%s\n"),
			GetErrorName(dr.m_hr));
		str += temp;
	}

	if (flags & FRI_LIST_RECORDER_PROPS) {
		str += FormatRecorderProps(dr);
	}

	return str;
}

//////////////////
// Format recorder properties.
// This requires dealing with IEnumSTATPROPSTG--Ugh!
//
CString FormatRecorderProps(CDiscRecorder& dr)
{
	CString str,temp;
	CComQIPtr<IPropertyStorage> pstg;
	if (dr.GetRecorderProperties(&pstg)) {
		temp.Format(_T(" Recorder Properties:\n"));
		str += temp;
		CPropertyStorageIterator it(pstg);
		CComVariant val;
		while (it.Next(val)) {
			CString propname = it.GetPropName();
			val.ChangeType(VT_BSTR);
			CString strval = val.bstrVal;
			temp.Format(_T("  %s=%s\n"), (LPCTSTR)propname, (LPCTSTR)strval);
			str += temp;
		}
	}
	return str;
}

CString FormatJolietProps(CJolietDiscMaster& jdm)
{
	CString str,temp;
	if (jdm) {
		temp.Format(_T(" Joilet info:\n"));
		str += temp;
		temp.Format(_T("  Total data blocks=%d\n"),jdm.GetTotalDataBlocks());
		str += temp;
		temp.Format(_T("  Used data blocks=%d\n"), jdm.GetUsedDataBlocks());
		str += temp;
		temp.Format(_T("  Block size=%d\n"),jdm.GetDataBlockSize());
		str += temp;
		CComQIPtr<IPropertyStorage> pstg;
		if (jdm.GetJolietProperties(&pstg)) {
			temp.Format(_T("  Joliet Properties:\n"));
			str += temp;
			CPropertyStorageIterator it(pstg);
			CComVariant val;
			while (it.Next(val)) {
				CString propname = it.GetPropName();
				if (propname != _T("BootImage")) { // BootImage is an IStream!
					val.ChangeType(VT_BSTR);
					CString strval = val.bstrVal;
					temp.Format(_T("   %s=%s\n"), (LPCTSTR)propname, (LPCTSTR)strval);
					str += temp;
				}
			}
		}
	}
	return str;
}

void help()
{
	_tprintf(
		_T("cdinfo: Display information about recordable CD drives.\n")
		_T("        Copyright 2003 Paul DiLascia.\n\n")
		_T("Format: cdinfo [-apj]\n")
		_T("Options:\n")
		_T(" None:  show active recorder info\n")
		_T(" -a     all: list all drives\n")
		_T(" -p     props: list recorder properties\n")
		_T(" -j     joliet: list joliet properties\n")
		_T(" -v     verbise: list everything\n")
		_T("\n"));
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
狠狠色综合播放一区二区| 日韩成人精品在线| 久久女同精品一区二区| 日韩美女视频在线| 精品国产一区二区三区忘忧草 | 丁香网亚洲国际| 国产一区二区三区观看| 国产成人综合在线播放| 国产99久久久精品| 99精品在线免费| 欧美性欧美巨大黑白大战| 欧美综合欧美视频| 欧美一区二区在线看| 精品999在线播放| 中文字幕国产一区二区| 亚洲精品中文字幕乱码三区| 亚洲一区在线视频| 日本午夜精品视频在线观看| 国内精品国产成人国产三级粉色 | 国产高清视频一区| gogogo免费视频观看亚洲一| 在线视频亚洲一区| 这里只有精品电影| 国产视频亚洲色图| 亚洲精品国产无天堂网2021| 午夜精品福利在线| 国产91精品在线观看| 色婷婷国产精品| 精品国产乱码久久久久久图片 | 波多野结衣中文字幕一区 | 91一区二区三区在线观看| 99re66热这里只有精品3直播| 欧美三级乱人伦电影| 精品国产乱码久久久久久牛牛| 国产精品久久久久aaaa樱花| 三级不卡在线观看| 国产成人精品亚洲日本在线桃色| 欧洲国内综合视频| 久久久一区二区三区捆绑**| 亚洲精品国产一区二区三区四区在线| 久久精品99久久久| 欧美性色欧美a在线播放| 欧美精品一区二区不卡| 亚洲一区二区免费视频| 国产成人av在线影院| 欧美日韩久久一区| 亚洲色图视频网| 国产精选一区二区三区| 在线91免费看| 一区二区三区在线视频观看58 | **网站欧美大片在线观看| 日本欧美大码aⅴ在线播放| 91老师国产黑色丝袜在线| 91精品国产综合久久久蜜臀粉嫩 | 天天免费综合色| 国产91精品一区二区麻豆亚洲| 在线观看免费视频综合| 国产精品国产精品国产专区不片| 精品无码三级在线观看视频| 一本大道久久a久久精品综合| 久久精品一区八戒影视| 久久99精品久久久久久| 91精品国产综合久久久久久| 亚洲欧美另类图片小说| 99久久99久久精品免费看蜜桃| 亚洲午夜影视影院在线观看| 波多野结衣一区二区三区| 欧美精品一区二区三区蜜臀| 视频精品一区二区| 欧美日韩电影在线| 亚欧色一区w666天堂| 欧美午夜免费电影| 一区二区久久久久久| 日本精品一区二区三区高清| 亚洲柠檬福利资源导航| 99久久99久久综合| 亚洲乱码国产乱码精品精小说| 99久久久免费精品国产一区二区| 国产午夜精品久久久久久久| 粉嫩av一区二区三区| 久久青草欧美一区二区三区| 国产乱码精品一区二区三区五月婷| 日韩欧美另类在线| 国产乱妇无码大片在线观看| 国产欧美日本一区视频| av电影在线观看完整版一区二区 | 日韩一级片在线观看| 日韩影院精彩在线| 精品日产卡一卡二卡麻豆| 免费黄网站欧美| 精品久久国产97色综合| 国产成人啪免费观看软件| 国产欧美日本一区视频| 91在线丨porny丨国产| 亚洲大片免费看| 日韩欧美一区二区不卡| 成人免费高清视频在线观看| 国产精品短视频| 欧美日本在线一区| 激情欧美日韩一区二区| 亚洲国产高清在线观看视频| 91福利国产精品| 久久er99精品| 亚洲人成伊人成综合网小说| 在线免费亚洲电影| 国内精品伊人久久久久影院对白| 欧美经典一区二区| 4hu四虎永久在线影院成人| 国产成人亚洲综合色影视| 亚洲黄色小视频| 日韩欧美一级二级三级久久久| 国产成人午夜片在线观看高清观看| 一色桃子久久精品亚洲| 日韩一二三区视频| 91在线码无精品| 久久国产剧场电影| 亚洲午夜激情网站| 国产精品色哟哟网站| 欧美一区二区成人6969| 成人精品高清在线| 久热成人在线视频| 亚洲一区在线观看免费| 精品对白一区国产伦| 欧美亚洲高清一区| 99久久婷婷国产综合精品电影| 美腿丝袜在线亚洲一区| 一区2区3区在线看| 国产精品大尺度| 国产日韩欧美精品在线| 91精品国产全国免费观看 | 欧美老女人在线| av一区二区三区在线| 久久99热这里只有精品| 亚洲精品videosex极品| 国产精品国产三级国产普通话蜜臀| 欧美videos大乳护士334| 7777精品久久久大香线蕉| 91九色最新地址| 91首页免费视频| 成人精品鲁一区一区二区| 久久99日本精品| 久久精品国产免费看久久精品| 午夜精品福利在线| 亚洲国产裸拍裸体视频在线观看乱了 | 亚洲成年人影院| 亚洲精品视频一区二区| 国产精品国产馆在线真实露脸| 国产女人aaa级久久久级 | 欧美日韩成人在线一区| 色视频成人在线观看免| 91在线视频免费91| 成人97人人超碰人人99| 成人av免费网站| 色一区在线观看| 在线免费不卡视频| 欧美私模裸体表演在线观看| 欧美三日本三级三级在线播放| 色噜噜狠狠色综合中国| 在线观看成人免费视频| 精品视频在线免费看| 911精品国产一区二区在线| 91超碰这里只有精品国产| 777奇米四色成人影色区| 日韩三级视频在线看| 久久中文字幕电影| 国产精品天天摸av网| 亚洲视频 欧洲视频| 亚洲国产一区二区视频| 日本不卡一区二区三区| 久久www免费人成看片高清| 国产精品中文字幕一区二区三区| 国产精品亚洲人在线观看| 成人高清免费观看| 色噜噜久久综合| 日韩一区二区视频| 中文成人综合网| 亚洲一二三区视频在线观看| 日本欧美一区二区| 粗大黑人巨茎大战欧美成人| 91高清视频免费看| 日韩一区二区三区电影在线观看 | 国产精品亚洲一区二区三区妖精| 成熟亚洲日本毛茸茸凸凹| 日本久久电影网| 日韩一级高清毛片| 国产精品高潮呻吟久久| 午夜亚洲福利老司机| 国产盗摄精品一区二区三区在线| 色综合一区二区| 日韩一区二区三区免费看 | 亚洲va天堂va国产va久| 国产精品一区二区果冻传媒| 色综合久久精品| 精品成a人在线观看| 亚洲欧美日韩中文播放 | 在线不卡免费av| 国产精品免费观看视频| 美女视频第一区二区三区免费观看网站| 国产成人免费在线观看不卡| 欧美高清性hdvideosex|