Avaxnet

نسخه کامل: فضای خالی درایوها (ويژوال بیسیک)
شما در حال مشاهده نسخه تکمیل نشده می باشید. مشاهده نسخه کامل با قالب بندی مناسب.
کد زیر مربوط به برنامه ای است که فضای آزاد درایوهای سیستم را نشان می دهد. این کد با ویژوال بیسیک نوشته شده است.

پروژه جدیدی را آغاز کنید. روی فرم یک PictureBox با نام Pad قرار دهید. خصوصیت ScaleMode را برای فرم و Pad به Pixle تغییر دهید.

از منوی Project گزینه References را انتخاب کنید. حال از لیست نمایش داده شده گزینه Microsoft Scripting Runtime را پیدا کرده و علا مت بزنید. این کار برای این است که اطلاعات درایوها در دسترس برنامه قرار گیرد.

حال دستورات زیر را در قسمت کد پروژه تایپ کنید:

Private Sub GetDriveSize()

Dim fso As New FileSystemObject

Dim Dr As Drive

Dim UsedPer100 As Byte, FreePer100 As Byte, k As Byte

Dim TotalUsedPer100 As Integer

Dim Total As Long, TotalUsed As Long

Const Height As Byte = 15 ' Height

Const Width As Integer = 200 ' Width

Const D As Byte = 20 ' Distance

Const SP As Integer = 10 ' StartPoint

TotalUsedPer100 = 0

Total = 0

TotalUsed = 0

k = 0

Pad.FontBold = True

Pad.CurrentX = Width + 50

Pad.CurrentY = D * k

Pad.ForeColor = vbBlue

Pad.Print "Used"

Pad.CurrentX = Width + 110

Pad.CurrentY = D * k

Pad.ForeColor = &H8000&

Pad.Print "free"

Pad.CurrentX = Width + 170

Pad.CurrentY = D * k

Pad.ForeColor = vbBlack

Pad.Print "Total"

Pad.FontBold = False

For i = 0 To Drive1.ListCount - 1

Set Dr = fso.GetDrive(Left(Drive1.List(i), 1))

If Dr.DriveType = Fixed Then

k = k + 1

UsedPer100 = Int((Dr.TotalSize - Dr.FreeSpace) / Dr.TotalSize * 100)

FreePer100 = Int(Dr.FreeSpace / Dr.TotalSize * 100)

Pad.Line (SP, D * k)-(Width + SP, D * k + Height), vbWhite, BF

Pad.Line (SP, D * k)-(Width + SP, D * k + Height), vbBlue, B

Pad.Line (SP + 2, D * k + 2)-(UsedPer100 * (Width / 100) + SP - 2, D * k + Height - 2), vbBlue, BF

TotalUsedPer100 = UsedPer100 + TotalUsedPer100

Total = Total + Int(Dr.TotalSize / 1024 ^ 2)

TotalUsed = TotalUsed + Int((Dr.TotalSize - Dr.FreeSpace) / 1024 ^ 2)

Pad.CurrentX = Width + 20

Pad.CurrentY = D * k

Pad.ForeColor = vbRed

Pad.Print "<"; UCase(Left(Drive1.List(i), 1)) & ">";

Pad.CurrentX = Width + 50

Pad.CurrentY = D * k

Pad.ForeColor = vbBlue

Pad.Print Int((Dr.TotalSize - Dr.FreeSpace) / (1024 ^ 2))

Pad.CurrentX = Width + 110

Pad.CurrentY = D * k

Pad.ForeColor = &H8000&

Pad.Print Int((Dr.FreeSpace) / (1024 ^ 2))

Pad.CurrentX = Width + 170

Pad.CurrentY = D * k

Pad.ForeColor = vbBlack

Pad.Print Int((Dr.TotalSize) / (1024 ^ 2))

End If

Next i

TotalUsedPer100 = Int(TotalUsedPer100 / k)

k = k + 1

Pad.FontBold = True

Pad.Line (SP, D * k)-(Width + SP, D * k + Height), vbWhite, BF

Pad.Line (SP, D * k)-(Width + SP, D * k + Height), vbBlack, B

Pad.Line (SP + 2, D * k + 2)-(TotalUsedPer100 * (Width / 100) + SP - 2, D * k + Height - 2), vbBlack, BF

Pad.CurrentX = Width + 20

Pad.CurrentY = D * k

Pad.ForeColor = vbRed

Pad.Print "All"

Pad.CurrentX = Width + 50

Pad.CurrentY = D * k

Pad.ForeColor = vbBlue

Pad.Print TotalUsed

Pad.CurrentX = Width + 110

Pad.CurrentY = D * k

Pad.ForeColor = &H8000&

Pad.Print Total - TotalUsed

Pad.CurrentX = Width + 170

Pad.CurrentY = D * k

Pad.ForeColor = vbBlack

Pad.Print Total

Pad.Height = (k + 2) * D

End Sub



حال با فراخوانی رویه GetDriveSize فضای خالی درایوها روی Pad چاپ خواهد شد.

مرسي دوست عزيز

اميدوارم اين فعاليت خوبت ادامه داشته باشه

البته من هنوز اين كد رو امتحان نكردم،ببينم جاييش خطا داره يا نه،ولي در كل مرسي0

سلام.
این Private Sub GetDriveSize مربوط به چی میشه؟ منظور از فراخوانی GetDriveSize چی هست؟
کارهایی که گفتید رو انجام دادم ولی متوجه نشدم برنامه چطوری کار میکنه.
چیزی که درست کردم! 

DUSKY نوشته شده توسط:سلام. این Private Sub GetDriveSize مربوط به چی میشه؟ منظور از فراخوانی GetDriveSize چی هست؟ کارهایی که گفتید رو انجام دادم ولی متوجه نشدم برنامه چطوری کار میکنه. چیزی که درست کردم! 

0 سلام دوست عزیز بر خلاف عادت همیشگیم فایلی که فرستادین رو گرفتم

اگر کد ها رو وارد کرده باشین و فراخوانی کرده باشین اینطوری نخواهد شد

خوب 3 مورد وجود داره که به اختصار میگم

1.GetDriveSize در حقیقت یک روال هستش که شما به صورت public میتونید اون رو تو ماپول هم بنویسید.

2. شماGetDriveSize رو باید در یکی از رویداد هایی که ویژوال بیسیک میشناسه فراخوانی کنید(مثلا یک دکمه بر روی فرم قرار بدید و GetDriveSize رو در رویداد کلیلک دکمه قرار بدید برای مثال(بر فرض این که اسم دکمه ی بر روی فرم Command1 است):

Private Sub Command1_Click()
GetDriveSize
End Sub

به یک نقطه دقت داشته باشید که شما ساب مینویسید پس نباید هیچ متغیری برای گرفتن خروجی باشه چون تعریف شده.

3. حدس میزنم یا شما به صورت هیدن در آوردین یا کلا هیدن بود من اثری از کنترل های Drive

/ DirListBox  /  filelistBox   روی فرمتون ندیدم البته تنها کنترل Drive کافی هست اما من ترجیحا جهت ارتباط های احتمالی هر 3 رو قرار دادم!

و یک نکته ی دیگه که از ایرادات جزئی برنامه هست مثلا برنامه نویس این روال یادش رفته که برای هر خروجی یک خط بگذاری برای همین چیزایی که میخواسته بگه روی هم چاپ شدن

اما مهم ترین نکته مربع آبی هست که به شما میگه چقدر از فضای درایوتون استفاده شده0

امممممم چیزه دیگه ای به ذهنم نمیرسه

در خدمتتون هستم باز موردی بود

اگر هم  فایل exe  ام رو خواستین به صورت خصوصی براتون خواهم فرستاد0

لینک مرجع