请问98下面怎样检测优盘?

wangdongzjk 2004-04-24 01:15:07
想在win98下检测是否存在优盘,不知道应该怎么做。getdevicetype函数检测到的优盘是fixed,和硬盘的一样,不知道有没有其他的方法。
...全文
195 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
华芸智森 2004-06-26
  • 打赏
  • 举报
回复
装驱动..
LanceJin 2004-06-25
  • 打赏
  • 举报
回复
Removable没错,可移动盘
pigpag 2004-06-25
  • 打赏
  • 举报
回复
估计是XP/98不同的原因
pigpag 2004-06-25
  • 打赏
  • 举报
回复
是的,很正常,就看驱动程序是怎么标示它的了
supergreenbean 2004-06-25
  • 打赏
  • 举报
回复
奇怪了,那我这里检测出来怎么是Removable的……
LanceJin 2004-06-25
  • 打赏
  • 举报
回复
检测即插即用设备,使用 SysInfo 控件

SysInfo 可以用于检测系统事件,例如桌面的大小改变、分辨率改变、时间改变,或用于提供操作系统平台和版本信息。它也可以用于管理交流电 (AC) 和电池电源之间的切换,以及硬件配置的改变。

在 Windows 95 中,在新设备添加到系统之后能够被自动检测出来。使用 SysInfo 控件的属性和事件可以分享这种“即插即用”技术带来的好处。例如,在专门为笔记本电脑编写的应用程序中,可以对在 PC 卡插槽中插入或者拔出 PC 卡作出响应。

在运行时,SysInfo 控件是不可见的。

图 2.27 SysInfo 控件



可能的用途
确定操作系统平台和版本


检测桌面和监视器大小和分辨率的改变


检测并管理即插即用设备


监视电池和电源状态
SysInfo 控件的特性
使用 SysInfo 控件,可以监视操作系统提供的信息,并对系统生成的事件作出响应。该控件的特性可分为如下几个部分:

操作系统属性(例如 OSVersion 和 WorkAreaHeight 属性)。


与系统的改变有关的事件(例如 DisplayChanged、TimeChanged 和SettingChanged 事件)。


即插即用事件(例如 DeviceArrival、DeviceRemoveComplete 事件)。


电源状态事件和属性(例如 PowerSuspend 和 PowerResume 事件,以及 ACStatus 和 BatteryStatus 属性)。
下面几节将介绍如何使用上文中描述的事件和属性。

操作系统属性和事件
SysInfo 控件的操作系统属性和事件可以用于检测当前操作系统及其版本、某些全局设置的改变,或者桌面大小和分辨率的改变。

操作系统平台和版本属性
下表列出了可以用于确定当前的操作系统平台和版本的属性:

类别 项目 描述
属性 OSPlatform 返回值标识应用程序运行在什么操作系统上。
OSVersion 返回值标识运行应用程序的操作系统的版本号。
OSBuild 返回值提供运行应用程序的操作系统的编译序号。


详细信息 “SysInfo 应用实例 1:检测当前操作系统和版本”提供了如何使用这些属性的示例。

桌面大小和屏幕分辨率属性和事件
下表列出了专门用于管理桌面和屏幕分辨率的操作系统属性和事件:

类别 项目 描述
属性 ScrollBarSize 返回滚动条宽度的系统量度,以缇为单位。
WorkAreaHeight 返回可见桌面的高度,这是为 Windows 95 和 Windows NT 4.0 任务条作了调整之后的值。
WorkAreaLeft 返回可见桌面左边界的坐标,这是为 Windows 95 和 Windows NT 4.0 任务条作了调整之后的值。
WorkAreaTop 返回可见桌面上边界的坐标,这是为 Windows 95 和 Windows NT 4.0 任务条作了调整之后的值。
WorkAreaWidth 返回可见桌面宽度,这是为 Windows 95 和 Windows NT 4.0 任务条作了调整之后的值。
事件 DisplayChanged 在系统屏幕分辨率发生变化时产生该事件。
SysColorsChanged 当应用程序或控制面板改变了系统颜色设置时产生该事件。


当屏幕的分辨率发生改变时,将触发 DisplayChanged 事件。在 DisplayChanged 事件中使用 WorkAreaHeight、WorkAreaWidth、WorkAreaRight 和 WorkAreaLeft 属性即可确定当前的系统大小(可用的屏幕区域),并进行相应的调整。如果在 Windows 95 或 Windows NT 4.0 中任务条是可见的,则它不被算在可用的屏幕区域之内。

如果用户通过 Windows 95 或 Windows NT 4.0 的控制面板中的“显示”设置改变了滚动条的大小,则有可能需要更新显示区域以正确地放置滚动条。可以在 DisplayChanged 事件中使用 ScrollBarSize 属性进行调整。

详细信息 在“SysInfo 应用实例 2:屏幕大小和分辨率改变时进行相应调整”一节中提供了如何运用这些属性和事件的示例。

管理硬件配置和即插即用事件
如果操作系统支持该特性,则即插即用事件提供了管理系统硬件配置变化的手段。例如,硬件配置改变、系统正在连接或断开,或者 PC 插槽中正在插入或拔出 PC 卡。

下表列出了专门用于管理硬件配置和即插即用设备的 SysInfo 控件事件。

事件 描述
ConfigChanged 当系统的硬件配置文件改变时产生。
ConfigChangeCancelled 当操作系统发送硬件配置变化被取消的消息时产生。
DeviceArrival 当系统中添加新设备时产生。
DeviceEventOther 未映射到通用事件的通告事件。
DevModeChange 当设备模式设置发生改变时产生
DeviceQueryRemove 从系统中删除设备之前产生.
DeviceQueryRemoveFailed 当 DeviceQueryRemove 事件的代码取消设备删除时产生。
DeviceRemoveComplete 在设备被删除之后产生。
DeviceRemovePending 当所有应用程序均同意删除某个设备,且该设备即将被删除时产生。
QueryChangeConfig 请求改变当前的硬件配置文件时产生。


在 Windows 95 中,用 ConfigChanged 事件通告硬件配置文件的改变。在连接和断开时,笔记本电脑通常使用不同的硬件配置文件。例如,在连接时,笔记本电脑也许会连接到网络、外部监视器上,或访问光盘驱动器。

SysInfo 控件的与设备有关的事件提供了硬件配置中的设备改变反馈信息。在硬件添加到系统中之后,应用程序可以动态地使用它。

使用电源状态属性和事件
电源状态事件和属性能用来监视台式或笔记本电脑的交流电或电池电源状态。笔记本电脑通常都实现了电源挂起、电源恢复和电池状态等特性,然而应用程序应该适用于所有类型的计算机。

下表列出了 sysInfo 控件关于电池和电源状态的事件和属性:

类别 项目 描述
属性 ACStatus 返回值指出系统正在使用交流电还是电池电源。
BatteryFullTime 返回值指示电池的完全充电时间。
BatteryLifePercent 返回电池所剩电能占完全充满时的百分比。
BatteryLifeTime 返回值指示电池的剩余使用时间。
BatteryStatus 返回值给出电池的充电状态。
事件 PowerQuerySuspend 在系统电源准备挂起时产生。
PowerResume 当系统结束挂起模式时产生。
PowerStatusChanged 当系统的电源状态变化时产生。
PowerSuspend 在系统即将进入挂起模式之前产生。


在电源挂起时,电源事件可为应用程序提供一定的安全保护。PowerSuspend 事件通知应用程序电源即将被挂起。这样就可以在电源挂起前保存应用程序的状态,或保存尚未存储的文件。

PowerStatusChanged 事件通知交流电和电池电源状态的改变。如果电池能量已经很少,就需要保存数据。
doudoushen 2004-06-25
  • 打赏
  • 举报
回复
用sysinfo 控件试试
wangdongzjk 2004-06-25
  • 打赏
  • 举报
回复
各位,你在200或者xp下插入u盘显示的什么?“可移动磁盘“对吧?但是在98下呢?是“本地磁盘”对吧!我想难道真的是系统的问题?
wangdongzjk 2004-06-25
  • 打赏
  • 举报
回复
to cso(sjxsoft)
我写的程序和你的差不多,在2000下工作正常,但是在98下检测不到u盘。
wangdongzjk 2004-06-25
  • 打赏
  • 举报
回复
to:supergreenbean(超级绿豆.监考ing=False)
你是在nt下吧?
cso 2004-06-25
  • 打赏
  • 举报
回复
Public Declare Function GetLogicalDriveStrings Lib "kernel32" _
Alias "GetLogicalDriveStringsA" _
(ByVal nBufferLength As Long, _
ByVal lpBuffer As String) As Long

Public Declare Function GetDriveType Lib "kernel32" _
Alias "GetDriveTypeA" _
(ByVal nDrive As String) As Long

Public Const DRIVE_REMOVABLE = 2
Public Const DRIVE_FIXED = 3
Public Const DRIVE_REMOTE = 4
Public Const DRIVE_CDROM = 5
Public Const DRIVE_RAMDISK = 6
===========================================================

Option Explicit

Private Sub Form_Load()

Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2

End Sub


Private Sub Command2_Click()

Unload Me

End Sub


Private Sub Command1_Click()

Dim r As Long
Dim allDrives As String
Dim currDrive As String
Dim drvType As String

'get the list of all available drives
allDrives = GetDriveString()

'separate the drive strings and retrieve the drive type
Do Until allDrives = Chr$(0)

'strip off one drive from the string allDrives
currDrive = StripNulls(allDrives)

'get the drive type
drvType = rgbDrvType(currDrive)

Print " " & currDrive & vbTab & drvType

Loop

End Sub


Private Function rgbDrvType(RootPathName) As String

'Passed is the drive to check.
'Returned is the type of drive.
Select Case GetDriveType(RootPathName)
Case 0: rgbDrvType = "The drive type cannot be determined"
Case 1: rgbDrvType = "The root directory does not exist"

Case DRIVE_REMOVABLE:
Select Case Left$(RootPathName, 1)
Case "a", "b": rgbDrvType = "Floppy drive"
Case Else: rgbDrvType = "Removable drive"
End Select

Case DRIVE_FIXED: rgbDrvType = "Hard drive; can not be removed"
Case DRIVE_REMOTE: rgbDrvType = "Remote (network) drive"
Case DRIVE_CDROM: rgbDrvType = "CD-ROM drive"
Case DRIVE_RAMDISK: rgbDrvType = "RAM disk"
End Select

End Function


Private Function GetDriveString() As String

'returns string of available
'drives each separated by a null
Dim sBuffer As String

'possible 26 drives, three characters each, plus trailing null
sBuffer = Space$(26 * 4)

If GetLogicalDriveStrings(Len(sBuffer), sBuffer) Then

'do not trim off trailing null!
GetDriveString = Trim$(sBuffer)

End If

End Function



Private Function StripNulls(startstr As String) As String

'Take a string separated by chr$(0)
'and split off 1 item, shortening the
'string so next item is ready for removal.
Dim pos As Long

pos = InStr(startstr$, Chr$(0))

If pos Then

StripNulls = Mid$(startstr, 1, pos - 1)
startstr = Mid$(startstr, pos + 1, Len(startstr))

End If

End Function
pigpag 2004-06-24
  • 打赏
  • 举报
回复
会检测出FIXED的

用wmi矛盾阿,要么找得到逻辑盘符,要么找得到物理硬盘,但是两者间建立不了映射关系啊~~
supergreenbean 2004-06-24
  • 打赏
  • 举报
回复
? GetDriveType("I:")

DRIVE_REMOVABLE 不行么?
wangdongzjk 2004-06-24
  • 打赏
  • 举报
回复
wmi不行啊!检测到的是硬盘,deviceiocontrol我也试过了,不行。
pigpag 2004-06-19
  • 打赏
  • 举报
回复
试试看用WMI获取硬盘的接口类型……
wangdongzjk 2004-04-29
  • 打赏
  • 举报
回复
怎么没人会吗?
当你的电脑没有光驱如何用U盘重装电脑。hal.dll ........(硬件抽象层). 隐藏 Windows 应用程序处理硬件问题的复杂性 从找一块可以启动的硬盘(与的操作系统一样),“搜索”到hal.dll这个文件,复制到windows root\system32目录下即可 方法一:在命令提示符模式下直接输入“Sfc/scanonce”,检查一下所有的系统文件,如果需要,Windows 会提示插入原始安装光盘,然后重新启动计算机,即可解决问题。 方法二:这可能是由于安装游戏软件的过程中损坏了Windows XP的启动文件boot.ini造成的,因为系统提示hal.dll文件丢失是boot.ini文件丢失或者损坏的典型表现。一般情况下,当出现boot.ini文件损坏的情况时,WindowsXP会自动尝试从c盘启动,就有可能出现上述的问题。 可以通过编辑boot.ini文件来排除此故障。打开其他与本系统安装情况相同的计算机的C:\下的boot.ini文件,然后参照其格式重新编辑受损的boot.ini文件即可。为了系统的安全,最好在修改之前各份一下boot.ini文件,以免造成更太的损失。 方法三:插入xp安装盘重新启动电脑,选择故障恢复控制台。依提示进入Windows dos目录。 在DOS提示符下输入:expand x:\i386\driver.cab /f:hal.dll c:\windows\system32\(x:为光驱盘符.再次利用expand 首先将halaacpi.dll拷贝至c:\windows\system32\,并改名为hal.dll后重新启动电脑,再拷halacpi.dll(因为hal.dll的源文件名是halacpi.dll).改名(ren)后重启,(restart)即可 现象:屏幕显示“因以下文件的损坏或者丢失,Windows无法启动:\system32\hal.dll,请重新安装以上文件”的错误提示(如图1)。是系统引导文件损坏了,可以用故障恢复控制台来修复。   下面操作以 Windows XP Pro 为例,Windows 2000/2003 与此法大同小异。   一、什么是故障恢复控制台   故障恢复控制台是 Windows 2000/XP/2003 操作系统中用于修复系统的工具,它可以启用和禁用系统服务、格式化磁盘、挽救磁盘数据、修复系统故障,是我们无法进入系统(包括安全模式)时修复系统的“法宝”,被用户形象地称之为“救命稻草”。   二、如何进入故障恢复控制台   第一步:按下键盘上的“Del”键进入到BIOS设置程序。在主菜单中选择“Advanced BIOS Features”选项,并按“回车”键进入高级BIOS设置,再通过键盘的上的“↑”、“↓”方向键选择其中的“First Boot Device”选项,再按下“回车”键进入后选中“CDROM”(将第一启动设备设置为光驱)。设置完毕后,按下“F10”键存盘退出即可。   第二步:将 Windows 2000/XP/2003 安装光盘插入光驱,启动计算机,系统会自动以光盘引导,无需用户干预,待到屏幕出现相关提示时,按下键盘上任意键即可看见 Windows XP 的安装程序画面,在提示界面中,按下“R”键选择第二项“要使用‘故障控制台’修复 Windows XP 安装,请按R。”选项即可。   第三步:按下“R”键后,系统会自动检测机器所安装的所有操作系统,并出现登录到哪一个 Windows 的提示,键入欲进入的操作系统的序号即可,示例中键入的是“1”,回车后会提示你键入管理员密码,键入正确的管理员密码并回车,当出现“C:\WINDOWS>”提示符的时侯,故障恢复控制台也就成功启动了。   要使用故障恢复控制台,每次都要翻出安装光盘,从光盘启动,比较麻烦。其实,我们还可以将故障恢复控制台安装到硬盘中,实现从硬盘启动故障恢复控制台。将 Windows 安装光盘放入光驱,然后在“运行”对话框中输入并执行“X:\i386\winnt32.exe/cmdcons”命令,(X为光驱盘符,请自行修改),这时就会弹出 Windows 安装程序对话框,询问你是否将故障恢复控制台安装到硬盘上。点“是”按钮即可将故障恢复控制台安装到硬盘上。重新启动计算机,你就会在多重启动菜单中发现一项名为“Microsoft Windows XP Recovery Console”的选项,通过该选项就可以进入系统故障恢复控制台了。   三、让垂危的系统起死回生   从开机错误提示中我们可以看到是“Hal.dll”文件丢失或损坏造成了系统无法启动,因此,只需从安装光盘中找到同名文件将其释放到原文件所在目录就可以了。安装光盘的“I386”文件夹是一个重要的文件夹,几乎所有的系统级文件全部位于其中。   在故障恢复控制台的命令提示符后依次输入如下命令:   C:\WINDOWS>x: //x为光驱盘符,请自行修改为你的光驱盘符   X:\>CD I386 //切换到光盘的I386文件夹下   X:\>I386>expand hal.dl_C:\WINDOWS\system32\ //将安装光盘I386文件夹中的“hal.dl_”文件释放到“C:\Windows\项式system32\”目录中,当出现“扩充了一个文件”的提示后,表明已经将“hal.dll”文件释放出来,重新启动计算机后,即可使电脑重新启动。“expand”命令是释放文件命令,在 Windows 安装光盘中所有的动态链接库文件为了缩小体积,减少对光盘空间的占用,都是经过特殊压缩的,是以“*.dl_”的形式存在的。要替换系统中丢失或损坏的同名文件,必须用“expand”命令释放到系统才行。   四、故障恢复控制台精彩实例   实例一:无法启动故障   安装有 Windows XP 的机器,系统无法启动,提示“NTLDR is Missing,press any key to restart”。   这主要是由于NTLDR文件丢失或损坏所致,只要从 Windows 2000/XP/Server 2003 安装光盘的I386文件夹中提取出此文件,然后复制到C盘的根目录下覆盖即可。在故障恢复控制台中的命令提示符依次输入以下命令,重启计算机即可修复此故障。   C:\WINDOWS>x:   X:\>CD I386   X:\>I386>COPY NTLDR C:\ //将安装光盘I386文件夹中的NTLDR文件复制到C盘的根目录下   实例二:多系统并存故障   机器安装有 Windows 98/XP,当从屏幕上的多重启动菜单中选择了 Windows 98 之后,出现错误提示:“访问引导扇区文件Multi(0)disk(0)rdisk(0)partition(1)\\BOOT,出现I/O错误”。   这主要是由于找不到启动 Windows 98 启动分区文件 Bootsect.dos 所造成的。我们在安装多操作系统的过程中,一般是先安装 Windows 98,然后再安装高版本的操作系统如 Windows 2000/XP/2003。在安装高版本系统的过程中,安装程序首先将原有的启动分区保存成 Bootsect.dos 文件,然后将自身的启动程序放入启动分区。由于 Bootsect.dos 文件是在安装过程中由安装程序创建的,无法象其它丢失或损坏的文件一样,从安装光盘拷贝覆盖一下完事。   首先在DOS提示符后键入“SYS C:”,传递 Windows 98 的系统文件到C盘。然后,将 Windows 2000/XP/Server 2003 的安装光盘插入光驱,重新启动计算机,从光盘引导系统,当出现欢迎屏幕之后,按两次“R”键,当安装程序运行到修复任务选项的时候,选中“检查启动扇区”选项,然后将光标移动到“继续(执行所选任务)”选项上按回车,按照向导的提示进行直到“安装程序已完成修复”的提示。现在重新启动计算机,故障即可排除。   实例三:显示乱码故障   在系统启动过程中,凡是有中文的地方均显示为乱码,英文可以正常显示。   此问题主要是字库文件 bootfont.bin 文件损坏或丢失造成的,从 Windows 2000/XP/2003 安装光盘的I386文件夹中提取出此文件,复制到C盘根目录下覆盖即可。多操作系统能否正常运转,只需将安装光盘I386文件夹中的 NTLDR、ntdetect.com、Boot.ini、Bootsect.dos、bootfont.bin 这五个文件复制覆盖到C盘根目录下,再将 ntoskrnl.exe、hal.dll 这两个文件复制覆盖到 X:\Windows\System32\ 文件夹下(X为操作系统所在的分区盘符),多重引导故障便不攻自破,实为一劳永逸之举。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧