CStringW CTime::Format(LPCWSTR pFormat) const
{
	CStringW str;
	struct tm Time;
	if (localtime_s(&Time,&m_time))
		return szEmpty;

	wcsftime(str.GetBuffer(1000),1000,pFormat,&Time);
	str.FreeExtra();
	return str;
}
BOOL CListCtrl::GetItemText(CStringW& str,int nItem, int nSubItem) const
{
	LV_ITEMW li;
	li.mask=LVIF_TEXT;
	li.iItem=nItem;
	li.iSubItem=nSubItem;
	li.pszText=str.GetBuffer(1000);
	li.cchTextMax=1000;
	int nRet=(int)::SendMessage(m_hWnd,LVM_GETITEMTEXTW,nItem,(LPARAM)&li);
	if (nRet>0)
		str.FreeExtra(nRet);
	else
		str.Empty();
	return nRet>0;
}
BOOL CRegKey::EnumValue(DWORD iValue,CStringW& strName,LPDWORD lpdwType,LPBYTE lpbData,LPDWORD lpcbData) const
{
	if (IsUnicodeSystem())
	{
		DWORD cb=2048;
		LONG ret=::RegEnumValueW(m_hKey,iValue,strName.GetBuffer(2048/2),&cb,0,lpdwType,lpbData,lpcbData);
		strName.FreeExtra();
		return ret==ERROR_SUCCESS;
	}
	else
	{
		DWORD cb=2048;
		char name[2048];
		LONG ret=::RegEnumValueA(m_hKey,iValue,name,&cb,0,lpdwType,lpbData,lpcbData);
		strName=name;
		return ret==ERROR_SUCCESS;
	}
}