Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi EXE Icon austauschen (https://www.delphipraxis.net/108922-exe-icon-austauschen.html)

API 21. Feb 2008 09:29


EXE Icon austauschen
 
Hallo DP

Ich probiere ein Icon einer fremden EXE auszutauschen und bin auf die
UpdateExeIcon gestossen.

2 Fragen:

- Was genau macht MAKELANGID und welche parameter muss man einsetzen?
Sind die Sprachen abhängig vom Programm oder OS?

- Wie findet man die Bezeichnung für "iconGroup" für das Haupticon der Exe Datei?

Delphi-Quellcode:
Uses madres {resource functions for both NT and 9x families - sourcecode @ madshi.net}

{$R *.res}

function MAKELANGID(sPrimaryLanguage: Word;
  sSubLanguage: Word): Word;
begin
  result := (sSubLanguage shl 10) or sPrimaryLanguage;
end;

function UpdateExeIcon(exeFile, iconGroup, icoFile: string; language: word): boolean;
var resUpdateHandle: dword;
  c: TPIconGroup;
begin
  resUpdateHandle := BeginUpdateResourceW(PWideChar(wideString(exeFile)), false);
  if resUpdateHandle <> 0 then
  begin
    if GetIconGroupResourceW(resUpdateHandle, PWideChar(wideString(iconGroup)), language, c) then
      result := LoadIconGroupResourceW(resUpdateHandle, PWideChar(wideString(iconGroup)), language, PWideChar(wideString(icoFile)))
    else
      if StrToIntDef(iconGroup, -1) > -1 then
        result := LoadIconGroupResourceW(resUpdateHandle, PWideChar(pointer(strtoint(iconGroup))), language, PWideChar(wideString(icoFile)))
      else
        result := false;
    result := EndUpdateResourceW(resUpdateHandle, false) and result;
  end else
    result := false;
end;

begin
  UpdateExeIcon('Project1.exe', 'MainIcon', 'red.ico', makelangid(LANG_German, SUBLANG_GERMAN));
end.

toms 23. Feb 2008 09:07

Re: EXE Icon austauschen
 
habe das gleiche Problem. Möchte eine Icon Datei austauschen aber obiger Code funtioniert nicht richtig.

TonyMontana 23. Feb 2008 11:13

Re: EXE Icon austauschen
 
Woher stammt denn der Code überhaupt?

Luckie 23. Feb 2008 11:19

Re: EXE Icon austauschen
 
Zitat:

Zitat von toms
aber obiger Code funtioniert nicht richtig.

Das ist eine unzureichende Fehlerbeschreibung. Was sollen wir damit jetzt anfangen?

API 23. Feb 2008 11:20

Re: EXE Icon austauschen
 
Code stammt von: http://forum.madshi.net/viewtopic.php?p=14897

Garfield 23. Feb 2008 16:18

Re: EXE Icon austauschen
 
http://www.ciuly.com/delphi/misc/mad...con/index.html

toms 26. Feb 2008 18:08

Re: EXE Icon austauschen
 
Zitat:

Zitat von Garfield
http://www.ciuly.com/delphi/misc/madshi/changeIcon/index.html

Der Code scheint auch nicht zu funktionieren. (d.h das Exe Icon wird nicht ausgetauscht)
Getestet unter XP.

Garfield 27. Feb 2008 16:50

Re: EXE Icon austauschen
 
Zitat:

Zitat von toms
Der Code scheint auch nicht zu funktionieren. (d.h das Exe Icon wird nicht ausgetauscht)
Getestet unter XP.

Ich hatte mir den Quelltext bisher nicht angesehen. Jetzt habe ich festgestellt, dass er funktioniert. Allerdings wird das Icon nur extrahiert.

Auch die oben gepostete Function UpdateExeIcon funktioniert. Ein Fehler liegt im Aufruf:
Zitat:

Zitat von API
Delphi-Quellcode:
UpdateExeIcon('Project1.exe', 'MainIcon', 'red.ico', makelangid(LANG_German, SUBLANG_GERMAN));

'MainIcon' muss 'MAINICON' geschrieben werden. Ein weiterer Fehler könnte in der Madres.pas liegen. Denn ob es funktioniert oder nicht ist von der Sprache abhängig. LANG_GERMAN und SUBLANG_GERMAN bzw SUBLANG_DEFAULT funktionieren nicht. Aber das von Ciuly verwendete LANG_ROMANIAN, SUBLANG_DEFAULT.

toms 27. Feb 2008 17:44

Re: EXE Icon austauschen
 
mit 'MAINICON' funktioniert es. Doch stellt sich immer noch die Frage, welche Parameter bei makelangid() eingesetzt werden sollten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz