Toon posts:

[Win32] IShellLink geeft geen icon *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik maak zelf met de hand een nieuwe snelkoppeling aan. Wanneer ik met een programma vervolgens een instantie maak van IShellLink van dit object, geeft de GetIconLocation() methode een leeg pad en 0 index terug terwijl de methode wel een successvol hresult oplevert.

Wanneer ik echter eerst na het maken van de snelkoppeling, overnieuw hetzelfde(!) icoon selecteer, geeft GetItemLocation() wel het juiste pad en index en vervolgens ook altijd, ook na herstarten computer.

Ik heb geen idee waar dit verschil vandaan komt. De andere methoden van IShellLink werken meteen wel goed (zoals het opvragen van de werkdirectory). Misschien dat er een verschil wordt veroorzaakt door de manier waarop ik een instantie van IShell Link aanmaak. In een voorbeeld heb ik gezien dat dit gebeurde door in een leeg object de informatie via een persist folder te laden. Ik doe het iets anders: ik gebruik de GetUIObjectOf methode van IShellFolder. Wel is ergens te lezen dat deze indirect persist folder gebruikt dus dat zou eigenlijk hetzelfde moeten zijn?

Heeft iemand enig idee waarom GetItemLocation() niet faalt maar wel een leeg resultaat geeft?

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

curry684

left part of the evil twins

Interessante materie, ik heb hier wel over gelezen maar nog niet in de praktijk mee gespeeld... ik ben bang dat ik voorlopig geen tijd heb anders ga ik wel even meespelen :)

Professionele website nodig?


  • Pooh
  • Registratie: April 2001
  • Niet online

Pooh

Lees eens een boek

Moet er niet eerst een SHChangeNotify(...) worden aangeroepen?

Check dit draadje: google groups
The shell cached het icon, en blijkbaar wordt 't niet zomaar geupdate...

Verwijderd

Topicstarter
Moet er niet eerst een SHChangeNotify(...) worden aangeroepen?
Check dit draadje
Het icoontje maak ik niet via het programma aan, maar als mens. Met het programma probeer ik de gegevens van het icoontje op te vragen. Bovendien wordt het programma pas gestart nadat het icoontje aangemaakt is. Ofwel, zo'n ShChangeNotify hoeft mijn programma niet te doen... ik zou het natuurlijk wel kunnen proberen...
Interessante materie, ik heb hier wel over gelezen maar nog niet in de praktijk mee gespeeld...
Ik ben er ook maar een beetje mee aan het spelen, dwz. ik weet er eigenlijk niets van af dan wat geblader in de shell api. Op zich is dat hele shell gebeuren niet erg moeilijk, maar je moet wel eerst door al die interfacejes heenwerken.

offtopic:
Weet iemand of er toevallig een .net abstractielaag is voor delen van de shell api?

PS: Sorry voor het vergeten van de Win32 prefix in de topic titel. Note to self: niet meer vijf minuten voor een werkcollege een topic intikken... zelfs niet als je dit al een week van plan bent.

[ Voor 19% gewijzigd door Verwijderd op 02-10-2003 13:50 ]


  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 10-08 15:15
Ik heb zojuist geprobeerd om te kijken of ik wel het icon path krijg wanneer ik vooraf ShChangeNotify op het object aanroep. Daarnaast heb ik geprobeerd om niet via GetUIObject een instantie van IShellLink te maken, maar een lege instantie aan te maken en via een IPersistFile te vullen.

Zoals ik al verwacht had heeft dit niets uitgemaakt. Het laatste geval heeft precies hetzelfde resultaat als via GetUIObject. Ik heb zelfs even geprobeerd op de snelkoppeling te loaden, te saven en vervolgens nogmaals te loaden, maar helaas.

Toch heb ik wel een oplossing gevonden om bij de icon gegevens te komen: d.m.v. GetUIObject kan ik een instantie van IExtractIcon aanmaken. Deze geeft mij wel netjes het pad naar het icon. De overige gegevens kan ik wel via IShellLink ophalen, dus mijn probleem is opgelost.

Toch vraag ik me wel af waarom de oorspronkelijke aanpak niet werkt. Wat is het verschil? En waarom dan wel een sucessvol hresult?

[ Voor 3% gewijzigd door Infinitive op 04-10-2003 01:41 . Reden: aanvulling ]

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]