给一段能搜索所有EXE文件,并修改掉EXE文件图标的代码~

解决方案 »

  1.   

    通过函数实现搜索后缀名为(.EXE)的文件。
    并修改它的图标。
      

  2.   

    最好分步来,先能获得能搜索所有EXE文件的代码,然后 也就是 if then修改掉EXE文件图标的代码~估计......
      

  3.   

    http://www.bianchengqu.com/a/Delphi/20101028/1250.html
      

  4.   

    失踪的月亮谢谢,我要的是能自动搜索EXE文件,并替换掉图标,这个代码你有没?
      

  5.   

    //搜索文件 FindFirst; FindNext; FindClose
    var
      sr: TSearchRec;     //定义 TSearchRec 结构变量
      Attr: Integer;      //文件属性
      s: string;          //要搜索的内容
      List: TStringList;  //存放搜索结果
    begin
      s := 'c:\windows\*.txt';
      Attr := faAnyFile;              //文件属性值faAnyFile表示是所有文件
      List := TStringList.Create;     //List建立  if FindFirst(s,Attr,sr)=0 then  //开始搜索,并给 sr 赋予信息, 返回0表示找到第一个
      begin
        repeat                        //如果有第一个就继续找
          List.Add(sr.Name);          //用List记下结果
        until(FindNext(sr)<>0);       //因为sr已经有了搜索信息, FindNext只要这一个参数, 返回0表示找到
      end;
      FindClose(sr);                  //需要结束搜索, 搜索是内含句柄的  ShowMessage(List.Text);         //显示搜索结果
      List.Free;                      //释放List  //更多注释:
      //TSearchRec 结构是内涵文件大小、名称、属性与时间等信息
      //TSearchRec 中的属性是一个整数值, 可能的值有:
      //faReadOnly  1   只读文件
      //faHidden    2   隐藏文件
      //faSysFile   4   系统文件
      //faVolumeID  8   卷标文件
      //faDirectory 16  目录文件
      //faArchive   32  归档文件
      //faSymLink   64  链接文件
      //faAnyFile   63  任意文件  //s 的值也可以使用?通配符,好像只支持7个?, 如果没有条件就是*, 譬如: C:\*
      //实际使用中还应该在 repeat 中提些条件, 譬如判断如果是文件夹就递归搜索等等
    end;查找exe
      

  6.   

    换图标type
    PICONDIRENTRY = ^ICONDIRENTRY;
    ICONDIRENTRY = packed record
      bWidth: Byte;
      bHeight: Byte;
      bColorCount: Byte;
      bReserved: Byte;
      wPlanes: Word;
      wBitCount: Word;
      dwBytesInRes: DWORD;
      dwImageOffset: DWORD;
    end;PICONDIR = ^ICONDIR;
    ICONDIR = packed record
      idReserved: Word;
      idType: Word;
      idCount: Word;
      idEntries: ICONDIRENTRY;
    end;PGRPICONDIRENTRY = ^GRPICONDIRENTRY;
    GRPICONDIRENTRY = packed record
      bWidth: Byte;
      bHeight: Byte;
      bColorCount: Byte;
      bReserved: Byte;
      wPlanes: Word;
      wBitCount: Word;
      dwBytesInRes: DWORD;
      nID: Word;
    end;PGRPICONDIR = ^GRPICONDIR;
    GRPICONDIR = packed record
      idReserved: Word;
      idType: Word;
      idCount: Word;
      idEntries: GRPICONDIRENTRY;  
    end;  function MAKELANGID(usPrimaryLanguage, usSubLanguage:WORD): DWORD;
    begin
      Result:=(usSubLanguage shl 10) or usPrimaryLanguage;
    end;//////////////////////////////////////////////
    //函数说明:修改EXE图标
    //
    //参 数:IconFile 图标文件
    // ExeFile 被修改的EXE文件
    //
    //返回值: 成功为True,否则False
    /////////////////////////////////////////////
    function ChangeExeIcon(IcoFile, ExeFile: string): Boolean;
    var
    stID: ICONDIR;
    stGID: GRPICONDIR;pGrpIcon: PBYTE;
    pIcon: PBYTE;
    hUpdate: DWORD;
    nSize, nGSize: DWORD;  
    hFile: THandle;
    dwReserved: DWORD;
    ret: Boolean;
    begin
    Result := False;  hFile := CreateFile(PChar(IcoFile), GENERIC_READ, 0, nil, OPEN_EXISTING,
      FILE_ATTRIBUTE_NORMAL, 0);
      if hFile = INVALID_HANDLE_VALUE then  Exit;try  
      ReadFile(hFile, stID, Sizeof(ICONDIR), dwReserved, nil);  nSize := stID.idEntries.dwBytesInRes;
      GetMem(pIcon, nSize);
      SetFilePointer(hFile, stID.idEntries.dwImageOffset, nil, FILE_BEGIN);
      ReadFile(hFile, pIcon^, nSize, dwReserved, nil);  stGID.idType := 1;
      stGID.idCount := stID.idCount;
      stGID.idReserved := 0;
      CopyMemory(@stGID.idEntries.bWidth, @stID.idEntries.bWidth, 12);
      stGID.idEntries.nID := 0;  nGSize := Sizeof(GRPICONDIR);
      GetMem(pGrpIcon, nGSize);
      CopyMemory(pGrpIcon, @stGID, nGSize);  hUpdate := BeginUpdateResource(PChar(ExeFile), False);
      try
      ret := UpdateResource(hUpdate, RT_GROUP_ICON, MAKEINTRESOURCE(1), MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), pGrpIcon, nGSize);
      ret := UpdateResource(hUpdate, RT_ICON, MAKEINTRESOURCE(1), MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), pIcon, nSize);
      finally
      EndUpdateResource(hUpdate, False);
      end;
    finally
      CloseHandle(hFile);
    end;Result := ret;
    end;