reactos操作系统实现(59)
当用户安装ReactOS系统时,需要选择合适的安装目录,因为同一个类型的操作系统,可以安装多次,可以选择不同的目录来安装,以便在同一台电脑,同一个磁盘分区里安装不同的系统。如下图: 选择系统目录的实现代码如下: #001 static PAGE_NUMBER #002 InstallDirectoryPage(PINPUT_RECORD Ir) #003 { #004 PDISKENTRY DiskEntry; #005 PPARTENTRY PartEntry; #006 WCHAR InstallDir[51]; #007 PWCHAR DefaultPath; #008 INFCONTEXT Context; #009 ULONG Length; #010
判断分区列表是否存在。 #011 if (PartitionList == NULL || #012 PartitionList->CurrentDisk == NULL || #013 PartitionList->CurrentPartition == NULL) #014 { #015 /* FIXME: show an error dialog */ #016 return QUIT_PAGE; #017 } #018
获取磁盘分区的入口项。 #019 DiskEntry = PartitionList->CurrentDisk; #020 PartEntry = PartitionList->CurrentPartition; #021
查找安装目录里的路径数据。 #022 /* Search for 'DefaultPath' in the 'SetupData' section */ #023 if (!SetupFindFirstLineW (SetupInf,L"SetupData",L"DefaultPath",&Context)) #024 { #025 MUIDisplayError(ERROR_FIND_SETUPDATA,Ir,POPUP_WAIT_ENTER); #026 return QUIT_PAGE; #027 } #028
读取缺省路径数据。 #029 /* Read the 'DefaultPath' data */ #030 if (INF_GetData (&Context,NULL,&DefaultPath)) #031 { #032 wcscpy(InstallDir,DefaultPath); #033 } #034 else #035 {
如果没有配置,默认安装的目录,就是ReactOS目录。 #036 wcscpy(InstallDir,L"//ReactOS"); #037 } #038 #039 Length = wcslen(InstallDir); #040 CONSOLE_SetInputTextXY(8,11,51,InstallDir); #041 MUIDisplayPage(INSTALL_DIRECTORY_PAGE); #042 #043 if (IsUnattendedSetup) #044 { #045 return(InstallDirectoryPage1 (InstallDir,DiskEntry,PartEntry)); #046 } #047
循环地检查输入的目录。 #048 while(TRUE) #049 { #050 CONSOLE_ConInKey(Ir); #051 #052 if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) && #053 (Ir->Event.KeyEvent.wVirtualKeyCode == VK_F3)) /* F3 */ #054 { #055 if (ConfirmQuit(Ir) == TRUE) #056 return(QUIT_PAGE); #057 #058 break; #059 } #060 else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */ #061 {
这里调用函数InstallDirectoryPage1来设置安装目录。 #062 return (InstallDirectoryPage1 (InstallDir,PartEntry)); #063 } #064 else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x08) /* BACKSPACE */ #065 { #066 if (Length > 0) #067 { #068 Length--; #069 InstallDir[Length] = 0; #070 CONSOLE_SetInputTextXY(8,InstallDir); #071 } #072 } #073 else if (isprint(Ir->Event.KeyEvent.uChar.AsciiChar)) #074 { #075 if (Length < 50) #076 { #077 InstallDir[Length] = (WCHAR)Ir->Event.KeyEvent.uChar.AsciiChar; #078 Length++; #079 InstallDir[Length] = 0; #080 CONSOLE_SetInputTextXY(8,InstallDir); #081 } #082 } #083 } #084 #085 return(INSTALL_DIRECTORY_PAGE); #086 }
通过上面函数处理,如果选择合适目录,就进入下一步的页面,PREPARE_COPY_PAGE。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- The Swift Programming Language学习笔记(十五)——构造过
- c – Windows与Linux内存分配/ std :: list构造函数性能
- oracle – 如何在没有在对象之前预先修复模式名称的情况下由
- ruby-on-rails – 未初始化的常量ActionView :: CompiledTe
- quick cocos2dx学习记录
- Postgresql – 备份数据库并恢复不同的所有者?
- c# – 在拖放游戏中匹配对象
- 在Vue-cli里应用Vuex的state和mutations方法
- flex动态添加button并添加click事件
- c# – 如何测试web API的JSON响应?