Avatar billede bernhof Nybegynder
04. november 2002 - 18:28 Der er 12 kommentarer og
2 løsninger

Hente Windows Ikoner

Jeg har tidligere set kode, som kunne hente ikonet ud af en bestemt fil .. Men hvad med at hente ikonet ved at specificere filtypen -- altså fx. "doc".. Kan det lade sig gøre? og hvordan?

- Mikkel
Avatar billede kennethrisum Nybegynder
04. november 2002 - 19:41 #1
Avatar billede bernhof Nybegynder
04. november 2002 - 19:55 #2
Jeg kunne godt tænke mig en funktion (API kald eller whatever) som kunne returnere ikonet for en bestemt filtype og ikke fra en exe-fil eller fra andre bestemte filer .. altså så jeg ikke skal bruge noget filnavn/-sti for at hente ikonet, men bare filens extension; som jeg nævnte før, fx. "doc"

Til at forstå?
Avatar billede kennethrisum Nybegynder
04. november 2002 - 20:15 #3
OK. Læste ikke lige spørgsmålet godt nok. Du skal til at rode i registreringsdatabasen. Denne artikel beskriver hvorledes det er bygget op:

http://www.mvps.org/vbnet/index.html?code/reg/regfileassociations.htm

Her kan du så lave et program der ud fra "doc" extension slår op (et par gange) i registreringsdatabasen for at finde ikonet.
Avatar billede sjh Nybegynder
04. november 2002 - 20:16 #4
Prøv:

Const DI_MASK = &H1
Const DI_IMAGE = &H2
Const DI_NORMAL = DI_MASK Or DI_IMAGE

Private Declare Function ExtractAssociatedIcon Lib "shell32.dll" Alias "ExtractAssociatedIconA" (ByVal hInst As Long, ByVal lpIconPath As String, lpiIcon As Long) As Long
Private Declare Function DrawIconEx Lib "user32" (ByVal hdc As Long, ByVal xLeft As Long, ByVal yTop As Long, ByVal hIcon As Long, ByVal cxWidth As Long, ByVal cyWidth As Long, ByVal istepIfAniCur As Long, ByVal hbrFlickerFreeDraw As Long, ByVal diFlags As Long) As Long
Private Declare Function DestroyIcon Lib "user32" (ByVal hIcon As Long) As Long

Private Sub Form_Load()
  'Call LoadIcon(Picture1, "C:\Windows\Winmine.exe") 'File
  Call LoadIcon(Picture1, "C:\Windows\Script.doc")  'Type
  'Call LoadIcon(Picture1, "C:\Windows")            'Mappe
End Sub

Public Sub LoadIcon(pic As Object, strPath As String)
Dim mIcon As Long
  pic.Cls
  pic.AutoRedraw = True
  mIcon = ExtractAssociatedIcon(App.hInstance, strPath, 2)
    DrawIconEx pic.hdc, 5, 5, mIcon, 32, 32, 0, 0, DI_NORMAL
  DestroyIcon mIcon
End Sub
Avatar billede bernhof Nybegynder
04. november 2002 - 20:36 #5
sjh > hvis jeg gerne vil have ikonet til .zip filer, skal jeg så henvise til en zip-fil i LoadIcon proceduren?

kennethrisum > ved at kigge på artiklen og teste koden ser jeg ikke noget kode, som kan hente ikonet fra en bestemt filtype.. Kan du forklare nærmere?
Avatar billede kennethrisum Nybegynder
04. november 2002 - 20:42 #6
Nej det er ikke så meget koden i artiklen, som beskrivelsen.

Eks. for at finde ikonet for en "txt" fil.

Først finder du HKEY_CLASSES_ROOT\.txt her er deafult value: txtfile

Herefter slår du op i: HKEY_CLASSES_ROOT\txtfile\DefaultIcon og finder værdien:

%SystemRoot%\system32\shell32.dll,-152

Med API'et ExtractIcon finder du så ikon nr. 152 i shell32.dll.

Det var denne måde jeg havde tænkt.
Avatar billede sjh Nybegynder
04. november 2002 - 20:43 #7
Ja. Du kan jo også bare lave en tom fil med navn test.zip og henvise til den :-)
Avatar billede sjh Nybegynder
04. november 2002 - 20:46 #8
Open "C:\test.zip" For Binary As #1
Close #1
Avatar billede sjh Nybegynder
04. november 2002 - 20:52 #9
Const DI_MASK = &H1
Const DI_IMAGE = &H2
Const DI_NORMAL = DI_MASK Or DI_IMAGE

Private Declare Function ExtractAssociatedIcon Lib "shell32.dll" Alias "ExtractAssociatedIconA" (ByVal hInst As Long, ByVal lpIconPath As String, lpiIcon As Long) As Long
Private Declare Function DrawIconEx Lib "user32" (ByVal hdc As Long, ByVal xLeft As Long, ByVal yTop As Long, ByVal hIcon As Long, ByVal cxWidth As Long, ByVal cyWidth As Long, ByVal istepIfAniCur As Long, ByVal hbrFlickerFreeDraw As Long, ByVal diFlags As Long) As Long
Private Declare Function DestroyIcon Lib "user32" (ByVal hIcon As Long) As Long

Private Sub Form_Load()
  Call LoadIcon(Picture1, "zip")  'Type
End Sub

Public Sub LoadIcon(pic As Object, strType As String)
Dim mIcon As Long
  pic.Cls
  pic.AutoRedraw = True
  strType = App.Path & "kill." & strType
  Open strType For Binary As #1: Close #1
  mIcon = ExtractAssociatedIcon(App.hInstance, strType, 2)
  Kill strType
    DrawIconEx pic.hdc, 5, 5, mIcon, 32, 32, 0, 0, DI_NORMAL
  DestroyIcon mIcon
End Sub
Avatar billede bernhof Nybegynder
04. november 2002 - 20:54 #10
sjh > Tja, det er vel en nødløsning! ;D

kennethrisum > Ok, jeg vil prøve, om jeg kan få det til at virke, men hvis jeg ikke kan, lægger jeg en kommentar i dette spm!
Avatar billede kennethrisum Nybegynder
04. november 2002 - 20:56 #11
Det er bare i orden.
Avatar billede bernhof Nybegynder
06. november 2002 - 02:54 #12
Hmm.. jeg har besluttet at droppe ideen pga. uoverskueligheden og besværligheden i det .. Men som tak for hjælpen får I alligevel jeres point! :o)

Mvh. Mikkel
Avatar billede sjh Nybegynder
06. november 2002 - 11:45 #13
hvad skulle dit program kunne siden det er besværlige.
Avatar billede bernhof Nybegynder
10. november 2002 - 14:19 #14
vise en liste over filer på en FTP, og benytte ikonerne, som var tildelt filerne på din egen computer (undtagen exe filer).
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester