效果:
食用方法:
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图片”的文件夹和它俩一起。