- Offizieller Beitrag
Wir können zwar für GUI in Nim Programmen ein Icon setzen, nicht aber für die erstellte Exe selbst.
Mit RessourceHacker kann man das erledigen. Um das etwas zu vereinfachen, habe ich den Kommandozeilenaufruf für RH "eingepackt".
Am Besten, man erstellt eine eigene Umgebungsvariable "ResHack" mit dem Pfad zur RessourceHacker.exe. Diese wird standardmäßig im Programm abgefragt.
Wenn man jetzt noch die setExeIco.exe zur Umgebungsvariable "Path" hinzufügt, hat man einen recht komfortablen Aufruf aus jedem beliebigen Ordner.
Parameter 1 und 2 sind erforderlich - in dieser Reihenfolge (Exe-bei-der-Icon-gesetzt-wird, Icon-Pfad). Optionale Parameter sind:
--rh:Pfad_zum_Reshacker - überschreibt evtl. vorhandene Umgebungsvariable
--new:neuer_Pfad_der_exe_nach_Setzen_des_Icon - standardmäßig wird der Pfad der Exe unverändert übernommen
Syntax (Bsp):
C:\CODE\nim\_myExamples_>setExeIco bounds.exe "C:\Users\BugFix\Pictures\ICO\Gnome-Face-Monkey.ico"
Aufruf des Reshackers erfolgt dann mit:
"C:/portable/resource_hacker/ResourceHacker.exe" -open "bounds.exe" -save "bounds.exe" -action addskip -res "C:\Users\BugFix\Pictures\ICO\Gnome-Face-Monkey.ico" -mask ICONGROUP,MAINICON,
import os, osproc, parseopt, strformat
# EMPFOHLEN:
# Einrichten Benutzervariable
# Key: ResHack
# Val: "Pfad\zur\ResourceHacker.exe"
# Syntax:
# setExeIco.exe "Hier\Icon\setzen.exe" "Path\MyIcon.ico" --new: "Unter\anderem\Namen\Speichern.exe" --rh:"Pfad\zur\ResourceHacker.exe"
# --new und --rh sind optional. Sollte --rh angegeben werden, obwohl Environmentvariable "ResHack" gesetzt ist, wird der Wert von --rh verwendet.
let cmdLine = commandLineParams()
var
p = initOptParser(cmdLine)
rh_path: string = getEnv("ResHack")
set_exe, ico_path, new_exe: string
arg_num = 0
cmd_str: string
for kind, key, val in p.getopt():
case kind
of cmdArgument:
arg_num += 1
if arg_num == 1: set_exe = key
elif arg_num == 2: ico_path = key
else: discard
of cmdLongOption:
case key
of "--new": new_exe = val
of "--rh": rh_path = val
else: discard
else: discard
if new_exe == "": new_exe = set_exe
if rh_path == "":
echo "Reshacker nicht gefunden"
else:
cmd_str = fmt("\"{rh_path}\" -open \"{set_exe}\" -save \"{new_exe}\" -action addskip -res \"{ico_path}\" -mask ICONGROUP,MAINICON,")
discard execCmd(cmd_str)
Alles anzeigen