最近花了五个多小时编写了一个简单的文本编辑小程序,在Dev-c++上编译通过。

main.cpp

#include <windows.h>
#include <commctrl.h>#include "main.h"LRESULT CALLBACK WndProc(HWND hwnd,UINT Message,WPARAM wParam,LPARAM lParam);
LRESULT CALLBACK MDIChildWndProc(HWND hwnd,UINT Message,WPARAM wParam,LPARAM lParam);char g_szAppName[]="MyMDIWindow";
char g_szChild[]="MyMDIChild";
HINSTANCE g_hInst;
HWND g_hMDIClient,g_hStatusBar,g_hToolBar;
HWND g_hMainWindow;BOOL LoadFile(HWND hEdit,LPSTR pszFileName)
{HANDLE hFile;BOOL bSuccess=FALSE;hFile=CreateFile(pszFileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);if(hFile!=INVALID_HANDLE_VALUE){DWORD dwFileSize;dwFileSize=GetFileSize(hFile,NULL);if(dwFileSize!=0xFFFFFFFF){LPSTR pszFileText;pszFileText=LPSTR(GlobalAlloc(GPTR,dwFileSize+1));if(pszFileText!=NULL){DWORD dwRead;if(ReadFile(hFile,pszFileText,dwFileSize,&dwRead,NULL)){pszFileText[dwFileSize]=0; // Null terminatorif(SetWindowText(hEdit,pszFileText)) bSuccess=TRUE; // It worked!}GlobalFree(pszFileText);}}CloseHandle(hFile);}return bSuccess;
}BOOL SaveFile(HWND hEdit,LPSTR pszFileName)
{HANDLE hFile;BOOL bSuccess=FALSE;hFile=CreateFile(pszFileName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);if(hFile!=INVALID_HANDLE_VALUE){DWORD dwTextLength;dwTextLength=GetWindowTextLength(hEdit);if(dwTextLength>0){// No need to bother if there's no text.   LPSTR pszText;pszText=LPSTR(GlobalAlloc(GPTR,dwTextLength+1));if(pszText!=NULL){if(GetWindowText(hEdit,pszText,dwTextLength+1)){DWORD dwWritten;if(WriteFile(hFile,pszText,dwTextLength,&dwWritten,NULL)) bSuccess=TRUE;}GlobalFree(pszText);}}CloseHandle(hFile);}return bSuccess;
}BOOL GetFileName(HWND hwnd,LPSTR pszFileName,BOOL bSave)
{OPENFILENAME ofn;ZeroMemory(&ofn,sizeof(ofn));pszFileName[0]=0;ofn.lStructSize=sizeof(ofn);ofn.hwndOwner=hwnd;ofn.lpstrFilter="Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0\0";ofn.lpstrFile=pszFileName;ofn.nMaxFile=MAX_PATH;ofn.lpstrDefExt="txt";if(bSave){ofn.Flags=OFN_EXPLORER|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT;if(!GetSaveFileName(&ofn)) return FALSE;}else{ofn.Flags=OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_HIDEREADONLY;if(!GetOpenFileName(&ofn)) return FALSE;}return TRUE;
}int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpszCmdParam,int nCmdShow)
{MSG Msg;WNDCLASSEX WndClassEx;g_hInst=hInstance;WndClassEx.cbSize=sizeof(WNDCLASSEX);WndClassEx.style=CS_HREDRAW|CS_VREDRAW;WndClassEx.lpfnWndProc=WndProc;WndClassEx.cbClsExtra=0;WndClassEx.cbWndExtra=0;WndClassEx.hInstance=hInstance;WndClassEx.hIcon=LoadIcon(NULL,IDI_APPLICATION);WndClassEx.hCursor=LoadCursor(NULL,IDC_ARROW);WndClassEx.hbrBackground=(HBRUSH)(COLOR_3DSHADOW+1);WndClassEx.lpszMenuName="MAIN";WndClassEx.lpszClassName=g_szAppName;WndClassEx.hIconSm=LoadIcon(NULL,IDI_APPLICATION);if(!RegisterClassEx(&WndClassEx)){MessageBox(0,"Could Not Register Window","Oh Oh...",MB_ICONEXCLAMATION|MB_OK);return -1;}WndClassEx.lpfnWndProc=MDIChildWndProc;WndClassEx.lpszMenuName=NULL;WndClassEx.lpszClassName=g_szChild;WndClassEx.hbrBackground=(HBRUSH)(COLOR_3DFACE+1);if(!RegisterClassEx(&WndClassEx)){MessageBox(0,"Could Not Register Child Window","Oh Oh...",MB_ICONEXCLAMATION|MB_OK);return -1;}g_hMainWindow=CreateWindowEx(WS_EX_APPWINDOW,g_szAppName,"MDI File Editor",WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,0, 0, hInstance, NULL);if (g_hMainWindow==NULL){MessageBox(0,"No Window","Oh Oh...",MB_ICONEXCLAMATION|MB_OK);return -1;}ShowWindow(g_hMainWindow,nCmdShow);UpdateWindow(g_hMainWindow);while(GetMessage(&Msg,NULL,0,0)){if(!TranslateMDISysAccel(g_hMDIClient,&Msg)){TranslateMessage(&Msg);DispatchMessage(&Msg);}}return Msg.wParam;
}LRESULT CALLBACK WndProc(HWND hwnd,UINT Message,WPARAM wParam,LPARAM lParam)
{switch(Message){case WM_CREATE:{CLIENTCREATESTRUCT ccs;int iStatusWidths[]={200,300,-1};TBADDBITMAP tbab;TBBUTTON tbb[9];// Find window menu where children will be listedccs.hWindowMenu=GetSubMenu(GetMenu(hwnd),2);ccs.idFirstChild=ID_MDI_FIRSTCHILD;g_hMDIClient=CreateWindowEx(WS_EX_CLIENTEDGE,"mdiclient",NULL,WS_CHILD|WS_CLIPCHILDREN|WS_VSCROLL|WS_HSCROLL,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,hwnd,(HMENU)ID_MDI_CLIENT,g_hInst,(LPVOID)&ccs);ShowWindow(g_hMDIClient, SW_SHOW);g_hStatusBar=CreateWindowEx(0,STATUSCLASSNAME,NULL,WS_CHILD|WS_VISIBLE|SBARS_SIZEGRIP,0,0,0,0,hwnd,(HMENU)ID_STATUSBAR,g_hInst,NULL);SendMessage(g_hStatusBar,SB_SETPARTS,3,(LPARAM)iStatusWidths);SendMessage(g_hStatusBar,SB_SETTEXT,2,(LPARAM)"Toolbar & Statusbar Example");g_hToolBar=CreateWindowEx(0,TOOLBARCLASSNAME,NULL,WS_CHILD|WS_VISIBLE,0,0,0,0,hwnd,(HMENU)ID_TOOLBAR,g_hInst,NULL);// Send the TB_BUTTONSTRUCTSIZE message, which is required for// backward compatibility.SendMessage(g_hToolBar,TB_BUTTONSTRUCTSIZE,(WPARAM)sizeof(TBBUTTON),0);tbab.hInst=HINST_COMMCTRL;tbab.nID=IDB_STD_SMALL_COLOR;SendMessage(g_hToolBar,TB_ADDBITMAP,0,(LPARAM)&tbab);ZeroMemory(tbb,sizeof(tbb));tbb[0].iBitmap=STD_FILENEW;tbb[0].fsState=TBSTATE_ENABLED;tbb[0].fsStyle=TBSTYLE_BUTTON;tbb[0].idCommand=CM_FILE_NEW;tbb[1].iBitmap=STD_FILEOPEN;tbb[1].fsState=TBSTATE_ENABLED;tbb[1].fsStyle=TBSTYLE_BUTTON;tbb[1].idCommand=CM_FILE_OPEN;tbb[2].iBitmap=STD_FILESAVE;tbb[2].fsStyle=TBSTYLE_BUTTON;tbb[2].idCommand=CM_FILE_SAVE;tbb[3].fsStyle=TBSTYLE_SEP;tbb[4].iBitmap=STD_CUT;tbb[4].fsStyle=TBSTYLE_BUTTON;tbb[4].idCommand=CM_EDIT_CUT;tbb[5].iBitmap=STD_COPY;tbb[5].fsStyle=TBSTYLE_BUTTON;tbb[5].idCommand=CM_EDIT_COPY;tbb[6].iBitmap=STD_PASTE;tbb[6].fsStyle=TBSTYLE_BUTTON;tbb[6].idCommand=CM_EDIT_PASTE;tbb[7].fsStyle=TBSTYLE_SEP;tbb[8].iBitmap=STD_UNDO;tbb[8].fsStyle=TBSTYLE_BUTTON;tbb[8].idCommand=CM_EDIT_UNDO;SendMessage(g_hToolBar,TB_ADDBUTTONS,9,(LPARAM)&tbb);return 0;}case WM_COMMAND:{switch(LOWORD(wParam)){case CM_FILE_EXIT:PostMessage(hwnd,WM_CLOSE,0,0);break;case CM_FILE_NEW:{MDICREATESTRUCT mcs;HWND hChild;mcs.szTitle="[Untitled]";mcs.szClass=g_szChild;mcs.hOwner=g_hInst;mcs.x=mcs.cx=CW_USEDEFAULT;mcs.y=mcs.cy=CW_USEDEFAULT;mcs.style=MDIS_ALLCHILDSTYLES;hChild=(HWND)SendMessage(g_hMDIClient,WM_MDICREATE,0,(LPARAM)&mcs);if(!hChild){MessageBox(hwnd,"MDI Child creation failed.","Oh Oh...",MB_ICONEXCLAMATION|MB_OK);}break;}case CM_FILE_OPEN:{MDICREATESTRUCT mcs;HWND hChild;char szFileName[MAX_PATH];if(!GetFileName(hwnd,szFileName,FALSE)) break;mcs.szTitle=szFileName;mcs.szClass=g_szChild;mcs.hOwner=g_hInst;mcs.x=mcs.cx=CW_USEDEFAULT;mcs.y=mcs.cy=CW_USEDEFAULT;mcs.style=MDIS_ALLCHILDSTYLES;hChild=(HWND)SendMessage(g_hMDIClient,WM_MDICREATE,0,(LPARAM)&mcs);if(!hChild){MessageBox(hwnd,"MDI Child creation failed.","Oh Oh...",MB_ICONEXCLAMATION|MB_OK);}break;}case CM_WINDOW_TILEHORZ:PostMessage(g_hMDIClient,WM_MDITILE,MDITILE_HORIZONTAL,0);break;case CM_WINDOW_TILEVERT:PostMessage(g_hMDIClient,WM_MDITILE,MDITILE_VERTICAL,0);break;case CM_WINDOW_CASCADE:PostMessage(g_hMDIClient,WM_MDICASCADE,0,0);break;case CM_WINDOW_ARRANGE:PostMessage(g_hMDIClient,WM_MDIICONARRANGE,0,0);break;default:{if(LOWORD(wParam)>=ID_MDI_FIRSTCHILD){DefFrameProc(hwnd,g_hMDIClient,Message,wParam,lParam);}else{HWND hChild;hChild=(HWND)SendMessage(g_hMDIClient,WM_MDIGETACTIVE,0,0);if(hChild){SendMessage(hChild,WM_COMMAND,wParam,lParam);}}}}break;}case WM_SIZE:{RECT rectClient,rectStatus,rectTool;UINT uToolHeight,uStatusHeight,uClientAlreaHeight;SendMessage(g_hToolBar,TB_AUTOSIZE,0,0);SendMessage(g_hStatusBar,WM_SIZE,0,0);GetClientRect(hwnd,&rectClient);GetWindowRect(g_hStatusBar,&rectStatus);GetWindowRect(g_hToolBar,&rectTool);uToolHeight=rectTool.bottom-rectTool.top;uStatusHeight=rectStatus.bottom-rectStatus.top;uClientAlreaHeight=rectClient.bottom;MoveWindow(g_hMDIClient,0,uToolHeight,rectClient.right,uClientAlreaHeight-uStatusHeight-uToolHeight,TRUE);break;}case WM_CLOSE:DestroyWindow(hwnd);break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefFrameProc(hwnd,g_hMDIClient,Message,wParam,lParam);}return 0;
}LRESULT CALLBACK MDIChildWndProc(HWND hwnd,UINT Message,WPARAM wParam,LPARAM lParam)
{switch(Message){case WM_CREATE:{char szFileName[MAX_PATH];HWND hEdit;hEdit=CreateWindowEx(WS_EX_CLIENTEDGE,"EDIT","",WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|ES_MULTILINE|ES_WANTRETURN,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,hwnd,(HMENU)IDC_CHILD_EDIT,g_hInst,NULL);SendMessage(hEdit,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),MAKELPARAM(TRUE,0));GetWindowText(hwnd,szFileName,MAX_PATH);if(*szFileName!='['){if(!LoadFile(hEdit,szFileName)){MessageBox(hwnd,"Couldn't Load File.","Error.",MB_OK|MB_ICONEXCLAMATION);return -1; //cancel window creation}}break;}case WM_SIZE:if(wParam!=SIZE_MINIMIZED)MoveWindow(GetDlgItem(hwnd,IDC_CHILD_EDIT),0,0,LOWORD(lParam),HIWORD(lParam),TRUE);break;case WM_MDIACTIVATE:{HMENU hMenu,hFileMenu;BOOL EnableFlag;char szFileName[MAX_PATH];hMenu=GetMenu(g_hMainWindow);if(hwnd==(HWND)lParam){      //being activatedEnableFlag=TRUE;}else{EnableFlag=FALSE;    //being de-activated}EnableMenuItem(hMenu,1,MF_BYPOSITION|(EnableFlag?MF_ENABLED:MF_GRAYED));EnableMenuItem(hMenu,2,MF_BYPOSITION|(EnableFlag?MF_ENABLED:MF_GRAYED));hFileMenu=GetSubMenu(hMenu,0);EnableMenuItem(hFileMenu,CM_FILE_SAVE,MF_BYCOMMAND|(EnableFlag?MF_ENABLED:MF_GRAYED));EnableMenuItem(hFileMenu,CM_FILE_SAVEAS,MF_BYCOMMAND|(EnableFlag?MF_ENABLED:MF_GRAYED));DrawMenuBar(g_hMainWindow);SendMessage(g_hToolBar,TB_ENABLEBUTTON,CM_FILE_SAVE,MAKELONG(EnableFlag,0));SendMessage(g_hToolBar,TB_ENABLEBUTTON,CM_EDIT_UNDO,MAKELONG(EnableFlag,0));SendMessage(g_hToolBar,TB_ENABLEBUTTON,CM_EDIT_CUT,MAKELONG(EnableFlag,0));SendMessage(g_hToolBar,TB_ENABLEBUTTON,CM_EDIT_COPY,MAKELONG(EnableFlag,0));SendMessage(g_hToolBar,TB_ENABLEBUTTON,CM_EDIT_PASTE,MAKELONG(EnableFlag,0));GetWindowText(hwnd,szFileName,MAX_PATH);SendMessage(g_hStatusBar,SB_SETTEXT,0,(LPARAM)(EnableFlag?szFileName:""));break;}case WM_SETFOCUS:SetFocus(GetDlgItem(hwnd,IDC_CHILD_EDIT));break;case WM_COMMAND:{switch(LOWORD(wParam)){case CM_FILE_SAVE:{char szFileName[MAX_PATH];GetWindowText(hwnd,szFileName,MAX_PATH);if(*szFileName!='['){if(!SaveFile(GetDlgItem(hwnd,IDC_CHILD_EDIT),szFileName)){MessageBox(hwnd,"Couldn't Save File.","Error.",MB_OK|MB_ICONEXCLAMATION);return 0;}}else{PostMessage(hwnd,WM_COMMAND,MAKEWPARAM(CM_FILE_SAVEAS,0),0);}return 0;}case CM_FILE_SAVEAS:{char szFileName[MAX_PATH];if(GetFileName(hwnd,szFileName,TRUE)){if(!SaveFile(GetDlgItem(hwnd,IDC_CHILD_EDIT),szFileName)){MessageBox(hwnd,"Couldn't Save File.","Error.",MB_OK|MB_ICONEXCLAMATION);return 0;}else{SetWindowText(hwnd,szFileName);}}return 0;}case CM_EDIT_UNDO:SendDlgItemMessage(hwnd,IDC_CHILD_EDIT,EM_UNDO,0,0);break;case CM_EDIT_CUT:SendDlgItemMessage(hwnd,IDC_CHILD_EDIT,WM_CUT,0,0);break;case CM_EDIT_COPY:SendDlgItemMessage(hwnd,IDC_CHILD_EDIT,WM_COPY,0,0);break;case CM_EDIT_PASTE:SendDlgItemMessage(hwnd,IDC_CHILD_EDIT,WM_PASTE,0,0);break;}return 0;}}return DefMDIChildProc(hwnd,Message,wParam,lParam);
}

main.h

#define CM_WINDOW_TILEVERT   9080
#define CM_WINDOW_TILEHORZ  9082
#define CM_WINDOW_ARRANGE   9081
#define CM_WINDOW_TILE  9080
#define CM_WINDOW_CASCADE   9076
#define CM_EDIT_PASTE   9079
#define CM_EDIT_COPY    9078
#define CM_EDIT_CUT 9077
#define CM_EDIT_REDO    9076
#define CM_EDIT_UNDO    9075
#define CM_FILE_SAVEAS  9074
#define CM_FILE_SAVE    9073
#define CM_FILE_OPEN    9072
#define CM_HELP_ABOUT   9072
#define CM_FILE_EXIT    9071
#define CM_FILE_NEW 9070
#define ID_STATUSBAR       4997
#define ID_TOOLBAR         4998
#define ID_MDI_CLIENT      4999
#define ID_MDI_FIRSTCHILD  50000
#define IDC_CHILD_EDIT      2000

resource.rc

#include "main.h"MAIN MENU
{POPUP"&File"{MENUITEM"&New",CM_FILE_NEWMENUITEM"&Open...",CM_FILE_OPENMENUITEM"&Save",CM_FILE_SAVE,GRAYEDMENUITEM"Save &As...",CM_FILE_SAVEAS,GRAYEDMENUITEM SEPARATORMENUITEM"E&xit",CM_FILE_EXIT}POPUP "&Edit",GRAYED{MENUITEM"&Undo\tCtrl+Z",CM_EDIT_UNDOMENUITEM SEPARATORMENUITEM"Cu&t\tCtrl+X",CM_EDIT_CUTMENUITEM"&Copy\tCtrl+C",CM_EDIT_COPYMENUITEM"&Paste\tCtrl+V",CM_EDIT_PASTE}POPUP "&Window",GRAYED{MENUITEM"&Cascade",CM_WINDOW_CASCADEMENUITEM"Tile &Horizontal",CM_WINDOW_TILEHORZMENUITEM"Tile &Vertical",CM_WINDOW_TILEVERTMENUITEM"Arrange &Icons",CM_WINDOW_ARRANGE}
}

程序下载链接https://download.csdn.net/download/m0_69084985/85892559?spm=1001.2014.3001.5503

创作不容易,随手点个赞吧......

一个简单的文本编辑程序源代码相关推荐

  1. python源码编译 带tkinter_python通过Tkinter库实现的一个简单的文本编辑器源码

    下边资料是关于python通过Tkinter库实现的一个简单的文本编辑器的内容. from tkSimpleDialog import askstring from tkFileDialog impo ...

  2. C++ 容器的综合应用的一个简单实例——文本查询程序

    [0. 需求] 最近在粗略学习<C++ Primer 4th>的容器内容,关联容器的章节末尾有个很不错的实例. 通过实现一个简单的文本查询程序,希望能够对C++的容器学习有更深的理解. 由 ...

  3. php下载apk文件源码下载,PHP_php下载文件源代码(强制任意文件格式下载),一个简单的php文件下载源代码 - phpStudy...

    php下载文件源代码(强制任意文件格式下载) 一个简单的php文件下载源代码,虽不支持断点续传等,但是可以满足一些常用的需求了.php下载文件其实用一个a标签就能实现,比如 magento-1.8.1 ...

  4. C++程序设计:原理与实践(进阶篇)15.6 实例:一个简单的文本编辑器

    15.6 实例:一个简单的文本编辑器 列表最重要的性质就是可以在不移动元素的情况下对其进行插入或删除操作.下面我们通过一个例子来说明这一点.考虑应该如何在文本编辑器中表示一个文本文件中的字符.所选用的 ...

  5. python通过Tkinter库实现的一个简单的文本编辑器源码

    下边资料是关于python通过Tkinter库实现的一个简单的文本编辑器的内容. from tkSimpleDialog import askstring from tkFileDialog impo ...

  6. 一个简单的文本聚类实现(python)

    具体实现如下,使用python+结巴分词+scikit-learn实现一个简单的文本聚类得到会议室数据,直接从DBA线上数据库得到预约数据,如下所示,共有3列,分别是会议ID,会议标题和会议时间 因为 ...

  7. 【Qt5开发及实例】16、实现一个简单的文本编辑器(over)

    实现一个简单的文本编辑器 其他具体的代码基础看前面:http://blog.csdn.net/cutter_point/article/details/42839071 1.功能 这个程序又添加了文本 ...

  8. Java实现一个简单的文本编辑器(简易版)

    (用Java做了一个简单的文本编辑器,其中看了很多博主的教学和代码,在这里感谢:@Mark7758.@Kingsly_Liang.@佐敦不下雨.再次感谢!) 1.功能说明: 文件菜单:打开.保存.新建 ...

  9. C/C++ 实现一个简单的文本编辑器(windows程序设计)

    一.实现目的 为了更好的学习QT中的窗口.句柄等概念,先对Windows编程进行了大体了解,通过一个简单文本编辑器的实现,来加深对这些基本概念的理解. 二. 基本功能 支持拷贝粘贴 支持文件保存(保存 ...

最新文章

  1. MBE:ggtreeExtra-用图层叠加方法绘制环形进化树
  2. Mashmokh and Numbers CodeForces - 415C
  3. assign和always的使用
  4. document 获得元素节点,属性节点,文本节点。
  5. PL/SQL DEVELOPER 使用小技巧
  6. 文本二叉树折半查询及其截取值
  7. AngularJS.js: temple
  8. gitlab 迁移_无忌过招:手把手教你搭建自己的GitLab库
  9. HTML学习笔记——DOCTYPE和DTD,标准模式和兼容模式
  10. soapui连接oracle,myeclipse 安装soapui插件
  11. Android WebView开发(三):WebView性能优化
  12. .net实现串口通信
  13. 输入若干个字符串,查找其中的最大字母,在该字母后面插入字符串“(max)”
  14. 网络安全学习--002--windows基础知识
  15. 神仙打架!清华公布2020特奖候选人名单,有人三篇顶会一作,还有人...
  16. 一次fegin调用失败的调错经验
  17. 2018电大计算机操作题怎么评分,2018年度电大专科计算机应用基础学习知识win7系统上机操作技巧题操作技巧.doc...
  18. 手机触屏特效Java_手机触屏触摸特效javascript-TouchSwipe(依赖于jquery库)中文说明...
  19. MySQL安装1045错误代码解决方案
  20. 诺贝尔物理学奖揭晓:LED灯将点亮整个21世纪

热门文章

  1. Java之多线程Runnable(2)卖烤鸭-yellowcong
  2. 关于大数据相关的问答汇总,每天持续更新中哦~
  3. 如何选购便宜的SSL证书
  4. HTML5滑动(swipe)事件,移动端触摸(touch)事件
  5. Redis(二) -- redis.conf详解(redis6)
  6. larval 使用redis做缓存
  7. IEEE latex 编写lemma
  8. 俄罗斯方块Tetris(C基础,Linux终端)
  9. 您需要administrator权限才能对此文件进行更改
  10. adb的升级与版本更新