Icons aus Exe auslesen
-
Ich habe eine Anwendung die zum Starten verschiedener anderer Programme dient...
Ein Programm soll man in den Einstallungen anpassen können. Auf dem Button zum Programmstart steht dann einfach der FileNameWithoutExtension und das Bild was ich mit
string benutzerdefiniertesTool = "irgendwas.exe"; Icon.ExtractAssociatedIcon(benutzerdefiniertesTool);
erledige.
Jetzt möchte ich aber, dass wenn mehrere Symbole in der Exe stecken (Bspl.: mspaint.exe, iexplore.exe etc...), dass der Nutzer aus diesen Icons selber eins auswählen kann...
Google spuckt nur Sachen von wegen DLL oder ein Icon aus...
In der Forumsuche war ich auf ein Beispiel gestoßen, was ich aber nicht geraftt hab. Da war als Parameter nur ein Index angegeben und keine Datei und ExtractAss... akzeptiert auch nur ein ParameterHat jemand ein Konkretes Quellcodebeispiel..???
LG Darius
-
Soweit mir bekannt ist, kannst du das nicht direkt per C# machen, sondern musst die WinAPI verwenden, heisst dadurch auch P/Invoke verwenden.
Mehrere Icons können sich nur in eine PE (Portable Executable) Datei befinden, heisst einer Datei mit der Endung EXE oder DLL (und auch sys und drv, für die Erbsenzähler).
Grundsätzlich erhälst du alle Informationen darüber, wie du die Icons mit der WinAPI extrahierst, unter diesem Link:
http://msdn.microsoft.com/en-us/library/ms997538.aspxP/Invoke dagegen ist ein vollständiges Thema für sich. Für dich dürfte wohl die folgende Seite am einfachsten sein:
http://pinvoke.net/Damit erhälst du die nötigen Signaturen für die Funktionen.
Ansonsten gibt es natürlich auch fertige Libraries dafür. Zum Beispiel findet man nach (!sehr!) kurzer Suche im Inet:
http://www.codeproject.com/Articles/26824/Extract-icons-from-EXE-or-DLL-filesGrüssli
-
Danke, werd ich gleich ausprobieren
Und mir geht es wirklich nur um EXE...
LG Darius
-
Ich habs!! Hab wahrscheinlich einfach wirklich nicht genau genug gesucht.
Auch von CodeProject:
http://www.codeproject.com/Articles/32617/Extracting-Icons-from-EXE-DLL-and-Icon-Manipulatio?rp=/KB/files/ExtractIcons/IconPack_Demo.zipEinfach die auf die TAFactory.IconHelper.dll verweisen...
using TAFactory.IconHelper; Size icoSize = new Size(16, 16); this.Icon = IconHelper.ExtractBestFitIcon("mspaint.exe", 0, Size);
sucht sogar die Passende Größe...
Ansonsten einfach das BestFit und den dritten Parameter weglassen.
Ansonsten gibts auchnoch GetAllIcons...
Edit: Leider muss man sich anmelden. Ich durchforste gerade mal die Dantenschutzdinger von CodeProject, vlt. kann ich die DLL ja über Dropbox hochladen..
-
#Darius# schrieb:
Edit: Leider muss man sich anmelden. Ich durchforste gerade mal die Dantenschutzdinger von CodeProject, vlt. kann ich die DLL ja über Dropbox hochladen..
Das hat nichts mit Datenschutz zu tun. Der Artikel und Source steht unter einer Lizenz, auf welche auch im Artikel hingewiesen wird:
License
This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)
Ich empfehle dir, die Sache eher nicht auf Dropbox hochzuladen. Du darfst zwar die DLL mit deinem Projekt frei verteilen, solange du diese Lizenz mitlieferst und somit das Copyright klar bekannt gibst, aber ich sehe in der Lizenz nirgends, dass man den Code selbst ohne weiteres einfach irgendwo anders hochladen und verbreiten darf. Es dürfte mindestens eine Grauzone sein und zur Rechtsicherheit dieses Forums würde ich mich wohl dazu gezwungen sehen, so einen Link zu entfernen.
Eine Anmeldung bei Code Project schadet zudem sowieso nichts, da es dort immer wieder mal gute Artikel hat.
Grüssli
-
Dravere schrieb:
Eine Anmeldung bei Code Project schadet zudem sowieso nichts, da es dort immer wieder mal gute Artikel hat.
Das stimmt wohl... Da gibt's immer ein par Nützliche Klassen oder DLLs, mit denen man sich einiges erleichtern kann.