www.pc3enter.tk
چهارشنبه 18 خرداد 1390, 03:04 صبح
سلام دوستان یک سوال داشتم
می خواستم بدانم چطوری می شود وقتی یک فلش به کامپیوتر وصل می کنیم با ویژال بیسیک آن را دیسکانکت کنیم
باتشکر
محسن واژدی
چهارشنبه 18 خرداد 1390, 09:55 صبح
سلام علیکم
یک ماژول ایجاد و کدهای زیر را در آن کپی کنید:
Private Declare Function CM_Get_DevNode_Status Lib "setupapi.dll" (lStatus As Long, lProblem As Long, ByVal hDevice As Long, ByVal dwFlags As Long) As Long
Private Declare Function CM_Get_Parent Lib "setupapi.dll" (hParentDevice As Long, ByVal hDevice As Long, ByVal dwFlags As Long) As Long
Private Declare Function CM_Locate_DevNodeA Lib "setupapi.dll" (hDevice As Long, ByVal lpDeviceName As Long, ByVal dwFlags As Long) As Long
Private Declare Function CM_Request_Device_EjectA Lib "setupapi.dll" (ByVal hDevice As Long, lVetoType As Long, ByVal lpVetoName As Long, ByVal cbVetoName As Long, ByVal dwFlags As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpszValueName As String, ByVal lpdwReserved As Long, lpdwType As Long, lpData As Any, lpcbData As Long) As Long
' Safely remove USB flash drive
Public Function SafelyRemove(ByVal pstrDrive As String) As Boolean
Const DN_REMOVABLE = &H4000
Dim strDeviceInstance As String
Dim lngDevice As Long
Dim lngStatus As Long
Dim lngProblem As Long
Dim lngVetoType As Long
Dim strVeto As String * 255
pstrDrive = UCase$(Left$(pstrDrive, 1)) & ":"
strDeviceInstance = StrConv(GetDeviceInstance(pstrDrive), vbFromUnicode)
If CM_Locate_DevNodeA(lngDevice, StrPtr(strDeviceInstance), 0) = 0 Then
If CM_Get_DevNode_Status(lngStatus, lngProblem, lngDevice, 0) = 0 Then
Do While Not (lngStatus And DN_REMOVABLE) > 0
If CM_Get_Parent(lngDevice, lngDevice, 0) <> 0 Then Exit Do
If CM_Get_DevNode_Status(lngStatus, lngProblem, lngDevice, 0) <> 0 Then Exit Do
Loop
If (lngStatus And DN_REMOVABLE) > 0 Then SafelyRemove = (CM_Request_Device_EjectA(lngDevice, lngVetoType, StrPtr(strVeto), 255, 0) = 0)
End If
End If
End Function
Private Function GetDeviceInstance(pstrDrive As String) As String
Const HKEY_LOCAL_MACHINE = &H80000002
Const KEY_QUERY_VALUE = &H1
Const REG_BINARY = &H3
Const ERROR_SUCCESS = 0&
Dim strKey As String
Dim strValue As String
Dim lngHandle As Long
Dim lngType As Long
Dim strBuffer As String
Dim lngLen As Long
Dim bytArray() As Byte
strKey = "SYSTEM\MountedDevices"
strValue = "\DosDevices\" & pstrDrive
If RegOpenKeyEx(HKEY_LOCAL_MACHINE, strKey, 0&, KEY_QUERY_VALUE, lngHandle) = ERROR_SUCCESS Then
If RegQueryValueEx(lngHandle, strValue, 0&, lngType, 0&, lngLen) = 234 Then
If lngType = REG_BINARY Then
strBuffer = Space$(lngLen)
If RegQueryValueEx(lngHandle, strValue, 0&, 0&, ByVal strBuffer, lngLen) = ERROR_SUCCESS Then
If lngLen > 0 Then
ReDim bytArray(lngLen - 1)
bytArray = Left$(strBuffer, lngLen)
strBuffer = StrConv(bytArray, vbFromUnicode)
Erase bytArray
If Left$(strBuffer, 4) = "\??\" Then
strBuffer = Mid$(strBuffer, 5, InStr(1, strBuffer, "{") - 6)
GetDeviceInstance = Replace(strBuffer, "#", "\")
End If
End If
End If
End If
End If
RegCloseKey lngHandle
End If
End Function
هر کدام از دو نوع دستور زیر را برای Eject کردن حافظه flash وارد کنید صحیح است:
SafelyRemove "G:"
SafelyRemove "G"
بجای "G" نام درایو flashتون را جایگزین کنید
موفق باشید
یاعلی
www.pc3enter.tk
چهارشنبه 18 خرداد 1390, 10:12 صبح
دستون درد نکنه دوست عزیز
فقط این که هیچ کاری انجام نمی ده
کد زیر را داخل کامند گذاشتم و روی ان کلیک کردم کاری نکرد مشکل کجاست
SafelyRemove "G:"
محسن واژدی
چهارشنبه 18 خرداد 1390, 11:11 صبح
سلام علیکم
همانگونه که قبلا" نیز عرض کردم بایستی بجای "G" نام درایو فلشتون رو جایگزین کنین
بررسی کنین شاید نام درایو فلشتون متفاوت باشد
موفق باشید
shedayat
چهارشنبه 18 خرداد 1390, 11:19 صبح
این برنامه تست شد و به خوبی جواب می ده.
موقع نوشن اسم درایو فقط اسمش رو بزارید بدون گذاشتن دو نقطه ("G")
من یه برنامه ای دیدم که فلش اجکت شده رو دوباره به کامپیوتر وصل می کرد. یعنی با یه دکمه فلش اجکت می شد و با یه دکمه دیگه دوباره فلش به کامپیوتر وصل می شد کار می کرد. :متعجب:
می خواستم ببینم کسی می دونه چه طوری می شه یه همچین کاری انجام داد؟ :متفکر:
www.pc3enter.tk
چهارشنبه 18 خرداد 1390, 11:51 صبح
1.اسم برنامهش هم Zentimo است
==================================
نام داریو فلش من k هست بازهم جواب نداد
اگر مشکلی نیست برنامه را روی سایت آپلود کن
شاد من دارم اشتباه می کنم
محسن واژدی
چهارشنبه 18 خرداد 1390, 13:46 عصر
یک نکته ای که یادم رفت عرض کنم این بود که بنده کد را بر روی winxp تست کردم و جواب داد، اگر از ویندوز سون استفاده میکنید ممکن است عمل نکند
www.pc3enter.tk
چهارشنبه 18 خرداد 1390, 13:54 عصر
نه من فقط از xp استفاده می کنم
(در ضمن فلش من kingmax 16 gb است)
حالا اگر مشکلی نیست برنامه را روی سایت آپلود کن
باتشکر
محسن واژدی
چهارشنبه 18 خرداد 1390, 14:09 عصر
تست کنین انشاء الله درسته
موفق باشید
www.pc3enter.tk
چهارشنبه 18 خرداد 1390, 15:56 عصر
دوست عزیز شرمنده نشد
من کلیپ ویدیویی 3gp 400 kb گذاشتم ببین
اگر تونستی مشکل را پیدا کنی دستت درد نکه و اگر هم نتونستی بیخال
نمی خوام مزاحم کارت بشوم
flash.3gp (http://mehdi23.40sotoon.net/data/subsite/mehdi23_data/files/flash.3gp)
محسن واژدی
چهارشنبه 18 خرداد 1390, 19:25 عصر
سلام علیکم
خیلی ببخشید
ویندوز فعلی بنده win7 هست که در هرصورت سورسه بر رویش عمل نکرد
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.