C++小技巧(转)

作者在 2014-01-28 00:44:01 发布以下内容

1、获取当前系统时间:


[cpp] view plaincopy


  1. SYSTEMTIME systime;  

  2.     GetLocalTime(&systime);  

  3.     char str_time_name[MAX_PATH];  

  4.   

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

  6.     printf("%s",str_time_name);  

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


[cpp] view plaincopy


  1. UINT read_binary_size(TCHAR file_name[])  

  2. {  

  3.     HANDLE hFile = CreateFile(file_name, GENERIC_READ , 0, NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);  

  4.   

  5.     if (hFile==NULL||hFile==INVALID_HANDLE_VALUE)  

  6.     {  

  7.         return 0;  

  8.     }  

  9.   

  10.     DWORD  dwFileSize= 0;  

  11.   

  12.     dwFileSize=GetFileSize(hFile,  NULL);  

  13.   

  14.     CloseHandle(hFile);  

  15.     return dwFileSize;  

  16. }  


3、设置字体颜色


[cpp] view plaincopy


  1. #include <windows.h>  

[cpp] view plaincopy


  1. void setColor(unsigned short ForeColor=3,unsigned short BackGroundColor=0)   

  2. //给参数默认值  

  3. {   

  4.     HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); //  

  5.     SetConsoleTextAttribute(hCon,ForeColor|BackGroundColor);      

  6. }  

  7. void OutPutDebugInfo(char *s,int level=0)  

  8. {  

  9.   

  10.     switch (level)  

  11.     {  

  12.     case 0:  

  13.         setColor(7,0);//白色  

  14.         printf("%s",s);  

  15.         break;  

  16.     case 1:  

  17.         setColor(FOREGROUND_GREEN,0);;//绿色  

  18.         printf("%s",s);  

  19.         break;  

  20.     case 2:  

  21.         setColor(6,0);//黄色  

  22.         printf("%s",s);  

  23.         break;  

  24.     case 3:  

  25.         setColor(FOREGROUND_RED,0);//红色  

  26.         printf("%s",s);  

  27.         break;  

  28.     default:  

  29.         setColor(7,0);//白色  

  30.         printf("%s",s);  

  31.         break;  

  32.   

  33.     }  

  34. }  


4、字符串交换


[cpp] view plaincopy


  1. #include <stdio.h>  

  2. #include <string.h>  

  3. #include <stdlib.h>  

  4.   

  5. //字符串交换,string函数自动进行内存泄露管理,不用自己释放指针  

  6. void swap(char *p1,char *p2)  

  7. {  

  8.     int max=sizeof(p1)>sizeof(p2)?sizeof(p1):sizeof(p2);  

  9.       

  10.     char *temp=(char*)malloc(sizeof(max));  

  11.     strcpy(temp,p1);  

  12.     strcpy(p1,p2);  

  13.     strcpy(p2,temp);  

  14. }  

  15. void swap2(char *p1,char *p2)  

  16. {  

  17.     char *temp=(char *)malloc(100);  

  18.     temp=p1;  

  19.     p1=p2;  

  20.     p2=temp;  

  21.       

  22. }  

  23.   

  24. void main()  

  25. {  

  26.     char pa[100]="123456789";  

  27.     char pb[100]="abcdefghijkgsfsg";  

  28.     printf("pa:%s\npb:%s\n",pa,pb);  

  29.     swap(pa,pb);  

  30.     printf("pa:%s\npb:%s\n",pa,pb);   

  31.       

  32. }  


5、MFC获取命令行参数


[cpp] view plaincopy


  1. //获取命令行参数   

  2.     //第一种方法  

  3.     AfxMessageBox(::GetCommandLine());  

  4.     //第二种方法  

  5.     for(int i=0;i<__argc;i++)  

  6.     {  

  7.   

  8.         AfxMessageBox(__argv[i]);  

  9.     }  

  10.     //第三种方法  

  11.     AfxMessageBox(AfxGetApp()->m_lpCmdLine);  

  12.   

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

6、杀死进程API


[cpp] view plaincopy


  1. DWORD dwProcID;   

  2. HANDLE hProcess;   

  3. HWND h =(HWND__ *) FindWindow(0, "无标题 - 记事本");  

  4. if (h==NULL) {  

  5.     //ShowMessage("Not found.");  

  6.     AfxMessageBox("not found!");  

  7.     return;   

  8. }else{  

  9.     AfxMessageBox("找到窗口,开始关闭它!");  

  10. }  

  11. GetWindowThreadProcessId(h, &dwProcID);   

  12. CString info;  

  13. info.Format("进程ID:%d",&dwProcID);  

  14. AfxMessageBox(info);  

  15. hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, dwProcID);  

  16. TerminateProcess(hProcess, 0);  

7、百度查Ip归属地


[cpp] view plaincopy


  1. //百度联网查IP归属地  

  2. void CBaiduIPDlg::OnOK()   

  3. {  

  4.     CString m_ReturnStr="";  

  5.     CString m_ip;  

  6.     CString straddress("http://www.baidu.com/s?wd=");  

  7.     GetDlgItem(IDC_EDIT1)->GetWindowText(m_ip);  

  8.     straddress+=m_ip;  

  9.     straddress+="&cl=3";      

  10.     CInternetSession session;  

  11.     CString  strBody=_T("");  

  12.     session.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT,1000*30);        //连接超时设置  

  13.     session.SetOption(INTERNET_OPTION_CONNECT_BACKOFF,1000);        //在重试连接之间的等待的延时值在毫秒级  

  14.     session.SetOption(INTERNET_OPTION_CONNECT_RETRIES,1);          

  15.     CHttpFile* httpfile=NULL;  

  16.     try  

  17.     {  

  18.         httpfile=(CHttpFile*)session.OpenURL(straddress,1,INTERNET_FLAG_TRANSFER_ASCII|INTERNET_FLAG_RELOAD,NULL,0);              

  19.     }  

  20.     catch(CInternetException* m_pException)  

  21.     {  

  22.         httpfile=NULL;  

  23.         m_pException->Delete();    

  24.         AfxMessageBox(L"CInternetException");  

  25.         return ;  

  26.     }  

  27.     char cBuf[4096]={0};  

  28.     UINT nBuf;  

  29.     if(httpfile)  

  30.     {  

  31.         while (nBuf = httpfile->Read(cBuf,4095))   

  32.         {   

  33.             cBuf[nBuf]=0;  

  34.             strBody+=cBuf;  

  35.         }  

  36.     }  

  37.     m_ReturnStr=strBody;  

  38.   

  39.     if (httpfile)  

  40.     {  

  41.         httpfile->Close();  

  42.         delete httpfile;  

  43.     }          

  44.     session.Close();  

  45.     //转换编码,  

  46.     /* 

  47.     CP_ACP:ANSI字符集; 

  48.     CP_MACCP:Macintosh代码页; 

  49.     CP_OEMCP:OEM代码页; 

  50.     CP_SYMBOL:符号字符集(42); 

  51.     CP_THREAD_ACP:当前线程ANSI代码页; 

  52.     CP_UTF7:使用UTF-7转换; 

  53.     CP_UTF8:使用UTF-8转换。 

  54.     */  

  55.     m_ReturnStr = Convert(m_ReturnStr,CP_ACP,CP_UTF8);  

  56.     MessageBox(m_ReturnStr,L"提示",0);  

  57.     m_ReturnStr.Delete(0,m_ReturnStr.Find(L"来自")+6);  

  58.     CString m_Dlwz=m_ReturnStr.Left(m_ReturnStr.Find(L" "));     

  59.     MessageBox(m_Dlwz,L"Hello云守护");   

  60. }  


8、复制



[cpp] view plaincopy


  1. //复制  

  2. BOOL CBaiduIPDlg::CopyToClipBoard(CString data)  

  3. {  

  4.   

  5.     UpdateData(TRUE);  

  6.     if(!OpenClipboard())  

  7.     {  

  8.           

  9.         MessageBox(_T("剪贴板没有打开"),_T("提示"),MB_OK);  

  10.         return FALSE;  

  11.           

  12.     }     

  13.     EmptyClipboard();  

  14.     USES_CONVERSION;      

  15.     char * pGlobal;  

  16.     HGLOBAL hGlobal; // 一个句柄,其实就是HANDLE  

  17.     hGlobal = GlobalAlloc(GHND | GMEM_SHARE, (strlen(T2A(data))+1) * sizeof(TCHAR));   // 这个句柄,指向了一段内存  

  18.     pGlobal = (char*)GlobalLock(hGlobal);        // 把这段内存lock起来使用  

  19.       

  20.     strcpy(pGlobal, T2A(data));          // 复制cst到这段内存  

  21.     GlobalUnlock(hGlobal);            // unlock  

  22.     SetClipboardData(CF_TEXT,   hGlobal);          // 直接把指向交给函数解决。  

  23.     CloseClipboard();  

  24.     MessageBox(_T("成功复制到剪贴板!"),_T("提示"),MB_OK);  

  25.     return TRUE;  

  26. }  


9、粘贴



[cpp] view plaincopy


  1. //粘贴  

  2. BOOL CBaiduIPDlg::PasteFromClipBoard(CString* data)  

  3. {  

  4.     CString fromClipboard;   

  5.     if(!OpenClipboard())  

  6.     {  

  7.           

  8.         MessageBox(_T("剪贴板没有打开"),_T("提示"),MB_OK);  

  9.         return FALSE;  

  10.           

  11.     }  

  12.     HANDLE hData = GetClipboardData(CF_TEXT);   

  13.     char * buffer    = (char*)GlobalLock(hData);   

  14.     fromClipboard      = buffer;   

  15.     GlobalUnlock(hData);   

  16.     CloseClipboard();   

  17.     *data=fromClipboard;  

  18.     return TRUE;  

  19. }  

  20.   

  21. void CBaiduIPDlg::OnButton2()   

  22. {  

  23.     CString data;  

  24.     PasteFromClipBoard(&data);  

  25.     AfxMessageBox(data);  

  26.     GetDlgItem(IDC_EDIT1)->SetWindowText(data);  

  27.       

  28. }  

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


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


[cpp] view plaincopy


  1. void CSampleInject::OnTimer(UINT nIDEvent)   

  2.   

  3. // TODO: Add your message handler code here and/or call default  

  4. if (nIDEvent == 100)   

  5. {   

  6.   KillTimer(nIDEvent);   

  7.    keybd_event(VK_RETURN,0,0,0);   

  8.    keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0);//模拟 "回车 "命令   

  9. }  

  10.  CDialog::OnTimer(nIDEvent);  

  11. }  

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

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

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


[cpp] view plaincopy


  1. typedef     int (CALLBACK *SHUTDOWNDLG)(int);     //显示关机对话框函数的指针  

  2.     HINSTANCE   hInstance=LoadLibrary("shell32.dll"); //载入shell32.dll  

  3.     SHUTDOWNDLG ShutDownDialog;      //指向shell32库中显示关机对话框函数的指针  

  4.     if(hInstance!=NULL)  

  5.     {  

  6.         

C++ | 阅读 1748 次
文章评论,共0条
游客请输入验证码