[软件]_[Windows]_[实用系统工具类]

场景:

1. Windows软件开发时总是需要格式化时间, 获取软件的copyright时间,获取临时目录, 获取下载目录和AppData目录, 这些方法部分如果不搜索的话MSDN真的很难找.

2. 可跨产品移植.

bas_utility_sys.h:

#ifndef __BAS_UTILITY_SYS_H
#define	__BAS_UTILITY_SYS_H

#include "bas_exp.h"

#include <Windows.h>
#include <stdio.h>
#include <time.h>

class LIB_BASIC BASUtilitySys
{

public:
	//"%Y-%m-%d %H:%M:%S"
	static void TimeFormat( time_t nTime, char *szDst,const char* format );

	static void GetNowDateTime(char *szDst,const char* format);

	static wchar_t* GetCompileYear();

	static wchar_t* GetTempDir();

	static wchar_t* GetDownloadDir();

	static wchar_t* GetAppDataDir();
};

#endif

bas_utility_sys.cpp:

#include "basic/bas_utility_sys.h"

#include <Windows.h>
#include <tchar.h>
#include <shlobj.h>
#include <time.h>
#include <string.h>
#include <string>

//1.localtime 可能会出现崩溃的情况,数值太大或负数或0.
#define _MAX__TIME64_T     0x793406fffi64

static time_t FixupTime64Range(const time_t time)
{
	time_t tmp_time = time;
	if(tmp_time < 0 ||// underflow
		tmp_time > (_MAX__TIME64_T - 14 * 60 * 60)) // overflow
	{
		tmp_time = 0; // reset time to 0
	}
	return tmp_time;
}

void BASUtilitySys::TimeFormat( time_t nTime, char *szDst,const char* format )
{
	struct tm m_tm;
	time_t tt = FixupTime64Range(nTime);
	m_tm = *localtime( &tt );
	strftime(szDst,20,format,&m_tm);
}

void BASUtilitySys::GetNowDateTime(char *szDst,const char* format)
{
	time_t t = time(NULL);
	TimeFormat(t,szDst,format);
}

wchar_t* BASUtilitySys::GetCompileYear()
{
	static const wchar_t* date = _T(__DATE__);
	const wchar_t* last = wcsrchr(date,L‘ ‘);
	std::wstring year(last+1);
	return wcsdup(year.c_str());
}

wchar_t* BASUtilitySys::GetTempDir()
{
	TCHAR lpTempPathBuffer[MAX_PATH];
	DWORD dwRetVal = GetTempPath(MAX_PATH,     // length of the buffer
                             lpTempPathBuffer); // buffer for path
	std::wstring path(lpTempPathBuffer);
	return wcsdup(path.c_str());
}

wchar_t* BASUtilitySys::GetAppDataDir()
{
	wchar_t *szPath = (wchar_t*)malloc(sizeof(wchar_t)*MAX_PATH);
	memset(szPath,0,sizeof(wchar_t)*MAX_PATH);
    if(SUCCEEDED(SHGetFolderPath(NULL,
                               CSIDL_APPDATA|CSIDL_FLAG_CREATE,
                               NULL,
                               0,
                               szPath)))
	{
		szPath[wcslen(szPath)] = L‘\\‘;
		return szPath;
	}else
	{
		return GetTempDir();
	}
}

wchar_t* BASUtilitySys::GetDownloadDir()
{
	wchar_t szPath[MAX_PATH] ;
    if(SUCCEEDED(SHGetFolderPath(NULL,
                               CSIDL_PROFILE|CSIDL_FLAG_CREATE,
                               NULL,
                               0,
                               szPath)))
    {
		std::wstring path(szPath);
		path.append(L"\\Downloads");
		if(_waccess(path.c_str(),0) == 0)
		{
			path.append(L"\\");
			return wcsdup(path.c_str());
		}else
		{
			BOOL res = CreateDirectory(path.c_str(),NULL);
			if(res)
			{
				path.append(L"\\");
				return wcsdup(path.c_str());
			}else
			{
				return GetTempDir();
			}
		}
    }
	return GetTempDir();
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 07:59:08

[软件]_[Windows]_[实用系统工具类]的相关文章

Windows实用系统工具类--C++

场景: 1. Windows软件开发时总是需要格式化时间, 获取软件的copyright时间,获取临时目录, 获取下载目录和AppData目录, 这些方法部分如果不搜索的话MSDN真的很难找. 2. 可跨产品移植. #ifndef __BAS_UTILITY_SYS_H #define __BAS_UTILITY_SYS_H #include "bas_exp.h" #include <Windows.h> #include <stdio.h> #include

iOS_21团购_通过block对请求工具类的代理方法进行二次封装

最终效果图: [点评]提供的工具类DPAPI 在请求完毕后,使用的是代理机制,当一次请求成功或者失败时,会调用代理的相应方法 为了将点评提供的工具类DPAPI进行二次封装, 再次定义了一个block: typedef  void(^RequestDoneCallBackBlock)(id deals,NSError *err); 该block有两个参数, 分别是成功时,服务器返回的deals字典数组 另一个参数是:请求失败时,服务器返回的失败信息 两个参数分别对应代理的两个方法(即成功.失败时分

Android 系统工具类SystemUtils收集整理(持续更新)

最近做的功能中涉及到了一些关于系统方面的东西,自己摸索以及网上搜集整理出来了一个工具类方便调用 包含的功能有: 获取系统中所有APP应用.获取用户安装的APP应用.根据包名和Activity启动类查询应用信息.跳转到WIFI设置.WIFI网络开关.移动网络开关.GPS开关 当前若关则打开 当前若开则关闭.调节系统音量.设置亮度.获取屏幕的亮度.跳转到系统设置.获取文件夹下所有文件.获取视频的缩略图 .打开视频文件... 工具类会持续更新,与大家共同学习进步. SystemUtils.java p

[软件]_[Windows]_[参考NSUserDefaults自定义Windows的BASUserDefaults]

场景: 1. 在Mac下Cocoa开发,可以使用NSUserDefaults很容易的存储配置信息,而且它还支持基本类型的NSDictionary,NSArray等复杂类型. 我们使用这个类来存储运行时配置, 比如多语言选项, 检查更新选项, 快捷键设置等等.这个信息自动存储在bundleid的相关位置. 参考: http://blog.csdn.net/yepeng2014/article/details/49003753 这种配置很方面, 如果是Windows的话唯一可以和它相提并论的是注册表

[软件]_[Windows]_[产品开发时常用的文件操作方法]

场景: 1. 开发Windows产品时,很多东西都需要自己封装,因为它不像Cocoa那样有很好的对象模型,通过类就可以访问文件相关方法. 比如复制文件夹? 要知道Win32是否提供复制文件夹这个函数还真的通过baidu. MSDN真的很差. 2. 界面开发时打开选择文件夹窗口等. 3. 设置文件创建时间和修改时间等. 4. 也是可以在产品中移植. bas_utility_file.h: #ifndef __BAS_UTILITY_FILE_H #define __BAS_UTILITY_FILE

Android 获取手机的厂商、型号、Android系统版本号、IMEI、当前系统语言等工具类

最近在开发中,需要用到一些系统信息,这里我把这些方法写成一个工具类方便以后复用,该工具类有以下6个功能: 1.获取手机制造厂商 2.获取手机型号 3.获取手机系统当前使用的语言 4.获取Android系统版本号 5.获取手机IMEI串号 6.获取手机中的语言列表 SystemUtil类 [java] view plain copy /** * 系统工具类 * Created by zhuwentao on 2016-07-18. */ public class SystemUtil { /**

Java高级部分--工具类(1)

一.Java API1.java.lang Java语言包(包含String.StringBuffer.Integer.Math.Math.System等类),任何类中,该包中的类都会被自动导入 2.java.util 包含一些实用的工具类( 包含list, calendar, date等类) 3.java.awt 图形用户界面包4.java.io 提供多种输入/输出功能的类 equals与"=="区别: equals从值的角度判断是否一致(判断是否长得一致) "==&quo

Java 高级应用编程 第一章 工具类

一.Java API Java API简介 1.API (Application Programming Interface) 应用程序接口 2.Java中的API,就是JDK提供的各种功能的Java类 3.JDK帮助文档  JAVA_API_CN.chm 官网地址http://www.oracle.com/technetwork/java/api-141528.html 如: java.lang Java语言包(包含String.Math.System等类),任何类中,该包中的类都会被自动导入

使用工具类,让Json返回更得体,更好看

本文章所用技术为SpringMVC+JSON 利用工具类轻松将json返回到页面中,而不用手动一个一个去映射 首先呢我们需要定义一个返回json的工具类Resp<T>,这个类呢,我们通常可以自由化配置,这里只举一个范例 import java.io.Serializable; import java.util.Map; /** * A return Util to pages * @param <T> return data type */ public class Resp<