2011-03-12 15 views
18

Mam ikonę w moim pliku zasobów, który chcę odwołać.Ścieżka do osadzonego pliku zasobów

Jest to kod, który musi tę ścieżkę do pliku ikony:

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" 

Zamiast zewnętrznego pliku ikony chcę go znaleźć osadzony plik ikony. Coś takiego jak

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

jest to możliwe? Jeśli tak to jak ?

Dzięki

Odpowiedz

4

myślę, że będzie to pomóc w niektórych co ...

//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

To nie zadziała tak, jak IWshShortcut.IconLocation jest ciągiem znaków, a Image.FromStream() jest obrazem. Musisz napisać obraz do pliku i wskazać w tym miejscu ikonę IconLocation. – imoatama

5

myślę, że to powinno działać, ale nie pamiętam dokładnie (nie w pracy, aby dokładnie sprawdzić).

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

Zasób, który jest osadzony, tak zamknięty w zespole DLL. Więc nie możesz uzyskać swojej prawdziwej ścieżki, musisz zmienić swoje podejście.

Prawdopodobnie chcesz załadować zasób do pamięci i zapisać go w pliku tymczasowym, a następnie połączyć go z tym plikiem. Po zmianie ikony pliku docelowego możesz usunąć sam plik ikony.

1

W WPF I zostało to zrobione wcześniej:

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

Wystarczy poszerzając SharpUrBrain's answer, który nie działa na mnie, zamiast:

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

To powinno być coś takiego:

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