ايران ويج

نسخه‌ی کامل: آیا میتوان برنامه ای نوشت که فلش مموری را Eject کنه ؟
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
با سلام دوستان

بعضی مواقع با خود ویندوز نمیشه فلش مموری رو Eject کرد و با این پیغام رو به رو میشم

[تصویر:  asd.gif]

سلام.
معمولا وقتی برنامه ای یا چیزی رو فلش باز باشه این مشکل پیش میاد.
میتونی برنامه ای بنویسی که فایل هایی که از رو فلش باز شدن رو ببنده تا فلش اجکت شه.
البته به دردسرش نمیرزه. همیشم جواب نمیده.
نگاه اگه بخوای برنامه های در حال اجرا که مرتبط میشن به فلشت را از حافظه خارج کنی شرایط خاص خودش را داره یعنی باید قابل خاتمه باشه در داخل ویندوز که بتونی خاتمش بدی اگه سیستمی باشه نمیشه چون مال ویندوز است و اگه هم بشه دچار مشکل میشه ویندوز و خاموش میشه
(۲۶-آذر-۱۳۹۰, ۱۸:۳۴:۰۱)rap0661 نوشته است: [ -> ]نگاه اگه بخوای برنامه های در حال اجرا که مرتبط میشن به فلشت را از حافظه خارج کنی شرایط خاص خودش را داره یعنی باید قابل خاتمه باشه در داخل ویندوز که بتونی خاتمش بدی اگه سیستمی باشه نمیشه چون مال ویندوز است و اگه هم بشه دچار مشکل میشه ویندوز و خاموش میشه

سلام.
میشه بیشتر توضیح بفرمایید؟
در ماژول
کد:
Public Sub UnSubClass()
If (WHnd = 0) Then Exit Sub
Call SetWindowLong(WHnd, GWL_WNDPROC, OldProc)

WHnd = 0
OldProc = 0
End Sub

در Unload فورم

کد:
Private Sub Form_Unload(ByRef Cancel As Integer)
Call UnregisterDeviceNotification(lDevNotify)
Call UnSubClass
End Sub

ایجاد فانکشن برای عمل

کد:
Public Function EjectMedia(sDrive As String, _
ctrlCode As Long) As Boolean
Dim hDevice As Long
Dim bytesReturned As Long
Dim success As Long

'obtain a handle to the device
hDevice = CreateFile("\\.\" & sDrive, _
GENERIC_READ, _
FILE_SHARE_READ Or FILE_SHARE_WRITE, _
ByVal 0&, _
OPEN_EXISTING, _
0&, 0&)

If hDevice <> INVALID_HANDLE_VALUE Then

'If the operation succeeds,
'DeviceIoControl returns zero
success = DeviceIoControl(hDevice, _
ctrlCode, _
0&, _
0&, _
ByVal 0&, _
0&, _
bytesReturned, _
ByVal 0&)

End If

Call CloseHandle(hDevice)
EjectMedia = success <> 0
MsgBox "Safe To Remove Flash Disk!"

End Function

عمل و فراخوانی فانکشن و Eject
کد:
Private Sub Command1_Click()

Call EjectMedia("I:", IOCTL_STORAGE_EJECT_MEDIA)
End Sub

این هم نمونه به 2 روش
ممنونم

بعضی اوقات اینطوری میشه ، هر چیزی هم به وفلشم ربط داشت رو قطع میکنم

ولی باز هم به این صورت هست

آیا با کدی که Zirak عزیز داده میشه به صورت سالم و امن فلش رو Eject کرد ؟

ممنون میشم جواب بدین
(۰۵-دى-۱۳۹۰, ۱۵:۰۴:۱۷)sevdaboy نوشته است: [ -> ]ممنونم

بعضی اوقات اینطوری میشه ، هر چیزی هم به وفلشم ربط داشت رو قطع میکنم

ولی باز هم به این صورت هست

آیا با کدی که Zirak عزیز داده میشه به صورت سالم و امن فلش رو Eject کرد ؟

ممنون میشم جواب بدین

اینو یادم رفت
با سلام و تشکر از شما
میخواستم بدونم با این کد اگه 2 تا فلش روی سیستم باشه هر 2 فلش Eject میشن ؟

راهی هست که تک تک Eject کنه ؟


ممنون میشم جواب بدین
اگه دقت کرده باشی
اینجا تعیین میکنی کجا رو Eject کنه.
کد:
Private Sub Command1_Click()

Call EjectMedia("I:", IOCTL_STORAGE_EJECT_MEDIA)
End Sub
(۱۵-دى-۱۳۹۰, ۰۹:۰۱:۳۶)zirak نوشته است: [ -> ]اگه دقت کرده باشی
اینجا تعیین میکنی کجا رو Eject کنه.
کد:
Private Sub Command1_Click()

Call EjectMedia("I:", IOCTL_STORAGE_EJECT_MEDIA)
End Sub

Zirak عزیز ، ممنونم ولی منظور من این بود که میشه یه ListVIew بزارم که فقط فلش مموری هایی که به کامپیوتر وصل هستن رو نشون بده که کاربر بتونه انتخاب کنه کدوم یکی Eject بشه
سلام.

کد زیر لیست کل درایو هارو بهتون میده.
بعد میتونید درایوهای از نوع Removable رو جدا کنید و نمایش بدید.
البته فکر کنم به جای دستورات right و left از split استفاده کنی کدت قشنگ تر شه.

کد:
Private Declare Function GetLogicalDriveStringsA Lib "kernel32" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Declare Function GetDriveTypeA Lib "kernel32" (ByVal nDrive As String) As Long

Private Sub GetDrives()
    'Find Drives
    strSaveDrives = String(255, vbNullChar)
    GetLogicalDriveStringsA 255, strSaveDrives
    For keer = 1 To 100
        If Left(strSaveDrives, InStr(1, strSaveDrives, vbNullChar)) = vbNullChar Then Exit For
        strNamedrv(keer) = Left(strSaveDrives, InStr(1, strSaveDrives, vbNullChar) - 1)
        strSaveDrives = Right(strSaveDrives, Len(strSaveDrives) - InStr(1, strSaveDrives, vbNullChar))
    Next keer
    
    'Getting Type Of Drives
    For I = 1 To keer - 1
        Select Case GetDriveTypeA(strNamedrv(I))
            Case Is = 2
                'Removable
                strNamedrv(I) = strNamedrv(I) & vbNullChar & "Removable"
            Case Is = 3
                'Fix
                strNamedrv(I) = strNamedrv(I) & vbNullChar & "Fix"
            Case Is = 4
                'Remote
                strNamedrv(I) = strNamedrv(I) & vbNullChar & "Remote"
            Case Is = 5
                'CD-Rom
                strNamedrv(I) = strNamedrv(I) & vbNullChar & "CD-Rom"
            Case Is = 6
                'Ram Disk
                strNamedrv(I) = strNamedrv(I) & vbNullChar & "Ram Disk"
            Case Else
                'Unrecognized
                strNamedrv(I) = strNamedrv(I) & vbNullChar & "Unrecognized"
        End Select
    Next I
End Sub

صفحه‌ها: 1 2