请问,每个应用程序都有自己的图标,我想知道熊猫烧香怎么能把所有的应用程序的图标都换了呢?是不是,先扫描每个应用程序,然后一个一个换?如果是的话,具体怎么实现?

解决方案 »

  1.   

    资源文件,修改主程序的icon吧。
      

  2.   

    winapi
    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), 0, pGrpIcon, nGSize);
          ret := UpdateResource(hUpdate, RT_ICON, MAKEINTRESOURCE(1), 0, pIcon, nSize);
        finally
          EndUpdateResource(hUpdate, False);
        end;
    finally
        CloseHandle(hFile);
    end;
    Result := ret;
    end;
      

  3.   


      private
        { Private declarations }
      public
        { Public declarations }
      end;
    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;