c++技巧

1、获取当前系统时间:

SYSTEMTIME systime;
	GetLocalTime(&systime);
	char str_time_name[MAX_PATH];

	sprintf(str_time_name,"%d-%d-%d %d:%d:%d.jpg",systime.wYear,systime.wMonth,systime.wDay,systime.wHour,systime.wMinute,systime.wSecond);
	printf("%s",str_time_name);

2、读取文件大小,获取文件长度

UINT read_binary_size(TCHAR file_name[])
{
	HANDLE hFile = CreateFile(file_name, GENERIC_READ , 0, NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

	if (hFile==NULL||hFile==INVALID_HANDLE_VALUE)
	{
		return 0;
	}

	DWORD  dwFileSize= 0;

	dwFileSize=GetFileSize(hFile,  NULL);

	CloseHandle(hFile);
	return dwFileSize;
}

3、设置字体颜色

#include <windows.h>
void setColor(unsigned short ForeColor=3,unsigned short BackGroundColor=0) 
//给参数默认值
{ 
	HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); //
	SetConsoleTextAttribute(hCon,ForeColor|BackGroundColor); 	
}
void OutPutDebugInfo(char *s,int level=0)
{

	switch (level)
	{
	case 0:
		setColor(7,0);//白色
		printf("%s",s);
		break;
	case 1:
		setColor(FOREGROUND_GREEN,0);;//绿色
		printf("%s",s);
		break;
	case 2:
		setColor(6,0);//黄色
		printf("%s",s);
		break;
	case 3:
		setColor(FOREGROUND_RED,0);//红色
		printf("%s",s);
		break;
	default:
		setColor(7,0);//白色
		printf("%s",s);
		break;

	}
}

4、字符串交换

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

//字符串交换,string函数自动进行内存泄露管理,不用自己释放指针
void swap(char *p1,char *p2)
{
	int max=sizeof(p1)>sizeof(p2)?sizeof(p1):sizeof(p2);
	
	char *temp=(char*)malloc(sizeof(max));
	strcpy(temp,p1);
	strcpy(p1,p2);
	strcpy(p2,temp);
}
void swap2(char *p1,char *p2)
{
	char *temp=(char *)malloc(100);
	temp=p1;
	p1=p2;
	p2=temp;
	
}

void main()
{
	char pa[100]="123456789";
	char pb[100]="abcdefghijkgsfsg";
	printf("pa:%s\npb:%s\n",pa,pb);
	swap(pa,pb);
	printf("pa:%s\npb:%s\n",pa,pb);	
	
}

5、MFC获取命令行参数

//获取命令行参数 
	//第一种方法
	AfxMessageBox(::GetCommandLine());
	//第二种方法
	for(int i=0;i<__argc;i++)
	{

		AfxMessageBox(__argv[i]);
	}
	//第三种方法
	AfxMessageBox(AfxGetApp()->m_lpCmdLine);

	//其他方法  如果希望支持MFC应用程序的标准命令行,还可以使用MFC中的CCommandLineInfo类。

6、杀死进程API

	DWORD dwProcID; 
	HANDLE hProcess; 
	HWND h =(HWND__ *) FindWindow(0, "无标题 - 记事本");
	if (h==NULL) {
		//ShowMessage("Not found.");
		AfxMessageBox("not found!");
		return; 
	}else{
		AfxMessageBox("找到窗口,开始关闭它!");
	}
	GetWindowThreadProcessId(h, &dwProcID); 
	CString info;
	info.Format("进程ID:%d",&dwProcID);
	AfxMessageBox(info);
	hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, dwProcID);
	TerminateProcess(hProcess, 0);

7、百度查Ip归属地

//百度联网查IP归属地
void CBaiduIPDlg::OnOK() 
{
	CString m_ReturnStr="";
	CString m_ip;
	CString straddress("http://www.baidu.com/s?wd=");
	GetDlgItem(IDC_EDIT1)->GetWindowText(m_ip);
	straddress+=m_ip;
	straddress+="&cl=3";	
	CInternetSession session;
    CString  strBody=_T("");
    session.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT,1000*30);        //连接超时设置
    session.SetOption(INTERNET_OPTION_CONNECT_BACKOFF,1000);        //在重试连接之间的等待的延时值在毫秒级
    session.SetOption(INTERNET_OPTION_CONNECT_RETRIES,1);        
	CHttpFile* httpfile=NULL;
    try
    {
        httpfile=(CHttpFile*)session.OpenURL(straddress,1,INTERNET_FLAG_TRANSFER_ASCII|INTERNET_FLAG_RELOAD,NULL,0);            
    }
    catch(CInternetException* m_pException)
    {
        httpfile=NULL;
        m_pException->Delete();  
		AfxMessageBox(L"CInternetException");
        return ;
    }
	char cBuf[4096]={0};
	UINT nBuf;
    if(httpfile)
    {
		while (nBuf = httpfile->Read(cBuf,4095)) 
        { 
			cBuf[nBuf]=0;
			strBody+=cBuf;
        }
	}
	m_ReturnStr=strBody;

    if (httpfile)
    {
		httpfile->Close();
		delete httpfile;
	}        
	session.Close();
	//转换编码,
	/*
	CP_ACP:ANSI字符集;
	CP_MACCP:Macintosh代码页;
	CP_OEMCP:OEM代码页;
	CP_SYMBOL:符号字符集(42);
	CP_THREAD_ACP:当前线程ANSI代码页;
	CP_UTF7:使用UTF-7转换;
	CP_UTF8:使用UTF-8转换。
	*/
	m_ReturnStr = Convert(m_ReturnStr,CP_ACP,CP_UTF8);
	MessageBox(m_ReturnStr,L"提示",0);
	m_ReturnStr.Delete(0,m_ReturnStr.Find(L"来自")+6);
	CString m_Dlwz=m_ReturnStr.Left(m_ReturnStr.Find(L" "));	
	MessageBox(m_Dlwz,L"Hello云守护");	
}

8、复制

//复制
BOOL CBaiduIPDlg::CopyToClipBoard(CString data)
{

	UpdateData(TRUE);
	if(!OpenClipboard())
	{
		
		MessageBox(_T("剪贴板没有打开"),_T("提示"),MB_OK);
		return FALSE;
		
	}	
	EmptyClipboard();
	USES_CONVERSION;	
	char * pGlobal;
	HGLOBAL hGlobal; // 一个句柄,其实就是HANDLE
	hGlobal = GlobalAlloc(GHND | GMEM_SHARE, (strlen(T2A(data))+1) * sizeof(TCHAR));   // 这个句柄,指向了一段内存
	pGlobal = (char*)GlobalLock(hGlobal);        // 把这段内存lock起来使用
	
	strcpy(pGlobal, T2A(data));          // 复制cst到这段内存
	GlobalUnlock(hGlobal);            // unlock
	SetClipboardData(CF_TEXT,   hGlobal);          // 直接把指向交给函数解决。
	CloseClipboard();
	MessageBox(_T("成功复制到剪贴板!"),_T("提示"),MB_OK);
	return TRUE;
}

9、粘贴

//粘贴
BOOL CBaiduIPDlg::PasteFromClipBoard(CString* data)
{
	CString fromClipboard; 
	if(!OpenClipboard())
	{
		
		MessageBox(_T("剪贴板没有打开"),_T("提示"),MB_OK);
		return FALSE;
		
	}
	HANDLE hData = GetClipboardData(CF_TEXT); 
	char * buffer    = (char*)GlobalLock(hData); 
	fromClipboard      = buffer; 
	GlobalUnlock(hData); 
	CloseClipboard(); 
	*data=fromClipboard;
	return TRUE;
}

void CBaiduIPDlg::OnButton2() 
{
	CString data;
	PasteFromClipBoard(&data);
	AfxMessageBox(data);
	GetDlgItem(IDC_EDIT1)->SetWindowText(data);
	
}

10、弹出对话框并定时关闭

1-》在classwizard中添加WM_TIMER消息,然后再添加一下代码

 void CSampleInject::OnTimer(UINT nIDEvent) 
{
 // TODO: Add your message handler code here and/or call default
 if (nIDEvent == 100) 
 { 
   KillTimer(nIDEvent); 
    keybd_event(VK_RETURN,0,0,0); 
    keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0);//模拟 "回车 "命令 
 }
  CDialog::OnTimer(nIDEvent);
 }

在需要弹出对话框的地方:
   SetTimer(100,1000,NULL);
   AfxMessageBox(_T("正在进行绘图"));
这样,在弹出的对话框,一秒种后就关闭了。

http://blog.csdn.net/wangningyu/article/details/4798538#

11、调出关闭计算机对话框

typedef     int (CALLBACK *SHUTDOWNDLG)(int);     //显示关机对话框函数的指针
    HINSTANCE   hInstance=LoadLibrary("shell32.dll"); //载入shell32.dll
    SHUTDOWNDLG ShutDownDialog;      //指向shell32库中显示关机对话框函数的指针
    if(hInstance!=NULL)
    {
         //获得函数的地址并调用之
         ShutDownDialog=(SHUTDOWNDLG)GetProcAddress(hInstance,(LPSTR)60);//
         (*ShutDownDialog)(0);
    }
    FreeLibrary(hInstance);

12、vc获取随机数

//然后调用
int GetRand(float MIN, float MAX)
{
	float max;
	max=RAND_MAX;
	return (int)(rand()*(MAX-MIN)/max+MIN);
}

int main()
{
	srand( (unsigned)time( NULL ) );//随机数计时开始
	cout<<GetRand(0,1200)<<endl;
	getchar();
	return 0;
}

13、进制转换:

//多进制转换,num=源数据,base进制数,buffer输出数据
void work2(unsigned int num, int base,char* buffer)
{
	char str[40] = {0};
	int i = 0;
	int j=0;
	// 判断结果是否为0
	if (!num)
	{
		printf("0\n");
		return ;
	}

	while (num)
	{
		str[i++] = num % base + '0';
		num /= base;
	}
	--i;
	while (i >= 0)
	{

		buffer[j++]=str[i--];
	}
	//printf("%s\n",buffer);
}

14、vc exe和dll获取资源和释放资源:

BOOL releaseCustomResource(size_t res_id,CStringW releasePath,CString type)
{
	//HMODULE hInstance = ::GetModuleHandle(NULL);//dll路径名
	HMODULE hModule=GetCurrentModule();
	CString    szPath;   
	GetModuleFileName(hModule,szPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);   //得到的是dll名称路径
	DebugW(szPath);
	//HMODULE hModule=::GetModuleHandle(szPath);
	//HMODULE hModule=AfxGetResourceHandle();
	
	//定位我们的自定义资源,这里因为我们是从本模块定位资源,所以将句柄简单地置为NULL即可
	HRSRC hRsrc = ::FindResource(hModule, MAKEINTRESOURCE(res_id), type);
	//第一个参数是资源所在的模块句柄,为NULL默认为当前模块(如果你的资源放在加载的DLL中,就要用对应的模块句柄了)。
	if (NULL == hRsrc)
	{
		TCHAR err[1024];
		int code=GetLastError();
		GetErrString(err,code);
		DebugW(L"open error:%d  %s",code,err);
		return FALSE;
	}

	//获取资源的大小
	DWORD dwSize = SizeofResource(hModule, hRsrc); 
	if (0 == dwSize)
		return FALSE;
	//加载资源
	HGLOBAL hGlobal = LoadResource(hModule, hRsrc); 
	if (NULL == hGlobal)
		return FALSE;
	//锁定资源
	LPVOID pBuffer = LockResource(hGlobal); 
	if (NULL == pBuffer)
		return FALSE;
	//我们用刚才得到的pBuffer和dwSize来做一些需要的事情。可以直接在内存中使
	//用,也可以写入到硬盘文件。这里我们简单的写入到硬盘文件,如果我们的自定
	//义资源是作为嵌入DLL来应用,情况可能要复杂一些。
	BOOL bRt = FALSE;
	FILE* fp = _tfopen(releasePath, _T("wb"));
	if (fp != NULL)
	{
		if (dwSize == fwrite(pBuffer, sizeof(char), dwSize, fp))
			bRt = TRUE;
		fclose(fp);
	}
	FreeResource(hGlobal);
	return bRt;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值