AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Delphi-PRAXiS - Lounge Betriebssysteme Windows - benutzerdefinierte Symbole zu Dateitypen
Thema durchsuchen
Ansicht
Themen-Optionen

Windows - benutzerdefinierte Symbole zu Dateitypen

Ein Thema von MicMic · begonnen am 23. Aug 2018 · letzter Beitrag vom 24. Aug 2018
Antwort Antwort
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Windows - benutzerdefinierte Symbole zu Dateitypen

  Alt 23. Aug 2018, 21:14
Hallo,
kann das gerade nur in Windows 10 prüfen.

Man kann ja für jeden Ordner ein eigenes Symbol zuordnen.
Dies geht dann z.B. auch für Dateien mit der Endung ".url" oder Verknüpfungsdateien (*.lnk) können unterschiedliche Symbole (also für jede .lnk Datei extra) aufweisen.

DLL-Dateien oder INI-Dateien haben dagegen ein zugeordnetes Symbol, sprich alle DLL-Dateien bzw. INI-Dateien haben dasselbe Symbol. Im Windows Eigenschaftsfenster findet sich hier keine "Symbol ändern" Schaltfläche an. War das schon immer so in jeder Windows-Version?

Ich dachte ja, so eine Textdatei (.txt) kann wiederum ein benutzerdefiniertes Symbol haben aber auch hier haben alle dann ein einheitliches Symbol.

Ich frage mich wie es mit Word-Dateien ausschaut (kein Word installiert)? Das müsste doch gehen... wobei ich schon zweifle da ".txt" Dateien in Windows auch alle ein selbes zugeordnetes Symbol haben. Oder ich finde nicht wirklich den Ort zum ändern des Symbols

Auch vermisse ich bei ".bat" Dateien eine "Symbol ändern" Schaltfläche. Ich dachte das geht. Also "starten.bat" und "beenden.bat" unterschiedliche Symbole zuordnen. Aber das geht nicht. Natürlich wieder als Verknüpfung... klar das geht. Jedenfalls kann man bei ".exe" Dateien auch kein Symbol abändern, wobei hier ja jede EXE wiederum ein eigenes Symbol haben kann.

Eigentlich müsste ich wissen, welche Dateiendungen evtl. ein benutzerdefiniertes Symbol haben kann (aber natürlich nicht muss und ein zugeordnetes von Windows genutzt wird). So viele Dateiendungen müssten es dann ja nicht sein.

Gruß
Michael
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Windows - benutzerdefinierte Symbole zu Dateitypen

  Alt 23. Aug 2018, 21:36
Wenn es sich um das auslesen handelt, so gehe ich vor, vielleicht gibt es alternativen?
'Computer\HKEY_CLASSES_ROOT\' + '.ext' den Default Wert als String Auslesen.
Prüfen ob der String ne Datei ist oder so weiter machen:
'Computer\HKEY_CLASSES_ROOT\' + ResultStringVonOben + '\DefaultIcon\' den Default Wert als String Auslesen.
Prüfen ob der String ne Datei ist oder so weiter machen:
'Computer\HKEY_CLASSES_ROOT\' + ResultStringVonGerade + '\DefaultIcon\' den Default Wert als String Auslesen.
Nun solltest Du Datei mit Icon + Optional IconIndex von einer '.ext' kennen.
(tiefere Verwurzelungen sind mir pers. noch nicht begegnet, bei Bedarf halt immer wieder rein bis man als Result ne Datei hat)

War das Deine Frage?

edit
Hinweis:
Ausgelesener String wird bei optionalen IconIndex mit einem kommata getrennt. Am besten mal in Registry reinschauen damit Du verstehst was ich meine.
Gruß vom KodeZwerg

Geändert von KodeZwerg (23. Aug 2018 um 22:21 Uhr)
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: Windows - benutzerdefinierte Symbole zu Dateitypen

  Alt 23. Aug 2018, 22:12
Also um es verständlicher zu machen.
Ich lade für mein Programm erst mal die Standard-Symbole. Später werden benutzerdefinierte Symbole nachgeladen. Dies kostet Zeit und die Zeit will ich noch verkürzen. Wenn es dann z.B. zu ".dll" Dateien wirklich keine unterschiedlichen Symbole gibt, brauch ich auch nicht die Lade-Routine starten. Ein Standard-Symbol habe ich ja schon. Die Lade-Routine würde mir ja dann genau das gleiche liefern. Das wäre doppeltes laden und nutzlos. So würde ich dann auch mit anderen Dateitypen umgehen. Nur brauch ich es andersrum, sprich keine Prüfung von den Dateiendungen die nur ein Standard-Symbol haben (da müsste ich ja alle möglichen Dateiendungen prüfen), sondern das prüfen der Dateiendungen die benutzerdefinierte Symbole haben können. Somit könnte man alle anderen ausschließen und die Lade-Routine für Symbolnachladungen erst gar nicht starten.

In die Registry schaue ich morgen mal rein. Evtl. kann man sich durch Daten eine Prüfungsroutine zusammenstricken. Man braucht halt am Ende die Info für welche Dateiendung man nachladen muss.

".exe" ist klar. ".msc", ".lnk", ".url" ebenfalls. Das wäre dann jetzt eine optische Prüfung und eine technische will ich mir dann irgendwie zusammenbauen.

Schönes Wochenende schon mal

Michael
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#4

AW: Windows - benutzerdefinierte Symbole zu Dateitypen

  Alt 23. Aug 2018, 23:34
Im Windows Eigenschaftsfenster findet sich hier keine "Symbol ändern" Schaltfläche an. War das schon immer so in jeder Windows-Version?
Ja und nein. Die Registerkarte "Anpassen" hat Win7 in Bezug auf Datei(typ)en noch nicht, bei Verzeichnissen gibt's das schon seit XP. Dennoch konnte man bis einschließlich XP die Symbole von Dateitypen ändern, nämlich via Systemsteuerung > Ordneroptionen > Dateitypen. Mit Vista (oder Win7) fiel diese Möglichkeit weg, weswegen es nach und nach eine Reihe von Tools gab, die diese Optionen nachbildeten.

Nicht verknüpfte Dateitypen haben generell ein generisches Symbol, meist ein weißes Blatt Papier oder sowas in der Richtung.

Üblicherweise fragt man das System, welches Symbol ein bestimmter Dateityp hat, z.B. mit MSDN-Library durchsuchenSHGetFileInfo oder MSDN-Library durchsuchenExtractAssociatedIcon.

Grüße
Dalai
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: Windows - benutzerdefinierte Symbole zu Dateitypen

  Alt 24. Aug 2018, 05:33
Es ist wohl nicht so richtig deutlich was ich meine.

Meine Lade-Routine besteht aus SHGetFileInfo.
Bei Programmstart nutze ich hier "SHGFI_USEFILEATTRIBUTES", um ein Standard-Symbol zu einem Dateityp zu bekommen. Später werden dann speziellen Icons nachgeladen. Also Symbole aus ".exe" Dateien oder aber auch spezielle Ordner-Symbole. Wenn man nun SHGetFileInfo auf ein Verzeichnis mit tausenden Dateien einsetzt, dauert es natürlich etwas länger, als wenn man nur 3 Dateien über SHGetFIleInfo jagt. Deswegen meine Frage bezüglich den "benutzerdefinierten Icons". Die sind wohl nicht bei allen Dateitypen einstellbar. Also...

"datei1.dll" Symbol A
"datei2.dll" Symbol B

scheint nicht zu gehen, sondern es gibt nur ein normales zugeordnetes Symbol für alle DLL-Dateien. Wenn das so ist, braucht man auch nicht mit SHGetFileInfo ein spezielles Icon suchen. Diese Zeit könnte man einsparen und sich nur auf das zugeordnete Icon konzentrieren. So könnte man dann für andere Dateitypen (Dateiendungen) auch verfahren. Deswegen müsste man wissen, bei welchen Dateiendungen man versuchen sollte, spezielle Icons zu laden. Bei den anderen nutzt man dann einfach das hinterlegte Standard-Symbol eines Dateityps.

Michael
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Windows - benutzerdefinierte Symbole zu Dateitypen

  Alt 24. Aug 2018, 06:43
Wie KodeZwerg schon sagte, könntest du vorab in der Registry checken, ob eine eine Endung ein specifisches Symbol hat oder nicht.

Sollte eines hinterlegt sein ->Das nehmen
Ansonsten -> eigenes rein.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Windows - benutzerdefinierte Symbole zu Dateitypen

  Alt 24. Aug 2018, 10:07
Eine Möglichkeit wäre noch, mit meiner Registry Methodik von oben, den Dateinamen zu checken. ImgRes.dll und so etwas enthalten Standard-Icons, blätter einfach mal die Registry ein wenig durch um die Liste der Standards zu erweitern. Ich kenne leider nicht alle aus dem Kopf heraus, aber das wäre noch eine Möglichkeit.

Oder micro-Vorab-Test mit dem Verzeichnis Namen, wenn sich Datei nicht in \Windows\ (oder +sub) befindet kann man eigentlich zu 100% von einem UserIcon ausgehen.


PS:
Wenn Du über PIDLs das ganze verwirklichst, ist Geschwindigkeit so schnell wie Windows selbst. (ShellApi)
Gruß vom KodeZwerg

Geändert von KodeZwerg (24. Aug 2018 um 10:16 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#8

AW: Windows - benutzerdefinierte Symbole zu Dateitypen

  Alt 24. Aug 2018, 13:40
Also (unwissenschaftich und eher umgangssprachlich ohne Anspruch auf abolute Korrektheit ... formuliert):

Du hast eine Datei.
Nimmst deren Endung.
Schaust nach, ob in der Registry ein Symbol vorgegeben ist.
Wenn ja, merkst Du Dir für diese Endung das Symbol und musst bei nachfolgenden Dateien mit der Endung nicht mehr prüfen.

Findest Du in der Registry nix zu der Dateieindung, dann schaust Du in der Datei nach, ob sie ein Icon enthält. Wenn ja, nimmst Du das.

Jetzt musst Du nur noch herausfinden, welche Dateiendungen überhaupt zu Dateien gehören, die Icons enthalten könnten.

Da wären z. B. die Dateiendung .exe.

.lnk dürfte auf die verlinkte Datei und deren Symbol verweisen.

Bei .msc steht bei DefaultIcon z. B. %1.
Heißt, soweit ich weiß: Willst Du das Icon wissen, dann schaue bitte gefälligst in der Datei nach.

Beim Lesen von Verzeichnisstrukturen und dem Ermitteln von Icons zu Dateiendungen, musst Du halt pro Dateiendung einmal nachschauen. Steht in der Registry ein Hinweis auf das zu verwendende Icon, dann nimm es und merke es Dir. Für diese Dateiendung musst Du dann nichtmehr nachschauen.

Manchmal findet man auch bei DefaultIcon sowas: dxmasf.dll,-502
Dann muss man in die dort angegeben Datei schauen und da das Icon -502 (oder welche Zahl da auch stehen mag) auslesen.

Suchmaschinenergebnis(se):
https://msdn.microsoft.com/de-de/library/cc431255.aspx
https://entwickler-forum.de/showthre...nern-ermitteln
https://swissdelphicenter.ch/de/printcode.php?id=218
https://www.delphipraxis.net/195173-...ermitteln.html
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
296 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#9

AW: Windows - benutzerdefinierte Symbole zu Dateitypen

  Alt 24. Aug 2018, 19:40
Danke für die reichlichen Infos
Hab mich inzwischen auch in der Registry umgeschaut. Kannte auch schon "DefaultIcon". Nutze dies auch bei anderen Dingen.

Technisch gesehen wär's möglich aber nicht der beste Weg. Hier und da müsste man ja dann auch weitere Schlüssel folgen, da nicht immer DefaultIcon vorhanden ist wo man es erwartet (steht auch in einem Link so). Da man das ganze sowieso zwischenspeichern würde, um nicht ständig aus der Registry neu zu lesen, mache ich jetzt gleich eine User-Einstellung daraus. Der Benutzer kann dann entscheiden, welche Dateiendungen spezielle Icon-Lade-Routinen zugewiesen werden. Also hier als Beispiel dann ".exe", ".msc", ".lnk", ".url". Da muss ich dann mal schauen, welche Dateiendungen noch zutreffen könnten. Alle anderen Dateiendungen bekommen das besagte verknüpfte Standard-Symbol... also hier einfach "SHGFI_USEFILEATTRIBUTES" für SHGetFileInfo.

Wünsch euch viel Spaß am Wochenende mit neuen kreativen Bits und Bytes

Michael
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:40 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