菜鸟请教:如何用程序弹出u盘???急

问题描述

最近想用vb.net做一个卸载u盘的程序,但是网上这方面的程序都是用同一个vb模块,里面有很多vb.net已经不支持或者不适用的函数。但是,以我的水平,还有不少看不懂的东西,没有办法重新写。请问可不可以帮忙解释一下这个模块,或者提供一些适合.net环境的方法?代码是c#或者vb.net都可以(因为某些原因,不能用vb6.0)模块见1楼

解决方案

解决方案二:
OptionExplicitPrivateTypeGUIDData1AsLongData2AsIntegerData3AsIntegerData4(0To7)AsByteEndTypePrivateTypeSP_DEVICE_INTERFACE_DETAIL_DATAcbSizeAsLongstrDevicePathAsString*260EndTypePrivateTypeSP_DEVICE_INTERFACE_DATAcbSizeAsLongInterfaceClassGuidAsGUIDflagsAsLongReservedAsLongEndTypePrivateTypeSP_DEVINFO_DATAcbSizeAsLongClassGuidAsGUIDDevInstAsLongReservedAsLongEndTypePrivateTypeSTORAGE_DEVICE_NUMBERdwDeviceTypeAsLongdwDeviceNumberAsLongdwPartitionNumberAsLongEndTypePrivateEnumPNP_VETO_TYPEPNP_VetoTypeUnknownPNP_VetoLegacyDevicePNP_VetoPendingClosePNP_VetoWindowsAppPNP_VetoWindowsServicePNP_VetoOutstandingOpenPNP_VetoDevicePNP_VetoDriverPNP_VetoIllegalDeviceRequestPNP_VetoInsufficientPowerPNP_VetoNonDisableablePNP_VetoLegacyDriverPNP_VetoInsufficientRightsEndEnumPrivateConstDIGCF_PRESENT=&H2PrivateConstDIGCF_DEVICEINTERFACE=&H10PrivateConstGENERIC_READ=&H80000000PrivateConstFILE_SHARE_READ=&H1PrivateConstOPEN_EXISTING=3PrivateConstFILE_SHARE_WRITE=&H2PrivateConstIOCTL_STORAGE_BASEAsLong=&H2DPrivateConstMETHOD_BUFFERED=0PrivateConstFILE_ANY_ACCESS=0PrivateDeclareFunctionSetupDiGetClassDevsLib"setupapi.dll"Alias"SetupDiGetClassDevsA"(ByValClassGuidAsLong,ByValEnumeratorAsLong,ByValHwndParentAsLong,ByValflagsAsLong)AsLongPrivateDeclareFunctionSetupDiEnumDeviceInterfacesLib"setupapi.dll"(ByValDeviceInfoSetAsLong,ByValDeviceInfoDataAsLong,ByRefInterfaceClassGuidAsGUID,ByValMemberIndexAsLong,ByRefDeviceInterfaceDataAsSP_DEVICE_INTERFACE_DATA)AsLongPrivateDeclareFunctionSetupDiGetDeviceInterfaceDetailLib"setupapi.dll"Alias"SetupDiGetDeviceInterfaceDetailA"(ByValDeviceInfoSetAsLong,ByRefDeviceInterfaceDataAsSP_DEVICE_INTERFACE_DATA,DeviceInterfaceDetailDataAsAny,ByValDeviceInterfaceDetailDataSizeAsLong,ByRefRequiredSizeAsLong,DeviceInfoDataAsAny)AsLongPrivateDeclareFunctionSetupDiDestroyDeviceInfoListLib"setupapi.dll"(ByValDeviceInfoSetAsLong)AsLongPrivateDeclareFunctionCreateFileLib"kernel32"Alias"CreateFileA"(ByVallpFileNameAsString,ByValdwDesiredAccessAsLong,ByValdwShareModeAsLong,lpSecurityAttributesAsAny,ByValdwCreationDispositionAsLong,ByValdwFlagsAndAttributesAsLong,ByValhTemplateFileAsLong)AsLongPrivateDeclareFunctionCM_Get_ParentLib"cfgmgr32.dll"(pdwDevInstAsLong,ByValdwDevInstAsLong,ByValulFlagsAsLong)AsLong
解决方案三:
PrivateDeclareFunctionCM_Request_Device_EjectWLib"setupapi.dll"(ByValdwDevInstAsLong,ByValpVetoTypeAsLong,ByValpszVetoNameAsString,ByValulNameLengthAsLong,ByValulFlagsAsLong)AsLongPrivateDeclareFunctionDeviceIoControlLib"kernel32"(ByValhDeviceAsLong,ByValdwIoControlCodeAsLong,lpInBufferAsAny,ByValnInBufferSizeAsLong,lpOutBufferAsAny,ByValnOutBufferSizeAsLong,lpBytesReturnedAsLong,lpOverlappedAsAny)AsLongPrivateDeclareFunctionCloseHandleLib"kernel32"(ByValhObjectAsLong)AsLongPrivateDeclareFunctionGetDriveTypeLib"kernel32"Alias"GetDriveTypeA"(ByValnDriveAsString)AsLongPrivateDeclareFunctionQueryDosDeviceLib"kernel32"Alias"QueryDosDeviceA"(ByVallpDeviceNameAsString,ByVallpTargetPathAsString,ByValucchMaxAsLong)AsLongPrivateDeclareSubSleepLib"kernel32"(ByValdwMillisecondsAsLong)PrivateDeclareSubCopyMemoryLib"kernel32"Alias"RtlMoveMemory"(DestinationAsAny,SourceAsAny,ByValLengthAsLong)PrivateFunctionCTL_CODE(ByVallDeviceTypeAsLong,ByVallFunctionAsLong,ByVallMethodAsLong,ByVallAccessAsLong)AsLongCTL_CODE=(lDeviceType*2^16&)Or(lAccess*2^14&)Or(lFunction*2^2)Or(lMethod)EndFunctionPrivateFunctionIOCTL_STORAGE_GET_DEVICE_NUMBER()AsLongIOCTL_STORAGE_GET_DEVICE_NUMBER=CTL_CODE(IOCTL_STORAGE_BASE,&H420,METHOD_BUFFERED,FILE_ANY_ACCESS)EndFunctionPrivateFunctionGetDrivesDevInstByDeviceNumber(ByVallngDeviceNumberAsLong,ByValuDriveTypeAsLong,ByValszDosDeviceNameAsString)AsLongDimobjGuidAsGUID,hDevInfoAsLong,dwIndexAsLong,lngResAsLong,dwSizeAsLongDimobjSpdidAsSP_DEVICE_INTERFACE_DATA,objSpddAsSP_DEVINFO_DATA,objPspdiddAsSP_DEVICE_INTERFACE_DETAIL_DATADimhDriveAsLong,objSdnAsSTORAGE_DEVICE_NUMBER,dwBytesReturnedAsLongDimdwReturnAsLongWithobjGuid.Data2=&HB6BF.Data3=&H11D0&.Data4(0)=&H94&.Data4(1)=&HF2&.Data4(2)=&H0&.Data4(3)=&HA0&.Data4(4)=&HC9&.Data4(5)=&H1E&.Data4(6)=&HFB&.Data4(7)=&H8B&SelectCaseuDriveTypeCase2IfInStr(szDosDeviceName,"Floppy")Then.Data1=&H53F56311Else.Data1=&H53F56307EndIfCase3.Data1=&H53F56307Case5.Data1=&H53F56308EndSelectEndWithhDevInfo=SetupDiGetClassDevs(VarPtr(objGuid),0,0,DIGCF_PRESENTOrDIGCF_DEVICEINTERFACE)IfhDevInfo=-1ThenGetDrivesDevInstByDeviceNumber=0ExitFunctionEndIfobjSpdid.cbSize=Len(objSpdid)DoWhile1lngRes=SetupDiEnumDeviceInterfaces(hDevInfo,0,objGuid,dwIndex,objSpdid)IflngRes=0ThenExitDodwSize=0CallSetupDiGetDeviceInterfaceDetail(hDevInfo,objSpdid,ByVal0&,0,dwSize,ByVal0&)IfdwSize<>0AnddwSize<=1024ThenobjPspdidd.cbSize=5objSpdd.cbSize=Len(objSpdd)lngRes=SetupDiGetDeviceInterfaceDetail(hDevInfo,objSpdid,objPspdidd,ByValdwSize,dwReturn,objSpdd)IflngRes>0ThenhDrive=CreateFile(objPspdidd.strDevicePath,0,FILE_SHARE_READOrFILE_SHARE_WRITE,ByVal0&,OPEN_EXISTING,0,0)IfhDrive<>-1ThenlngRes=DeviceIoControl(hDrive,IOCTL_STORAGE_GET_DEVICE_NUMBER,ByVal0&,0,objSdn,Len(objSdn),dwBytesReturned,ByVal0&)IflngResThenIflngDeviceNumber=objSdn.dwDeviceNumberThenCallCloseHandle(hDrive)SetupDiDestroyDeviceInfoListhDevInfoGetDrivesDevInstByDeviceNumber=objSpdd.DevInstExitFunctionEndIfEndIfCallCloseHandle(hDrive)EndIfEndIfEndIfdwIndex=dwIndex+1LoopCallSetupDiDestroyDeviceInfoList(hDevInfo)EndFunctionPublicFunctionRemoveUsbDrive(ByValszDosDeviceNameAsString,ByValblnIsShowNoteAsBoolean)AsBooleanDimstrDriveAsString,dwDeviceNumberAsLong,hVolumeAsLong,objSdnAsSTORAGE_DEVICE_NUMBER,dwBytesReturnedAsLongDimlngResAsLong,uDriveTypeAsLong,strDosDriveNameAsString,hDevInstAsLong,uTypeAsPNP_VETO_TYPEDimstrVetoNameAsString,blnSuccessAsBoolean,dwDevInstParentAsLong,iAsInteger,pVetoTypeAsLongstrDrive=Right(szDosDeviceName,2)dwDeviceNumber=-1hVolume=CreateFile(szDosDeviceName,0,FILE_SHARE_READOrFILE_SHARE_WRITE,ByVal0&,OPEN_EXISTING,0,0)IfhVolume=-1ThenRemoveUsbDrive=FalseExitFunctionEndIflngRes=DeviceIoControl(hVolume,IOCTL_STORAGE_GET_DEVICE_NUMBER,ByVal0&,0,objSdn,Len(objSdn),dwBytesReturned,ByVal0&)IflngResThendwDeviceNumber=objSdn.dwDeviceNumberEndIfCallCloseHandle(hVolume)IfdwDeviceNumber=-1ThenRemoveUsbDrive=FalseExitFunctionEndIfuDriveType=GetDriveType(strDrive)strDosDriveName=String(280,Chr(0))lngRes=QueryDosDevice(strDrive,strDosDriveName,280)strDosDriveName=Left(strDosDriveName,InStr(strDosDriveName,Chr(0))-1)IflngRes=0ThenRemoveUsbDrive=FalseExitFunctionEndIfhDevInst=GetDrivesDevInstByDeviceNumber(dwDeviceNumber,uDriveType,strDosDriveName)IfhDevInst=0ThenRemoveUsbDrive=FalseExitFunctionEndIfstrVetoName=String(260,Chr(0))lngRes=CM_Get_Parent(dwDevInstParent,hDevInst,0)Fori=0To3IfblnIsShowNoteThenlngRes=CM_Request_Device_EjectW(dwDevInstParent,ByValVarPtr(pVetoType),vbNullString,0,0)ElselngRes=CM_Request_Device_EjectW(dwDevInstParent,uType,strVetoName,260,0)EndIfIflngRes=0AnduType=PNP_VetoTypeUnknownThenblnSuccess=TrueExitForEndIfSleep300NextRemoveUsbDrive=blnSuccessEndFunction
解决方案四:
太长了,我是来顶你的
解决方案五:
google出来的,没仔细看,看看是否符合你的要求:EjectUSBdisksusingC#http://www.codeproject.com/KB/system/usbeject.aspx
解决方案六:
引用3楼wenh7788的回复:

太长了,我是来顶你的

me,too我也正需要呢~
解决方案七:
看了下,代码转换应该比较简单。给几个意见:1TYPE要转为structure比如PrivateTypeGUIDData1AsLongData2AsIntegerData3AsIntegerData4(0To7)AsByteEndType就改为PrivateStructureGUIDDimdata1asLongdimdata2asintegerDimdata3asintegerDimdata4(7)asByteEndStructure2数组声明做个变化比如源代码是Data4(0To7)AsByte就改为Dimdata4(7)asByte其他我建议你哪里跑不过贴哪里出来,vb6转vb.net还是比较简单的
解决方案八:
其实可以直接将这个模块写成dll,然后。net调用,完全没问题。
解决方案九:
路过,学习学习
解决方案十:
顶4楼。下下来学习学习。
解决方案十一:
我看看,来学习学习,感觉还很不错的
解决方案十二:
引用楼主sharefantasy的回复:

最近想用vb.net做一个卸载u盘的程序,但是网上这方面的程序都是用同一个vb模块,里面有很多vb.net已经不支持或者不适用的函数。但是,以我的水平,还有不少看不懂的东西,没有办法重新写。请问可不可以帮忙解释一下这个模块,或者提供一些适合.net环境的方法?代码是c#或者vb.net都可以(因为某些原因,不能用vb6.0)模块见1楼

看看這個,是否對你有幫助ForEachDiskAsStringInEnvironment.GetLogicalDrivesSelectCaseMy.Computer.FileSystem.GetDriveInfo(Disk).DriveTypeCaseIO.DriveType.CDRom'光盘设备MessageBox.Show("光盘设备"&Disk)CaseIO.DriveType.Fixed'固定磁盘MessageBox.Show("固定磁盘"&Disk)CaseIO.DriveType.Network'网络驱动器MessageBox.Show("网络驱动器"&Disk)CaseIO.DriveType.NoRootDirectory'驱动器没有根目录MessageBox.Show("驱动器没有根目录"&Disk)CaseIO.DriveType.Ram'RAM磁盘MessageBox.Show("RAM磁盘"&Disk)CaseIO.DriveType.Removable'可移动存储设备,如软盘或闪存IfInStr(Disk,"A")=0ThenMessageBox.Show("可移动存储设备,如软盘或闪存"&Disk)EndIfCase(IO.DriveType.Unknown)'类型未知EndSelectNext

时间: 2024-09-23 01:05:34

菜鸟请教:如何用程序弹出u盘???急的相关文章

Win7系统打开程序弹出乱码记事本怎么解决?

Win7系统打开程序弹出乱码记事本怎么解决? 解决方法: 1.打开360等安全杀毒软件,点击闪电杀毒; 2.再点击全盘扫描,如下图所示:从下图可以看出,我的电脑前21分钟360修复两个系统安全问题; 3.等待一段时间,重启电脑,在打开网页.QQ及运行命令就不会弹出乱码记事本问题了,比如,在运行窗口输入:CMD就不会出现乱码记事本问题了. 注意:扫描完后一定要点立即处理并重启电脑.  

win8运行应用程序弹出“应用程序无法启动(0x00000XX) ”如何解决

  win8运行应用程序弹出"应用程序无法启动(0x00000XX) "如何解决         具体步骤: 1.下载DirectX Repair3.3,并将其解压出来; 2.打开"DirectX Repair",点击[检测并修复]右侧的小三角,勾选"同时更新c++"; 3.点击[检测并修复],修复工具开始自动运行; 4.修复完成后点击退出,并且重启算计即可解决应用程序出错的问题.

Mac电脑如何安全弹出U盘或移动硬盘?

  U盘插入Mac后为了让U盘安全的弹出,该如何操作呢?第一次使用Mac系统的用户朋友可能会遇到这样的疑问,为了保障U盘或移动硬盘里面的资料安全,随手安全弹出U盘设备是一个好习惯,下面小编就教大家在Mac电脑上如何安全弹出U盘或移动硬盘. 1.如果你已经正常插入了U盘,那么在你的MAC系统中的桌面上便会有一个图标 2.方法一 在该盘符的图标上点击鼠标右键,我们发现有"退出XXX"字样的选项,点击后U盘的盘符消失那么大家应该已经明白! Mac OS中是能实现直接对U盘的盘符图标操作安全弹

苹果Mac电脑如何安全弹出U盘或移动硬盘

  苹果Mac电脑安全弹出U盘或移动硬盘的两种方法 1.如果你已经正常插入了U盘,那么在你的MAC系统中的桌面上便会有一个图标 2.方法一 在该盘符的图标上点击鼠标右键,我们发现有"退出XXX"字样的选项,点击后U盘的盘符消失那么大家应该已经明白! Mac OS中是能实现直接对U盘的盘符图标操作安全弹出的. 3.方法二 使用鼠标左键点击finder 4.然后在"设备"一栏中的U盘名称旁边的三角形,如图所示! 5.在"设备"选项下面,我们的U盘名字

解决win7系统下安全弹出U盘出现电脑重启的问题方法

  U盘是一种能够方便用户便携式存储数据的设备,U盘在我们的生活中较为广泛被使用,不过有些用户在win7系统下使用U盘时进行备份或转移资料后,在不使用U盘时,使用安全弹出U盘时出现电脑自动重启的问题,对于该奇葩问题很多用户表示不解,故此小编针对遇到该问题的用户提供了解决方法,需要的用户赶快试试吧! 解决win7系统下安全弹出U盘出现电脑重启的问题方法 1.返回到桌面位置,找到"这台电脑"图标,直接鼠标右键点击这台电脑,在出现的菜单里面选中选择设备管理器选项. 2.这样就能够打开win8

bootstrap modal弹出框 关闭后会再弹出一次 急求解答

问题描述 bootstrap modal弹出框 关闭后会再弹出一次 急求解答 <!doctype html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>alert_modal弹出

C++实现Linux下弹出U盘的方法_C 语言

本文实例讲述了C++实现Linux下弹出U盘的方法.分享给大家供大家参考.具体如下: 在linux下,对于usb设备,我们一般都是mount上使用,不使用时umount掉就可以了. 在ubuntu10.04中,当我们插入u盘时,会出现u盘设备,当我点击这个设备就可以mount上u盘,并读取里面的文件,当我们不使用时,我们再次点击这个设备就可以弹出这个设备,如果想再次使用U盘,那么就得必须再次插拔u盘才可以. umount和弹出u盘是不同的,umount后我们还可以再次mount上使用,我们的u盘

如何捕获外部应用程序弹出的对话框,在线等~~

问题描述 一个外部应用程序每隔一段时间就会弹出一个对话框,我现在用的Timer实现每秒钟检查一次该对话框是否弹出,对系统资源占用比较大!请问有不有其它方法让外部应用程序一弹出对话框,我就能捕获到它?? 解决方案 解决方案二:顶一下看看

Win7系统打开程序弹出乱码记事本的解决方法

  解决方法: 1.打开360等安全杀毒软件,点击闪电杀毒; 2.再点击全盘扫描,如下图所示:从下图可以看出,我的电脑前21分钟360修复两个系统安全问题; 3.等待一段时间,重启电脑,在打开网页.QQ及运行命令就不会弹出乱码记事本问题了,比如,在运行窗口输入:CMD就不会出现乱码记事本问题了. 注意:扫描完后一定要点立即处理并重启电脑.