PDA

View Full Version : سوال: پر شدن آیکون برنامه در taskmanager با استفاده از progressbar



forodo
دوشنبه 30 دی 1392, 17:17 عصر
سلام
من کد زیر رو دارم ولی نمی دونم چطور باید با progressbar منطبقش کنم.

int max = 100;
var prog = Microsoft.WindowsAPICodePack.Taskbar.TaskbarManage r.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);

khokhan
دوشنبه 30 دی 1392, 18:12 عصر
سلام
من کد زیر رو دارم ولی نمی دونم چطور باید با progressbar منطبقش کنم.

int max = 100;
var prog = Microsoft.WindowsAPICodePack.Taskbar.TaskbarManage r.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);

ابتدا ورژن مناسب پک Windows API Code Pack رو از این لینک (http://archive.msdn.microsoft.com/WindowsAPICodePack/Release/ProjectReleases.aspx?ReleaseId=4906) دانلود کن
بعد فایل Microsoft.WindowsAPICodePack.Shell.dll رو که جزو زیرمجموعه همین پک می باشد رو از رفرنسها به پروژه تون اضافه کنین
با افزودن این کلاس در پروژه می تونین با یه همچی دستوری پروگرس بار رو درtaskmanager وجایی که آیکن پروژه تون قرار داره مانند همون که در ویندوز 7 اتفاق می افته نشون بدین:

if (Microsoft.WindowsAPICodePack.Taskbar.TaskbarManag er.IsPlatformSupported)
{
int maxProgressbarValue = 100;
var taskbarInstance = Microsoft.WindowsAPICodePack.Taskbar.TaskbarManage r.Instance;
taskbarInstance.SetProgressState(Microsoft.Windows APICodePack.Taskbar.TaskbarProgressBarState.Normal );

for (int i = 0; i < maxProgressbarValue; i++)
{
taskbarInstance.SetProgressValue(i, maxProgressbarValue);
Thread.Sleep(50);
}

taskbarInstance.SetProgressState(Microsoft.Windows APICodePack.Taskbar.TaskbarProgressBarState.NoProg ress);
}
else
{
// Platform does not support the feature.
}
موفق باشین

forodo
دوشنبه 30 دی 1392, 18:54 عصر
درست شد.
dllاش رو می تونید از اینجا دانلود کنید. (http://barnamenevis.org/showthread.php?437507-%D8%B1%D9%81%D8%B1%D9%86%D8%B3-using-Microsoft.WindowsAPICodePack.Taskbar&p=1958151&viewfull=1#post1958151)


int bb = 0;
// پاک کردن تمام سطرهای ردگریدویو
RGV.Rows.Clear();
RGVFile.Rows.Clear();
// شمارنده برای اینکه مقداری به ارتفاع هر سطر داده شود
int RowCountFilm = 0;
// دادن تعداد فولدرهای موجود به ماکزیمم ردپروگرس بار
RPB.Maximum = DSFilm;
var taskbarInstance = Microsoft.WindowsAPICodePack.Taskbar.TaskbarManage r.Instance;
taskbarInstance.SetProgressState(Microsoft.Windows APICodePack.Taskbar.TaskbarProgressBarState.Normal );
// پیداکردن مسیرهای عنوان مورد نظر
foreach (string Masir in Directory.GetDirectories(@"E:\Films", AGL, SearchOption.AllDirectories))
{
if (!Masir.Contains("Harry Potter") && !Masir.Contains("Jackie Chan") && !Masir.Contains("Jet Li") && !Masir.Contains("Bruce Lee"))
{
string[] aa = Masir.Split('\\');
try
{
taskbarInstance.SetProgressValue(bb, DSFilm);
Thread.Sleep(1);
bb++;
// اضافه کردن مقدار پروگرس بار برای پرشدن
RPB.Value1 += 1;
// اضافه کردن سطر به ردگریدویو
// سایز فولدر پیدا شده (#####) تبدیل تاریخ فولدر پیدا شده به تاریخ شمسی (#####) مسیر فولدر پیدا شده (#####) نام فولدر پیدا شده
RGV.Rows.Add(aa[aa.Length - 2], Image.FromFile(Path.GetDirectoryName(Masir) + "\\FolderMarker.ico"), FolderSize(Masir), ConvertMiladiToShamsi(Masir), Masir);
// تغییر سایز ستون عکس
RGV.Rows[RowCountFilm].Height = 350;
// اضافه کردن یک واحد به شمارنده برای اینکه مقداری به ارتفاع هر سطر داده شود
RowCountFilm++;
Application.DoEvents();
}
catch (Exception)
{
// در صورت پیدا نکردن آیکون فیلم
RGV.Rows.Add(aa[aa.Length - 2], Image.FromFile(AppDomain.CurrentDomain.BaseDirecto ry + "DS.ico"), FolderSize(Masir), ConvertMiladiToShamsi(Masir), Masir);
RGV.Rows[RowCountFilm].Height = 350;
RowCountFilm++;
}
}

}
taskbarInstance.SetProgressState(Microsoft.Windows APICodePack.Taskbar.TaskbarProgressBarState.NoProg ress);