Ответ 1
В журнале MSDN есть хорошая статья о о новых API-интерфейсах панели задач. И да, функция потрясающая: -)
По сути, это все о внедрении IFileOperation
. Там хорошая статья об использовании его в управляемом коде здесь.
В Windows 7 появилась новая функция AWESOME, которую приложения могут сообщать о ходе текущей деятельности через строку состояния. Например, при копировании файлов (ов) с помощью Проводника Windows панель выполнения помещается поверх значка приложения на панели задач, и прогресс показывается по мере обновления.
Что такое API для отображения индикатора выполнения? Есть ли в нем документация MSDN?
В журнале MSDN есть хорошая статья о о новых API-интерфейсах панели задач. И да, функция потрясающая: -)
По сути, это все о внедрении IFileOperation
. Там хорошая статья об использовании его в управляемом коде здесь.
Для ниже .NET 4 или WinForms в любой версии .NET
Используя Код кода Windows API от Microsoft (как упоминал Кирон), это действительно просто. Вам просто нужно использовать TaskbarManager
. Например.
Чтобы начать выполнение:
TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.Normal);
Чтобы обновить ход выполнения:
TaskbarManager.Instance.SetProgressValue(currentValue, maxProgressValue);
И когда вы закончите, выполните следующие действия:
TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.NoProgress);
Больше вы можете сделать, но это должно заставить вас начать и, возможно, все, что вам нужно.
Для .NET 4 и выше с WPF
Вы можете использовать System.Windows.Shell.TaskbarItemInfo. Например. в Xaml для вашего главного окна вам нужно будет добавить:
<Window.TaskbarItemInfo>
<TaskbarItemInfo x:Name="taskBarItemInfo" />
</Window.TaskbarItemInfo>
Затем, чтобы обновить прогресс, вы сделали бы что-то вроде:
taskBarItemInfo.ProgressState = TaskbarItemProgressState.Normal;
for (int i = 0; i < 100; i++)
{
taskBarItemInfo.ProgressValue = i / 100.0;
Thread.Sleep(50); // whatever the 'work' really is
}
taskBarItemInfo.ProgressState = TaskbarItemProgressState.None;
Не забывайте, что если вы выполняете "работу" в фоновом потоке (что, вероятно, является хорошей идеей для длительных задач), вам нужно будет вернуться к потоку пользовательского интерфейса, чтобы обновить панель задач.
Если вы планируете использовать другие функции панели задач Windows 7, другой подход состоял бы в использовании библиотеки Microsoft: Windows API Code Pack для .NET Framework, которая больше не доступна в старая ссылка, но ее можно найти на nuget.
Я написал статью о реализации API прогресса панели задач Windows 7 в С# (см.: Панель прогресса панели задач Windows 7 с С# и .NET). Элемент управления является открытым исходным кодом (BSD) и имеет примеры проектов для С# и VB.NET.
Таким образом, вам не нужно преобразовывать код С++ с нуля.