[PL] Windows 7 – nowe cechy z poziomu .NET Framework


Jeśli testujecie Windows 7 i chcielibyście zobaczyć jak w praktyce można zintegrować waszą aplikację z desktopem systemu to polecam poniższą bibliotekę:
http://code.msdn.microsoft.com/WindowsAPICodePack

Windows API Codepack to szereg wrapperów .NETowych pozwalających na odwołanie się do bibliotek natywnych umożliwiających takie rzeczy jak:
* Integracja z Shellem
* Wykorzystanie bibliotek systemowych
* Integracja z paskiem zadań

itd.

Bardzo przyjemna biblioteka dostarczona z szeregiem przykładów.
Przykład poniżej, czyli integracja z paskiem zadań:

Okno aplikacji oraz przypisane zadania i zmieniona ikona aplikacji na pasku:
image image

Jak to się robi z poziomu kodu i z wykorzystaniem tej biblioteki przedstawiam poniżej:

Zmiana na oknie, najpierw wydarzenie pod przyciskiem:

private void pictureIconOverlay2_Click(object sender, EventArgs e)
{
    Taskbar.OverlayImage =
        new OverlayImage(TaskbarDemo.Properties.Resources.Yellow, "Yellow");
}

I faktyczny kod akcesora:

public static OverlayImage OverlayImage
{
    get
    {
        return overlayImage;
    }
    set
    {
        overlayImage = value; 
        if (overlayImage == null || overlayImage.Icon == null)
        {
            TaskbarList.SetOverlayIcon(OwnerHandle, IntPtr.Zero, string.Empty);
        }
        else
        {
            TaskbarList.SetOverlayIcon(OwnerHandle, overlayImage.Icon.Handle, overlayImage.Text);
        }
    }
}

Dalej jest już interfejs COM dla TaskbarList.

Aktualizacja paska postępu zlokalizowanego na ikonie w pasku zadań odbywa się tak:

private void UpdateProgressBar()
{
    Taskbar.ProgressBar.State = 
        (TaskbarButtonProgressState)
               Enum.Parse(typeof(TaskbarButtonProgressState), 
               (string)comboBoxProgressBarStates.SelectedItem);
    Taskbar.ProgressBar.CurrentValue = progressBar1.Value;
}

Idąc dalej już w Taskbar.ProgressBar jest metoda:

private void RefreshValue()
{
    Taskbar.TaskbarList.SetProgressValue(Taskbar.OwnerHandle, (ulong)CurrentValue, (ulong)MaxValue);
}

I znów dalej jest COM, reszta nas nie interesuje.
Jumplisty tworzy się następująco:

private void buttonUserTasksAddTasks_Click(object sender, EventArgs e)
{
    // Don't add additional tasks after tasks have already been added
    if (jumpList.UserTasks.Count > 0)
        return; 
    // Path to Windows system folder
    string systemFolder = Environment.GetFolderPath(Environment.SpecialFolder.System);
    // Add our user tasks
    jumpList.UserTasks.Add(new JumpListLink
    {
        Title = "Open Notepad",
        Path = Path.Combine(systemFolder, "notepad.exe"),
        IconLocation = Path.Combine(systemFolder, "notepad.exe"),
        IconIndex = 0
    });
    jumpList.UserTasks.Add(new JumpListLink
    {
        Title = "Open Paint",
        Path = Path.Combine(systemFolder, "mspaint.exe"),
        IconLocation = Path.Combine(systemFolder, "mspaint.exe"),
        IconIndex = 0
    });
    jumpList.UserTasks.Add(new JumpListSeparator()); 
    jumpList.UserTasks.Add(new JumpListLink
    {
        Title = "Open Calculator",
        Path = Path.Combine(systemFolder, "calc.exe"),
        IconLocation = Path.Combine(systemFolder, "calc.exe"),
        IconIndex = 0
    });
    // Update status
    UpdateStatusBar("Three user tasks added to jump list");
}

Polecam pobrać i przyjrzeć się wszystkim przykładom, z tą biblioteką pisanie aplikacji wykorzystujące dobrodziejstwa Windows 7 za pomocą .NET Framework jest banalnie proste.

Comments (2)

  1. Dziękujemy za publikację – Trackback z dotnetomaniak.pl

  2. @rek says:

    Dzięki Daniel za fajnego linka, (a miałem w weekend jechać nad wodę 😉

Skip to main content