c++改U盘图标

效果:

 

食用方法:

1.将要修改的ico图片放入ico图片文件夹。

2.打开exe文件,选择图片,选择U盘(硬盘也行)的盘符

 3.插拔U盘,完成。

U盘原来的图标也是可以覆盖的。

 

源代码:

#include<fstream>
#include<iostream>
#include<windows.h>
#include <string>
#include <vector>
#include <io.h>
#include "SGK_min.h"
using namespace std;

int main(){		
	SetTitle("U盘改图标工具");
	yanse(15);
	cout<<"图标列表([ico图片]这个文件夹中):"<<endl;
	yanse(7);
	vector<string> fileNames;
	string path("ico图片"); 	//自己选择目录测试
	getFileNames(path, fileNames);
	string lj[1145]={};
	char lj_ch[114]={};
	int lj_l=0;
	for (const auto &ph:fileNames){lj[++lj_l]=ph;}
	for(int i=1;i<=lj_l;i++){cout<<i<<":"<<lj[i]<<endl;}
	int xz,xz_l=0;
	yanse(14);
	cout<<endl<<"请输入选择的图标的数字编号:";
	yanse(7);
	cin>>xz;
	for(int i=0;i<lj[xz].size();i++){lj_ch[i]=lj[xz][i];}
	char xz_[1145]={};
	string xz_str;
	for(int i=8;i<lj[xz].size();i++){
		xz_[xz_l]=lj[xz][i];
		xz_l++;
	}	
	xz_str=xz_;
	
char q;
yanse(14);
cout<<"请输入目标盘符(一个大写字母):";
yanse(7);
cin>>q;
	
cout<<endl<<xz_<<endl;

char w[114]={},e[114]={};
string w_=":\\autorun.inf",e_=":\\"+xz_str;
w[0]=q;e[0]=q;
for(int i=0;i<w_.size();i++){w[i+1]=w_[i];}
for(int i=0;i<e_.size();i++){e[i+1]=e_[i];}
yanse(15);
const char* filename=w;
cout<<"删除"<<filename<<endl;
remove(filename);

fstream zy;
zy.open(filename,ios::app);
zy.close();
SetFileAttributes(filename,FILE_ATTRIBUTE_NORMAL);  
zy.open(filename,ios::out);
cout<<"创建"<<filename<<endl;
cout<<"写入"<<filename<<endl;
zy<<"[autorun]\n";
zy<<"icon=";
zy<<xz_;
zy.close();

const char* filename_=lj_ch;
const char* filename__=e;
remove(filename__);
cout<<"读取:"<<filename_<<endl;
cout<<"创建"<<filename__<<endl;
fstream out;
out.open(filename__,ios::out);
if(out){
cout<<"写入"<<filename__<<endl;
DWORD getlastError;
if (!CopyFileA(filename_,filename__,false))
{yanse(12);
cout<<"失败,错误码:1";
yanse(7);
getlastError = GetLastError();
return -1;
}
out.close();
}
SetFileAttributes(filename__,FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_ARCHIVE);
SetFileAttributes(filename,FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_ARCHIVE);

yanse(10);
cout<<"成功,请重新插拔U盘."<<endl;
yanse(7);
system("pause");

    return 0;
}

附加库(SGK_min.h):

#include<fstream>
#include<iostream>
#include<windows.h>
#include <string>
#include <vector>
#include <io.h>
using namespace std;
void getFileNames(string path, vector<string>& files)
{
	intptr_t hFile = 0;
	//文件信息
	struct _finddata_t fileinfo;
	string p;
	if ((hFile = _findfirst(p.assign(path).append("\\*.ico").c_str(), &fileinfo)) != -1)
	{
		do
		{
			//如果是目录,递归查找
			//如果不是,把文件绝对路径存入vector中
			if ((fileinfo.attrib & _A_SUBDIR))
			{
				if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
					getFileNames(p.assign(path).append("\\").append(fileinfo.name), files);
			}
			else
			{
				files.push_back(p.assign(path).append("\\").append(fileinfo.name));
			}
		} while (_findnext(hFile, &fileinfo) == 0);
		_findclose(hFile);
	}
}

void SetTitle(LPCSTR lpTitle) {SetConsoleTitle(lpTitle);}

void yanse(int n)//颜色
	{
	if(n==0)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY);
	else if(n==16)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
	else SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), n);
	return;
		//将光标输出的物品改变为n所代表的颜色,部分如下: 
		//8:亮灰色,9:亮蓝色,10:亮绿色,11:亮蓝色
		//12:亮红色,13:亮粉色,14:亮黄色,15:亮白色
		//2~7为上面对应颜色的暗色,1:黑色 
	}

注意:

以上两个代码的文件应该放在一起,还要创建一个名叫“ico图片”的文件夹和它俩一起。

文件:https://download.csdn.net/download/tan107821/88218746

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值