2010-03-29 33 views
11

के आइकन को प्रोग्रामेटिक रूप से बदलें I WeatherBar नामक एक एप्लिकेशन विकसित कर रहा हूं। इसकी मुख्य कार्यक्षमता विंडोज 7 टास्कबार के साथ इसकी बातचीत पर आधारित है - यह किसी विशिष्ट स्थान पर मौसम की स्थिति के आधार पर आइकन बदलती है।निष्पादन योग्य

मैं जिन अनुप्रयोगों का उपयोग कर रहा हूं, वे सभी संकलित मूल संसाधन फ़ाइल (.res) में संग्रहीत हैं - मैं केवल आइकन के लिए एम्बेडेड संसाधन मैनिफेस्ट के बजाय इसका उपयोग कर रहा हूं। डिफ़ॉल्ट रूप से, मैं मुख्य रूप से आइकन बदलने के लिए मुख्य रूप की आइकन प्रॉपर्टी को संशोधित करता हूं और यह ठीक काम करता है, जब तक कि आइकन टास्कबार पर पिन नहीं किया जाता है। जब यह पिन हो जाता है, तो टास्कबार में आइकन स्वचालित रूप से निष्पादन योग्य (संसाधन फ़ाइल में अनुक्रमणिका 0 के साथ) के लिए डिफ़ॉल्ट पर स्विच करता है।

थोड़ा सा शोध करने के बाद, मुझे लगा कि आइकन बदलने का एक तरीका शॉर्टकट आइकन बदल रहा होगा (क्योंकि सभी पिन किए गए एप्लिकेशन वास्तव में उपयोगकर्ता फ़ोल्डर में संग्रहीत शॉर्टकट हैं)। लेकिन यह काम नहीं किया।

मुझे लगता है कि मुझे निष्पादन योग्य के लिए आइकन बदलने की जरूरत है, और इसलिए UpdateResource का उपयोग करें, लेकिन मुझे इस बारे में पूरी तरह से यकीन नहीं है। मेरा निष्पादन योग्य डिजिटल हस्ताक्षरित नहीं है, इसलिए इसे संशोधित करने में कोई समस्या नहीं होनी चाहिए।

इस मुद्दे को हल करने का तरीका क्या होगा?

+1

http://stackoverflow.com/questions/969033/change-pinned-taskbar-icon-windows-7 – Vivek

+1

@ विवेक समस्या की सहायता नहीं करता है और समाधान नहीं है। –

+3

आप UpdateResource का उपयोग नहीं कर सकते हैं, .exe फ़ाइल लॉक है। विवेक का लिंक जितना अच्छा होगा उतना अच्छा होगा। विंडो एपीआई कोड पैक में एक अच्छा रैपर है: http://code.msdn.microsoft.com/WindowsAPICodePack –

उत्तर

3

यदि आप इसे प्रोग्रामिक रूप से करना चाहते हैं, तो मैं Portable Executable file format (Wikipedia entry) देखकर शुरू करूंगा। संसाधन अनुभाग (.rsrc, अनुभाग 6.9 देखें) आइकन होना चाहिए। इस जानकारी का उपयोग करके, आप आइकन को संशोधित करने के लिए एक टूल लिख सकते हैं।

यदि आप बस किसी मौजूदा फ़ाइल में आइकन बदलना चाहते हैं, तो आप इसे विजुअल स्टूडियो संसाधन संपादक में हैक कर सकते हैं। मैंने पुराने आइकन को हटाकर और एक नया जोड़कर फ़ाइल के साथ इसका परीक्षण किया। एक्सप्लोरर एक्सप्लोरर में नए आइकन पर बदल गया है, और जब मैं इसे वहां खींचता हूं तो नया आइकन स्टार्ट मेनू पर दिखाई देता है।

- संपादित करें -

हाँ, मैं मानता हूँ कि UpdateResource का उपयोग कर एक अच्छा तरीका है। Here is an example मुझे ऐसा करने के लिए सी ++ फ़ंक्शंस का उपयोग करने के लिए मिला, और UpdateResource और FindResource के लिए एक पी/आमंत्रण हस्ताक्षर।

+0

दिलचस्प दृष्टिकोण। यद्यपि कोई समस्या है - संसाधन संपादक एक अच्छा टूल है और मैंने इसे थोड़ी देर के लिए उपयोग किया, लेकिन मुझे सीधे कोड में आइकन बदलने की जरूरत है। अंत उपयोगकर्ता हर मिनट आइकन बदलने के लिए संसाधन संपादक का उपयोग करने में सक्षम नहीं होगा। –

0
private void button1_Click(object sender, EventArgs e) 
    { 
     String path = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); 
     String name = "test"; 
     Shell32.Shell shl = new Shell32.ShellClass(); 
     // Optional code to create the shortcut 
     System.IO.StreamWriter sw = new System.IO.StreamWriter(path + @"\" + name + ".lnk", false); 
     sw.Close(); 
     // End optional code 
     Shell32.Folder dir = shl.NameSpace(path); 
     Shell32.FolderItem itm = dir.Items().Item(name + ".lnk"); 
     Shell32.ShellLinkObject lnk = (Shell32.ShellLinkObject)itm.GetLink; 
     // Optional code to create the shortcut 
     lnk.Path = Environment.GetFolderPath(Environment.SpecialFolder.System) 
+ @"\notepad.exe"; 
     lnk.Description = "nobugz was here"; 
     lnk.Arguments = @"c:\sample.txt"; 
     lnk.WorkingDirectory = @"c:\"; 
     // End optional code 
     lnk.SetIconLocation(Environment.GetFolderPath(Environment.SpecialFolder.System) 
+ "cmd.exe", 1); 
     lnk.Save(null); 
    } 

इस से http://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/9e23a82c-8bed-4b96-8b9a-4c2b6136a622/

यह मदद मिल सकती है लिया गया था।

+1

परिचित लग रहा है। यह समाधान नहीं है। –

+1

जैसा कि नोबगज़ ने उल्लेख किया है, यह समाधान नहीं है। मुझे शॉर्टकट की बजाय वास्तविक निष्पादन योग्य में आइकन बदलने की आवश्यकता है। –

0

मैंने एक वर्कअराउंड लागू करने का निर्णय लिया - आइकन विंडो के लिए थंबनेल में बदल जाएगा (यह विंडोज 7 में संभव है)। यदि आइकन अनपिन किया गया है, तो उपयोगकर्ता आइकन बदल रहा है। यदि यह पिन किया गया है, तो थंबनेल वर्तमान मौसम की स्थिति के अनुसार बदल जाएगा।

मुझे लगता है कि पिन किए गए आइकन की संरचना (वास्तव में एक शॉर्टकट होने के कारण) गतिशील आइकन परिवर्तन की अनुमति नहीं देता है। अगर मैं गलत हूं, तो मैं इस पर टिप्पणियों और विचारों के लिए खुला हूं।

संबंधित मुद्दे