window下C++开发常用函数

个人记录常用函数总结。
环境要求window。在vs2013运行通过。

/*
常用函数总结。
环境要求window。
在vs2013运行通过。

作者:chenlin
日期:2018-09-05
*/


#include <string>
#include <string.h>
#include <vector>
#include <windows.h>
#include <TLHELP32.H>
#include "commonFunction.h"
#include <Netlistmgr.h>

#ifdef _UNICODE
#define tstring std::wstring
#else
#define tstring std::string
#endif

/*多字节转宽字节*/
std::wstring MBytesToWString(const char* lpcszString)
{
	int len = strlen(lpcszString);
	int unicodeLen = ::MultiByteToWideChar(CP_ACP, 0, lpcszString, strlen(lpcszString), NULL, 0);
	wchar_t* pUnicode = new wchar_t[unicodeLen + 1];
	memset(pUnicode, 0, (unicodeLen + 1) * sizeof(wchar_t));
	::MultiByteToWideChar(CP_ACP, 0, lpcszString, strlen(lpcszString), (LPWSTR)pUnicode, unicodeLen);
	std::wstring wString = (wchar_t*)pUnicode;
	delete[] pUnicode;
	return wString;
}

/*宽字节转多字节*/
std::string WStringToMBytes(const wchar_t* lpwcszWString)
{
	char* pElementText;
	int iTextLen;
	// wide char to multi char
	iTextLen = ::WideCharToMultiByte(CP_ACP, 0, lpwcszWString, wcslen(lpwcszWString), NULL, 0, NULL, NULL);
	pElementText = new char[iTextLen + 1];
	memset((void*)pElementText, 0, (iTextLen + 1) * sizeof(char));
	::WideCharToMultiByte(CP_ACP, 0, lpwcszWString, wcslen(lpwcszWString), pElementText, iTextLen, NULL, NULL);
	std::string strReturn(pElementText);
	delete[] pElementText;
	return strReturn;
}
//utf8 转unicode
std::wstring Utf82Unicode(const std::string& utf8string)
{
	int widesize = ::MultiByteToWideChar(CP_UTF8, 0, utf8string.c_str(), -1, NULL, 0);
	 if (widesize == ERROR_NO_UNICODE_TRANSLATION)
	 {
	 	throw std::exception("Invalid UTF-8 sequence.");
	 }
	 if (widesize == 0)
	 {
	 	throw std::exception("Error in conversion.");
	 }
	 std::vector<wchar_t> resultstring(widesize);
	 int convresult = ::MultiByteToWideChar(CP_UTF8, 0, utf8string.c_str(), -1, &resultstring[0], widesize);
	 if (convresult != widesize)
	 {
	 	throw std::exception("La falla!");
 	}
	 return std::wstring(&resultstring[0]);
}
//utf-8 转 ascii  
std::string UTF_82ASCII(std::string& strUtf8Code)
{
	//先把 utf8 转为 unicode  
	 std::wstring wstr = Utf82Unicode(strUtf8Code);
	 //最后把 unicode 转为 ascii  
	 std::string strRet = WStringToMBytes(wstr.c_str());
	 return strRet;
}


//查找进程:成功返回进程id
DWORD GetProcessidFromName(LPCTSTR name)
{
	PROCESSENTRY32 pe;
	DWORD id = 0;
	HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	pe.dwSize = sizeof(PROCESSENTRY32);
	if (!Process32First(hSnapshot, &pe))
		return 0;
	while (1)
	{
		pe.dwSize = sizeof(PROCESSENTRY32);
		if (Process32Next(hSnapshot, &pe) == FALSE)
			break;
		if (wcscmp(pe.szExeFile, name) == 0)
		{
			id = pe.th32ProcessID;

			break;
		}


	}
	CloseHandle(hSnapshot);
	return id;
}


//根据进程名称关闭进程,找到进程并且关闭返回true
BOOL closeProcessFromName(LPCTSTR strProcessName, DWORD dwTH32ProcessID)
{
	BOOL bResult = FALSE;
	if (NULL == strProcessName)
	{
		return FALSE;
	}
	do 
	{
		if (NULL != dwTH32ProcessID)//如果已经知道进程ID,直接结束进程
		{
			HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, dwTH32ProcessID);
			bResult = TerminateProcess(hProcess, 0);
			break;
		}

		HANDLE handle32Snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
		if (INVALID_HANDLE_VALUE == handle32Snapshot)
		{
			break;
		}
		PROCESSENTRY32 pEntry;
		pEntry.dwSize = sizeof(PROCESSENTRY32);
		//Search for all the process and terminate it
		if (Process32First(handle32Snapshot, &pEntry))
		{
			BOOL bFound = FALSE;
			if (!wcscmp(pEntry.szExeFile, strProcessName))
			{
				bFound = TRUE;
			}

			while ((!bFound) && Process32Next(handle32Snapshot, &pEntry))
			{
				if (!wcscmp(pEntry.szExeFile, strProcessName))
				{
					bFound = TRUE;
				}
			}
			if (bFound)
			{
				CloseHandle(handle32Snapshot);
				HANDLE handLe = OpenProcess(PROCESS_TERMINATE, FALSE, pEntry.th32ProcessID);
				bResult = TerminateProcess(handLe, 0);  //结束进程
				break;
			}
		}
		CloseHandle(handle32Snapshot);
	} while (0);
	Sleep(500);
	return bResult;
}

//获取应用程序目录

std::wstring getAppDir()
{
 	TCHAR szBuf[MAX_PATH] = {0};
 	GetModuleFileName(NULL, (LPTSTR)szBuf, MAX_PATH);
 	*(strrchr(szBuf, '\\') + sizeof(TCHAR)) = 0;
	std::wstring strFileName = szBuf;
	rn strFileName;
}

tstring getAppName()
{
 TCHAR szBuf[MAX_PATH] = { 0 }, szBuf2[MAX_PATH] = { 0 };
 GetModuleFileName(NULL, (LPTSTR)szBuf, MAX_PATH);
#ifdef _UNICODE
 wcscpy_s(szBuf2, (wcsrchr(szBuf, _T('\\')) + sizeof(TCHAR)) );
#else
 strcpy_s(szBuf2, (strrchr(szBuf, '\\') + sizeof(TCHAR)) );
#endif
 tstring strFileName = szBuf2;
 return strFileName;
}

//检测网络连接// 返回 true代表连接正常
bool checkIsNetwork()
{
 CoInitialize(NULL);    //  通过NLA接口获取网络状态    
 IUnknown *pUnknown = NULL;
 bool   bOnline = false;//是否在线      
 HRESULT Result = CoCreateInstance(CLSID_NetworkListManager, NULL, CLSCTX_ALL, IID_IUnknown, (void **)&pUnknown);
 if (SUCCEEDED(Result))
 {
  INetworkListManager *pNetworkListManager = NULL;
  if (pUnknown)
   Result = pUnknown->QueryInterface(IID_INetworkListManager, (void **)&pNetworkListManager);
  if (SUCCEEDED(Result))
  {
   VARIANT_BOOL IsConnect = VARIANT_FALSE;
   if (pNetworkListManager)
    Result = pNetworkListManager->get_IsConnectedToInternet(&IsConnect);
   if (SUCCEEDED(Result))
   {
    bOnline = (IsConnect == VARIANT_TRUE) ? true : false;
   }
  }
  if (pNetworkListManager)
   pNetworkListManager->Release();
 }
 if (pUnknown)
  pUnknown->Release();
 CoUninitialize();
 return bOnline;
}



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值