当前访客身份:游客 [ 登录 | 加入 OSCHINA ]

代码分享

当前位置:
代码分享 » C/C++  » 其他
胡中元

中元浏览器启动引导程序

胡中元 发布于 2016年03月23日 10时, 1评/483阅
分享到: 
收藏 +0
2
中元浏览器详细介绍及下载地址: http://hzy.pw/p/1627

这是一款我开发的便携浏览器,并且专门为 U 盘便携而优化!
最大的特色就在于:免安装版,可放到 U 盘中使用,所有的数据也都存在 U 盘上,不会因运行环境的不同而丢失数据!
标签: <无>

代码片段(3) [全屏查看所有代码]

1. [文件] main.cpp ~ 6KB     下载(10)     跳至 [1] [全屏预览]

/*******************
1、创建快捷方式、启动
2、移动、1、移回数据 
3、移动、1、移回数据 
4、1
********************/


#include <cstdio>
#include <cstdlib>
#include <conio.h>
#include <cstring>
#include <direct.h>

char flash_ver[20]= "20.0.0.306" ;

//清除字符串前后空格、换行符 
void clear_str(char *str)
{
	int del0, del1, i;
	for(del0=0; str[del0]!='\0'&& (str[del0]==10||str[del0]==13||str[del0]==32); del0++);
	for(del1=del0; str[del1]!='\0'; del1++);
	for(del1--; del1>del0&& (str[del1]==10||str[del1]==13||str[del1]==32) ;del1--);
	
	for(i=del0;i<=del1;i++)
		str[i-del0]=str[i];
	str[i]='\0';
}

//参数1:AMD64/x86
int main(int argc, char* argv[])
{
	printf("\n\t\t中元浏览器 By Moshel\n");
	printf("====================================================\n\n\n");

	system("title 中元浏览器 - 启动器");
	system("color 72");
	
	if(argc<2)
	{
		printf(" 加载失败,请运行START.bat引导启动中元浏览器 ^O^\n\n ");
		system("pause");
		return 0;
	}
	
	printf(" 中元浏览器支持以下启动方式:\n\n");
	printf("\t1、不复制文件直接启动\n\t   会伤U盘,仅适合在该电脑上短时间使用\n\n");
	printf("\t2、将UserData复制到硬盘再运行\n\t   避免临时文件的频繁读写对U盘造成损害\n\n");
	printf("\t3、将整个浏览器复制到本地硬盘后运行\n\t   仅适合需要拔出U盘的情况\n\n");
	printf("\t4、直接运行浏览器,而不加载UserData\n\t   数据无所谓,只要一个Chrome就好\n\n");
	
	printf("\n 请输入你的选择:");
	short start_way=0;
	while(start_way<'1'||start_way>'4')
		start_way=getch(); //getchar();
	start_way-='0';//对应数字选项
	
	system("cls");
	
	char *app_name; 
	if(argv[1][0]=='A') //AMD64
	{
		char app_name_str[10]="x64";
		app_name=app_name_str;
		printf("\n 检测到64位系统\n\n");
	}
	else
	{
		char app_name_str[10]="x86";
		app_name=app_name_str;
		printf("\n 检测到32位系统\n\n");
	}
	
	
	printf(" 中元浏览器开始加载方案%d...\n\n",start_way);
	/* 变量创建
		tmp_dir		%TMP%\zyllq\
		desktop		%desktop%\ 
		canshu		不包括user-data-dir、flags、flash的运行参数,无前后空格
		app_dir		...\chrome.exe
		app86_dir	x86\chrome.exe
		start_dir	...\
		data_dir	~~~\User Data
		pwd_dir		~~~\
		flash_dir	~~~\pepflashplayer_x64.dll 或 _x86.dll
		flash86_dir	~~~\pepflashplayer_x86.dll
		——————
		app_name	x64或x86
	*/
	char str[999]; FILE *f;
	
	char pwd_dir[333];
	f=fopen("data\\pwd.txt","r");
	if(f==NULL)
	{
		printf(" 严重错误:无法读取当前所在目录,无法加载User Data。\n\n");
		system("pause");
		return 1;
	}
	fgets(pwd_dir,333,f);
	fclose(f);
	clear_str(pwd_dir);	
	
	char *tmp=getenv("TMP"), tmp_dir[222];
	sprintf(tmp_dir,"%s\\zyllq\\",tmp);
	
	char canshu[100]="--allow-outdated-plugins", desktop[100];
	
	sprintf(desktop,"%s\\Desktop\\",getenv("USERPROFILE")); 
	if(access(desktop,0)!=0)
	{
		sprintf(desktop,"%s\\桌面\\",getenv("USERPROFILE"));
		if(access(desktop,0)!=0)
			printf(" 无法检测到你的桌面的路径,这会导致创建快捷方式失败!\n\n"); 
	}
	 
	
	char app_dir[333], start_dir[333], data_dir[333];
	if(start_way==1)
	{
		sprintf(app_dir,"%s%s\\chrome.exe",pwd_dir,app_name);
		sprintf(start_dir,"%s%s\\",pwd_dir,app_name);
		sprintf(data_dir,"%sUser Data",pwd_dir);
	}
	else if(start_way==2)
	{
		sprintf(app_dir,"%s%s\\chrome.exe",pwd_dir,app_name);
		sprintf(start_dir,"%s%s\\",pwd_dir,app_name);
		sprintf(data_dir,"%sUser Data",tmp_dir);
	}
	else if(start_way==3)
	{
		sprintf(app_dir,"%s%s\\chrome.exe",tmp_dir,app_name);
		sprintf(start_dir,"%s%s\\",tmp_dir,app_name);
		sprintf(data_dir,"%sUser Data",tmp_dir);
	}
	else
	{
		sprintf(app_dir,"%s%s\\chrome.exe",pwd_dir,app_name);
		sprintf(start_dir,"%s%s\\",pwd_dir,app_name);
		sprintf(data_dir,"%sUser Data",tmp_dir);
	}
	
	char flash_dir[333], flash86_dir[333];
	if(start_way==3)
	{
		sprintf(flash_dir,"%spepflashplayer_%s.dll",tmp_dir,app_name);
		sprintf(flash86_dir,"%spepflashplayer_x86.dll",tmp_dir);
	}
	else
	{
		sprintf(flash_dir,"%spepflashplayer_%s.dll",pwd_dir,app_name);
		sprintf(flash86_dir,"%spepflashplayer_x86.dll",pwd_dir);
	}
		
	char app86_dir[333];
	sprintf(app86_dir,"%sx86\\chrome.exe",pwd_dir);
	
	
	//桌面目录创建 
	sprintf(str,"%s中元浏览器",desktop); 
	mkdir(str); 
	//进行移动 
	if(start_way==2 || start_way==3)
	{
		printf(" 正在部署User Data到本地磁盘...\n ");
		sprintf(str,"xcopy \"%sUser Data\" \"%sUser Data\\\" /S /Q /Y",pwd_dir,tmp_dir);
		system(str);
		//移回脚本
		sprintf(str,"%s中元浏览器\\将UserData移回U盘.cmd",desktop); 
		f=fopen(str,"w");
		if(f!=NULL)
		{
			fprintf(f,": By Moshel. (http://hzy.pw/) \n\n");
			fprintf(f,"@echo off \n\n");
			fprintf(f,"echo 使用中元浏览器一段时间后\necho 可以选择在这里将本地磁盘的UserData复制回U盘,保存最新的个人数据\n");
			fprintf(f,"echo.\npause \n\necho.\necho 数据移回中,请耐心等待...\n\n");
			fprintf(f,"md \"%sUser Data new\"\n",pwd_dir);
			fprintf(f,"xcopy \"%sUser Data\" \"%sUser Data new\" /S /Q /Y \n",tmp_dir,pwd_dir);
			fprintf(f,"rd \"%sUser Data\" /S /Q \n",pwd_dir);
			fprintf(f,"move /Y \"%sUser Data new\" \"%sUser Data\" \n\n",pwd_dir,pwd_dir);
			fprintf(f,"echo.\necho 移回成功!\necho.\npause\n");
			fclose(f);
			printf(" 已在桌面创建移回脚本\n\n");
		}
		else
			printf(" 在桌面创建移回脚本未成功!\n\n");
		
	}
	if(start_way==3)
	{
		printf(" 正在部署中元浏览器到本地磁盘...\n ");
		sprintf(str,"xcopy \"%s%s\" \"%s%s\\\" /S /Q /Y",pwd_dir,app_name,tmp_dir,app_name);
		system(str);
		sprintf(str,"copy /Y \"%spepflashplayer*\" \"%s\\\"",pwd_dir,tmp_dir);
		system(str);
		printf("\n");
	}
	
	//快捷方式
	printf(" 正在创建桌面快捷方式...\n\n");
	sprintf(str,"%s中元浏览器\\运行中元浏览器.cmd",desktop); 
	f=fopen(str,"w");
	sprintf(str,"start \"\" \"%s\" --user-data-dir=\"%s\" --ppapi-flash-path=\"%s\" --ppapi-flash-version=\"%s\" %s",app_dir,data_dir,flash_dir,flash_ver,canshu); 
	if(f==NULL)
		printf(" 创建失败!\n\n");
	else
	{
		fprintf(f,": By Moshel. (http://hzy.pw/)\n\n%s\n",str);
		fclose(f);
	}
	//启动
	system(str);
	//x86额外支持
	if(app_name[1]=='6')
	{
		sprintf(str,"%s中元浏览器\\运行x86版本(支持更多加载项).cmd",desktop); 
		f=fopen(str,"w");
		if(f!=NULL)
		{
			sprintf(str,"start \"\" \"%s\" --user-data-dir=\"%s\" --ppapi-flash-path=\"%s\" --ppapi-flash-version=\"%s\" %s",app86_dir,data_dir,flash86_dir,flash_ver,canshu); 
			fprintf(f,": By Moshel. (http://hzy.pw/)\n\n%s\n",str);
			fclose(f);
			printf(" 同时已创建x86版本快捷方式\n\n");
		}
	} 

	printf("====================================================\n\t中元浏览器已加载完成,请享用~ :D\n\n");
	system("ping -n 5 127.0.0.1 > nul");
}

2. [图片] 无标题3.jpg    

3. [图片] 无标题21.jpg    



开源中国-程序员在线工具:Git代码托管 API文档大全(120+) JS在线编辑演示 二维码 更多»

发表评论 回到顶部 网友评论(1)

  • 1楼:g8up 发表于 2017-05-06 19:58 回复此评论
    代码实现了功能,赞!
    可以将 main() 拆分成几个小而美的函数,才符合你的气质!
开源从代码分享开始 分享代码