2011-03-12 12 views
18

Ho un'icona nel mio file di risorse, a cui voglio fare riferimento.Percorso di un file di risorse incorporato

Questo è il codice che ha bisogno di quel percorso di un file di icona:

IWshRuntimeLibrary.IWshShortcut MyShortcut ; 
MyShortcut = (IWshRuntimeLibrary.IWshShortcut)WshShell.CreateShortcut(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + @"\PerfectUpload.lnk"); 
MyShortcut.IconLocation = //path to icons path . Works if set to @"c:/icon.ico" 

Invece di avere un file di icona esterna lo voglio trovare un file di icona incorporato. Qualcosa come

MyShortcut.IconLocation = Path.GetFullPath(global::perfectupload.Properties.Resources.finish_perfect1.ToString()) ; 

è possibile? se é cosi, come ?

Grazie

risposta

4

penso che vi aiuterà in qualche cosa ...

//Get the assembly. 
System.Reflection.Assembly CurrAssembly = System.Reflection.Assembly.LoadFrom(System.Windows.Forms.Application.ExecutablePath); 

//Gets the image from Images Folder. 
System.IO.Stream stream = CurrAssembly.GetManifestResourceStream("ImageURL"); 

if (null != stream) 
{ 
    //Fetch image from stream. 
    MyShortcut.IconLocation = System.Drawing.Image.FromStream(stream); 
} 
+5

Non funzionerà come IWshShortcut.IconLocation è una stringa e Image.FromStream() è un'immagine. Devi scrivere l'Immagine su un file e puntare l'IconLocation su di esso. – imoatama

5

penso che questo dovrebbe funzionare, ma non riesco a ricordare esattamente (non al lavoro a doppio controllo).

MyShortcut.IconLocation = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("YourNamespace.IconFilename.ico"); 
1

La risorsa è incorporata, quindi incapsulata in un assembly DLL. Quindi non puoi ottenere il suo vero percorso, devi cambiare approccio.

Probabilmente vorrai caricare la risorsa in memoria e scriverla in un file temporaneo, quindi collegarla da lì. Una volta che l'icona è cambiata nel file di destinazione, è possibile eliminare il file icona stesso.

1

In WPF ho fatto prima:

Uri TweetyUri = new Uri(@"/Resources/MyIco.ico", UriKind.Relative); 
System.IO.Stream IconStream = Application.GetResourceStream(TweetyUri).Stream; 
NotifyIcon.Icon = new System.Drawing.Icon(IconStream); 
4

Proprio ampliando SharpUrBrain's answer, che non ha funzionato per me, invece di:

if (null != stream) 
{ 
    //Fetch image from stream. 
    MyShortcut.IconLocation = System.Drawing.Image.FromStream(stream); 
} 

Dovrebbe essere qualcosa di simile:

if (null != stream) 
{ 
    string temp = Path.GetTempFileName(); 
    System.Drawing.Image.FromStream(stream).Save(temp); 
    shortcut.IconLocation = temp; 
} 
Problemi correlati