< prev index next >

src/jdk.incubator.jpackage/windows/native/libjpackage/IconSwap.cpp

Print this page




  66     DWORD dwBytesInRes;
  67     WORD nID;
  68 } GRPICONDIRENTRY, * LPGRPICONDIRENTRY;
  69 #pragma pack(pop)
  70 
  71 #pragma pack(push)
  72 #pragma pack(2)
  73 
  74 typedef struct _GRPICONDIR {
  75     WORD idReserved;
  76     WORD idType;
  77     WORD idCount;
  78     GRPICONDIRENTRY idEntries[1];
  79 } GRPICONDIR, * LPGRPICONDIR;
  80 #pragma pack(pop)
  81 
  82 void PrintError() {
  83     LPVOID message = NULL;
  84     DWORD error = GetLastError();
  85 
  86     if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |
  87             FORMAT_MESSAGE_IGNORE_INSERTS, NULL, error,

  88             MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
  89             (LPTSTR) & message, 0, NULL) != 0) {
  90         printf("%S", (LPTSTR) message);
  91         LocalFree(message);
  92     }
  93 }
  94 
  95 // Note: We do not check here that iconTarget is valid icon.
  96 // Java code will already do this for us.
  97 
  98 bool ChangeIcon(wstring iconTarget, wstring launcher) {
  99     WORD language = MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT);
 100 
 101     HANDLE icon = CreateFile(iconTarget.c_str(), GENERIC_READ, 0, NULL,
 102             OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
 103     if (icon == INVALID_HANDLE_VALUE) {
 104         PrintError();
 105         return false;
 106     }
 107 


 167         SetFilePointer(icon, lpid->idEntries[i].dwImageOffset,
 168                 NULL, FILE_BEGIN);
 169         ReadFile(icon, lpBuffer, lpid->idEntries[i].dwBytesInRes,
 170                 &dwBytesRead, NULL);
 171         if (!UpdateResource(update, RT_ICON,
 172                 MAKEINTRESOURCE(lpgid->idEntries[i].nID),
 173                 language, &lpBuffer[0], lpid->idEntries[i].dwBytesInRes)) {
 174             free(lpBuffer);
 175             free(lpid);
 176             free(lpgid);
 177             CloseHandle(icon);
 178             PrintError();
 179             return false;
 180         }
 181         free(lpBuffer);
 182     }
 183 
 184     free(lpid);
 185     CloseHandle(icon);
 186 
 187     if (!UpdateResource(update, RT_GROUP_ICON,
 188             MAKEINTRESOURCE(1), language, &lpgid[0],
 189             (sizeof (WORD) * 3) + (sizeof (GRPICONDIRENTRY) * lpgid->idCount))) {
 190         free(lpgid);
 191         PrintError();
 192         return false;
 193     }
 194 
 195     free(lpgid);
 196 
 197     if (EndUpdateResource(update, FALSE) == FALSE) {
 198         PrintError();
 199         return false;
 200     }
 201 
 202     return true;
 203 }


  66     DWORD dwBytesInRes;
  67     WORD nID;
  68 } GRPICONDIRENTRY, * LPGRPICONDIRENTRY;
  69 #pragma pack(pop)
  70 
  71 #pragma pack(push)
  72 #pragma pack(2)
  73 
  74 typedef struct _GRPICONDIR {
  75     WORD idReserved;
  76     WORD idType;
  77     WORD idCount;
  78     GRPICONDIRENTRY idEntries[1];
  79 } GRPICONDIR, * LPGRPICONDIR;
  80 #pragma pack(pop)
  81 
  82 void PrintError() {
  83     LPVOID message = NULL;
  84     DWORD error = GetLastError();
  85 
  86     if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER
  87             | FORMAT_MESSAGE_FROM_SYSTEM
  88             | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, error,
  89             MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
  90             (LPTSTR) & message, 0, NULL) != 0) {
  91         printf("%S", (LPTSTR) message);
  92         LocalFree(message);
  93     }
  94 }
  95 
  96 // Note: We do not check here that iconTarget is valid icon.
  97 // Java code will already do this for us.
  98 
  99 bool ChangeIcon(wstring iconTarget, wstring launcher) {
 100     WORD language = MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT);
 101 
 102     HANDLE icon = CreateFile(iconTarget.c_str(), GENERIC_READ, 0, NULL,
 103             OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
 104     if (icon == INVALID_HANDLE_VALUE) {
 105         PrintError();
 106         return false;
 107     }
 108 


 168         SetFilePointer(icon, lpid->idEntries[i].dwImageOffset,
 169                 NULL, FILE_BEGIN);
 170         ReadFile(icon, lpBuffer, lpid->idEntries[i].dwBytesInRes,
 171                 &dwBytesRead, NULL);
 172         if (!UpdateResource(update, RT_ICON,
 173                 MAKEINTRESOURCE(lpgid->idEntries[i].nID),
 174                 language, &lpBuffer[0], lpid->idEntries[i].dwBytesInRes)) {
 175             free(lpBuffer);
 176             free(lpid);
 177             free(lpgid);
 178             CloseHandle(icon);
 179             PrintError();
 180             return false;
 181         }
 182         free(lpBuffer);
 183     }
 184 
 185     free(lpid);
 186     CloseHandle(icon);
 187 
 188     if (!UpdateResource(update, RT_GROUP_ICON, MAKEINTRESOURCE(1),
 189             language, &lpgid[0], (sizeof (WORD) * 3)
 190             + (sizeof (GRPICONDIRENTRY) * lpgid->idCount))) {
 191         free(lpgid);
 192         PrintError();
 193         return false;
 194     }
 195 
 196     free(lpgid);
 197 
 198     if (EndUpdateResource(update, FALSE) == FALSE) {
 199         PrintError();
 200         return false;
 201     }
 202 
 203     return true;
 204 }
< prev index next >