[winapi] Hoe icoontje krijgen voor file operations?

Pagina: 1
Acties:

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Topicstarter
Ik ben bezig met een prog dat file operations kan uitvoeren, maar *zonder* SHFileOperation. Gewoon, omdat dat ding bugt. Waar ik nu ff op stuit, is hoe ik aan de icoontjes kom voor bijvoorbeeld de vraag of je bestanden echt wel wilt verwijderen... Je krijgt dan in windows het icoontje van de prullenbak of van een afbrokkelend bestandje.

LoadIcon en aanverwante functies heb ik al bekeken, maar bieden helaas geen uitkomst. Ook heb ik al gedacht om gewoon shell32.dll te openen, maar then again, het kan in win95 weer cool.dll zijn en de index van de benodigde icoontjes zou weleens anders kunnen zijn.

Is er een API call of dit soort icoontjes te halen? Of is er een andere truuk om een hIcon van zo'n ding op te trommelen?

日本!🎌


Verwijderd

Delphi heeft een TAnimate object. Als je bij de eigenschap CommonAvi bijvoorbeeld aviEmptyRecycle kiest krijg je dat filmpje te zien van als je prullenbak leegmaakt. Zo zijn er ook die filmpjes voor kopieren, verplaatsen en zoeken (zaklamp) beschikbaar.
Als je dan nog Active op True zet speelt ie ze

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Topicstarter
Die bedoel ik niet, ik bedoel het icoontje dat in de messagebox staat die vraagt of je de geselecteerde bestanden wilt verwijderen, vóórdat dat progress-ding verschijnt.

日本!🎌


  • Falskdansker
  • Registratie: Juni 2003
  • Niet online
bij Microsoft Visual Basic (6.0) doe je dit door achter de messagebox zoiets aan te geven, bijvoorbeeld 'msgbox "test", vbcritical' voor zo'n rondje met daarin een kruis

Steam


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Topicstarter
Dat weet ik, en dat zijn de standaard icoontjes, daar zijn er vier van. En ik weet ook dat je aan een messagebox custom icoontjes kan meegeven, maar mijn probleem is het vinden van de icoontjes, niet het weergeven.

日本!🎌


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04:06

.oisyn

Moderator Devschuur®

Demotivational Speaker

johannesmvp2: dat zijn gewoon een aantal vaste icoontjes, en die animeren verder niet

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Gebruik een Resource Explorer om ze uit de DLL te halen waarin ze zich bevinden.
Bv deze http://www.wilsonc.demon.co.uk/d7resourceexplorer.htm
Ze zitten in deze DLL in windows\system32\ --> Shell32.DLL
Je vindt er de meeste icoontjes die windows explorer gebruikt
succes!

[ Voor 14% gewijzigd door Verwijderd op 08-09-2003 17:13 ]


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 00:12

Tomatoman

Fulltime prutser

Die roep je op met LoadIcon. Zie de Windows API voor een lijstje met toelaatbare constanten.
Delphi:
1
Image1.Picture.Bitmap.Handle := LoadIcon(0, IDI_QUESTION);

Een goede grap mag vrienden kosten.


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Topicstarter
Ja dat heb ik dus inmiddels gedaan, probleem is dus dat het icoontje voor permanent verwijderen bij verschillende windowzen op een verschillende index staat in de shell32.dll. Maargoed, voor de geinteresseerden:

Prullenbak:
• Altijd index 31 en 32 (leeg en vol).

Permanent verwijderen:
• Windows 95A/B, NT4: 65
• Windows 98/SE: 71
• Windows Me: 74
• Windows 2000/XP/2003: 77

Het is niet de netste manier, maar als niemand een wel nette manier weet, dan ik ook niet ;)

日本!🎌


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04:06

.oisyn

Moderator Devschuur®

Demotivational Speaker

Hebben die resources niet ook gewoon een naam waarmee je ze eruit kan halen?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Topicstarter
in ieder geval geen IDI_xxxx, maar als iemand een naam weet, dan houdt ik me aanbevolen

日本!🎌


Verwijderd

En als je die iconen die jij hebt nu eens bewaarde in een TImageList ? En die iconen oproept wanneer je ze nodig hebt ? Zo zou ik het gedaan hebben

Verwijderd

Verwijderd schreef op 08 September 2003 @ 19:11:
En als je die iconen die jij hebt nu eens bewaarde in een TImageList ? En die iconen oproept wanneer je ze nodig hebt ? Zo zou ik het gedaan hebben
Tja, officieel heb je die plaatjes dan geript en das eigenlijk illegaal. De kans dat ze erover gaan zeuren is klein, een hoop andere proggies gebruiken dat ook, maar toch.

Als je gewoon runtime ernaar linkt, naar de al aangewezen plaatjes, zo hoort het eigenlijk.

En het komt dan ook niet echt overen met je (windows) versie. Alhoewel je dat met wat moeite wel voor elkaar kunt krijgen.

[ Voor 11% gewijzigd door Verwijderd op 08-09-2003 19:39 ]


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Topicstarter
Spooky, jij weet het :)

Maar nu nog steeds een klein probleempje... de prullenbak hoeft niet per se het "prullenbak"-icoontje te hebben. Het kan zelfs uit een andere DLL komen. Als ik me niet vergis kan je dat instellen vanaf windows 98 (met themes).

De "officiële" iconIndex en DLL naam moet dus ergens vandaan te halen zijn, en als iemand weet waar dat dan staat... graag :P

日本!🎌


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 00:12

Tomatoman

Fulltime prutser

Zoek je register eens door op de term 'bitbucket'.

Een goede grap mag vrienden kosten.


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Topicstarter
been there, done that...

Daarin staat alleen maar wat in de "eigenschappen" van je prullenbak staat, dus niet het icoontje. Of had jij ergens anders iets gevonden?

日本!🎌


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

_Thanatos_ schreef op 08 September 2003 @ 18:01:
Ja dat heb ik dus inmiddels gedaan, probleem is dus dat het icoontje voor permanent verwijderen bij verschillende windowzen op een verschillende index staat in de shell32.dll. Maargoed, voor de geinteresseerden:

Prullenbak:
• Altijd index 31 en 32 (leeg en vol).

Permanent verwijderen:
• Windows 95A/B, NT4: 65
• Windows 98/SE: 71
• Windows Me: 74
• Windows 2000/XP/2003: 77

Het is niet de netste manier, maar als niemand een wel nette manier weet, dan ik ook niet ;)
Ik kon me echt niet voorstellen dat hier geen nettere methode was, maar na een uur of zo Googlen kan ik niet anders dan concluderen dat er geen gerichtere manier is om ze te scoren...

Beste tip die ik heb gevonden is botweg Shell32.dll icons via Visual Studio in je eigen resources te dumpen en ze daarvandaan te gebruiken.... 8)7

Professionele website nodig?


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Trouwens: OS-versie checken is ook allesbehalve een 'safe assumption', gezien dat niemand garandeert dat je Shell32.dll gelijk blijft tussen (vooral) IE-upgrades en service packs e.d. Je zult expliciet de versie van de DLL moeten opvragen.

Professionele website nodig?


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 00:12

Tomatoman

Fulltime prutser

Dan doe je dat toch gewoon? Pas wel op, want de functie DLLGetVersion is in shell32.dll (en andere dll's) pas aanwezig vanaf versie 4.71. Zie 'Shell and Common Controls Versions' in de Platform SDK voor meer informatie.

Bij mijn staat de vuilnisbak trouwens in
HKEY_CLASSES_ROOT\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\DefaultIcon
Daar vind je de waarden Empty en Full, waar dll-naam en de index van de icon binnen de dll staan.

In HKEY_CLASSES_ROOT\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\
kun je de prullenmand een andere naam geven (bij mij heet 'ie Kliko). Hernoemen, desktop refreshen, klaar.

Een goede grap mag vrienden kosten.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04:06

.oisyn

Moderator Devschuur®

Demotivational Speaker

curry684 schreef op 09 September 2003 @ 10:16:
Trouwens: OS-versie checken is ook allesbehalve een 'safe assumption', gezien dat niemand garandeert dat je Shell32.dll gelijk blijft tussen (vooral) IE-upgrades en service packs e.d. Je zult expliciet de versie van de DLL moeten opvragen.
ik kan me eerlijk gezegd niet voorstellen dat elk MS programma dat gebruik maakt van die icons een hele tabel heeft met versienummer en de bijbehorende icon index

Het lijkt me dus nogal onwaarschijnlijk dat er niet een manier is om aan de juiste index, of gewoon aan het juiste icoontje, te komen. Staan dit soort dingen niet toevallig in de registry?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 00:12

Tomatoman

Fulltime prutser

Die CLSID is trouwens CLSID_RecycleBin, die in ShlGuid.h is gedefinieerd als {645FF040-5081-101B-9F08-00AA002F954E}. In die header file vind je nog een heleboel andere CLSID's zoals CLSID_MyComputer en CLSID_Printers, zodat je nu weet hoe je alle standaardicons van Windows in je register kunt opzoeken. Case dismissed :).

Een goede grap mag vrienden kosten.


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Topicstarter
Right on! Nu heb ik de prullenbak alvast. Nu het permanent-verwijderen-icoontje nog, want die kan ik in het register dus niet vinden... en in ShlGuid.h staat ie ook niet.

[ Voor 12% gewijzigd door _Thanatos_ op 09-09-2003 13:12 ]

日本!🎌

Pagina: 1