2009-08-18 9 views
62

यदि आपने विंडोज 7 बीटा में देखा है, तो यदि आप फाइल या अन्य सिस्टम क्रियाओं की प्रतिलिपि बनाते हैं, तो टास्कबार में विंडोज एक्सप्लोरर आइकन फॉर्म पर प्रगति पट्टी के बराबर हरे रंग की प्रगति पट्टी भर जाएगा। क्या कोई तरीका है कि, मेरे सी # रूपों में, मैं अपने टास्कबार प्रगति पट्टी को जो कुछ भी कर रहा हूं उसकी प्रगति से मेल खाने के लिए मजबूर कर सकता हूं? कनवर्ट करना, स्थानांतरित करना, उत्पन्न करना, उस प्रगति पट्टी के लिए बहुत सारे उपयोग हैं।सी # में टास्कबार में विंडोज 7 प्रगति पट्टी?

उत्तर

39
+2

यहां तक ​​कि यह बहुत ही विषय पर एक अच्छा वीडियो भी शामिल है

समाधान एक वर्ग ITaskbarList3 इंटरफ़ेस का उपयोग करता है था। – Larsenal

+1

.NET 3.5 या 4 की आवश्यकता है .NET 2. –

+0

3.5 के लिए लागू नहीं है http://en.wikipedia.org/wiki/.NET_Framework – jocull

5

हाँ, माइक्रोसॉफ्ट निम्नलिखित दस्तावेज़ में नए कार्य पट्टी फ़ंक्शन शामिल थे (स्रोतों शामिल है): Windows 7 taskbar: Developer Resources

44

लोग हैं, जो प्रलेखन पढ़ने छोड़ सकते हैं और कुछ है कि काम करता है बस प्राप्त करना चाहते हैं के लिए ...

  • Windows API Code Pack for Microsoft .Net Framework डाउनलोड करें।
  • संस्थापक जो एक ज़िप फ़ाइल
  • ज़िप फ़ाइल की बाइनरी फ़ोल्डर से निम्नलिखित DLLs निकालें बनाता चलाएँ:
    • Microsoft.WindowsAPICodePack.dll
    • Microsoft.WindowsAPICodePack.Shell.dll
  • में उन्हें कोई संदर्भ जोड़ें अपने प्रोजेक्ट
  • निम्नलिखित कोड को अपने ऐप में रखें और आवश्यकतानुसार संशोधित करें:

-

int max = 100; 
    var prog = Microsoft.WindowsAPICodePack.Taskbar.TaskbarManager.Instance; 
    prog.SetProgressState(Microsoft.WindowsAPICodePack.Taskbar.TaskbarProgressBarState.Normal); 
    for(int i=0;i<max;i++) { 
    prog.SetProgressValue(i, max); 
    Thread.Sleep(100);  
    } 
    prog.SetProgressState(Microsoft.WindowsAPICodePack.Taskbar.TaskbarProgressBarState.NoProgress); 
+0

nuget डाउनलोड थोड़ा परेशान है, लेकिन हाँ, महान काम करता है। मेरी प्रगति पट्टी हैंडलर कक्षा में कार्यान्वित :) – Nyerguds

0

मैं एक सुंदर लेख (Link) कि टास्कबार प्रगति बार समस्या के लिए एक सरल समाधान प्रदान करता है पाया।

Imports Microsoft.WindowsAPICodePack 
Imports Microsoft.WindowsAPICodePack.Taskbar 
// ... 
TaskbarManager.Instance.SetProgressValue(X, 100) 

जहां एक्स: सारांश में, यह Windows API पैक from the MSDN website डाउनलोड करने के लिए, Microsoft.WindowsAPICodePack.Shell.dll जिसमें वह शामिल है के लिए एक संदर्भ जोड़ने, और अंत में अपने एप्लिकेशन में कोड की तीन लाइनों को जोड़ने का निर्देश वह प्रगति है जिसे आप प्रदर्शित करना चाहते हैं।

+2

ध्यान दें कि [लिंक-केवल उत्तर निराश हैं] (http://meta.stackoverflow.com/tags/link-only-answers/info), SO उत्तर अंत बिंदु होना चाहिए एक समाधान की तलाश में (बनाम अभी तक संदर्भों का एक और स्टॉपओवर, जो समय के साथ पुराना हो जाता है)। लिंक को संदर्भ के रूप में रखते हुए, यहां स्टैंड-अलोन सारांश जोड़ना पर विचार करें। – kleopatra

58

मैं बस अपने WinForms एप्लिकेशन, पर कोड पैक डाउनलोड करने या TaskbarItemInfo का उपयोग करने के लिए WPF पर स्विच किए बिना कुछ टास्कबार प्रगति एनीमेशन जोड़ना चाहता था।

using System; 
using System.Runtime.InteropServices; 

public static class TaskbarProgress 
{ 
    public enum TaskbarStates 
    { 
     NoProgress = 0, 
     Indeterminate = 0x1, 
     Normal  = 0x2, 
     Error   = 0x4, 
     Paused  = 0x8 
    } 

    [ComImport()] 
    [Guid("ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf")] 
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
    private interface ITaskbarList3 
    { 
     // ITaskbarList 
     [PreserveSig] 
     void HrInit(); 
     [PreserveSig] 
     void AddTab(IntPtr hwnd); 
     [PreserveSig] 
     void DeleteTab(IntPtr hwnd); 
     [PreserveSig] 
     void ActivateTab(IntPtr hwnd); 
     [PreserveSig] 
     void SetActiveAlt(IntPtr hwnd); 

     // ITaskbarList2 
     [PreserveSig] 
     void MarkFullscreenWindow(IntPtr hwnd, [MarshalAs(UnmanagedType.Bool)] bool fFullscreen); 

     // ITaskbarList3 
     [PreserveSig] 
     void SetProgressValue(IntPtr hwnd, UInt64 ullCompleted, UInt64 ullTotal); 
     [PreserveSig] 
     void SetProgressState(IntPtr hwnd, TaskbarStates state); 
    } 

    [ComImport()]  
    [Guid("56fdf344-fd6d-11d0-958a-006097c9a090")] 
    [ClassInterface(ClassInterfaceType.None)] 
    private class TaskbarInstance 
    { 
    } 

    private static ITaskbarList3 taskbarInstance = (ITaskbarList3)new TaskbarInstance(); 
    private static bool taskbarSupported = Environment.OSVersion.Version >= new Version(6, 1); 

    public static void SetState(IntPtr windowHandle, TaskbarStates taskbarState) 
    { 
     if (taskbarSupported) taskbarInstance.SetProgressState(windowHandle, taskbarState); 
    } 

    public static void SetValue(IntPtr windowHandle, double progressValue, double progressMax) 
    { 
     if (taskbarSupported) taskbarInstance.SetProgressValue(windowHandle, (ulong)progressValue, (ulong)progressMax); 
    } 
} 

कितना आसान है उपयोग करने के लिए है का उदाहरण::

TaskbarProgress.SetState(this.Handle, TaskbarProgress.TaskbarStates.Indeterminate); 

or 

TaskbarProgress.SetValue(this.Handle, 50, 100); 
TaskbarProgress.SetState(this.Handle, TaskbarProgress.TaskbarStates.Error); 
+3

यह एक अद्भुत शानदार जवाब है; कोई बाहरी निर्भरता या डाउनलोड नहीं है, और केवल – Ben

+1

काम करता है यदि आप SetOverlayIcon जोड़ना चाहते हैं, जैसा मैंने किया था, तो सही ऑर्डर * में सभी अतिरिक्त विधियों * को जोड़ना सुनिश्चित करें। Http://stackoverflow.com/questions/1024786/windows-7-taskbar-setoverlayicon-from-wpf-app-doesnt-work –

+0

दुर्भाग्य से, यह Windows XP पर चलते समय एप्लिकेशन को तोड़ देता है! कोई भी समाधान? –

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