【已解决】动态获取移动设备盘符问题
本帖最后由 styledream 于 2010-7-6 16:01 编辑以下是获取当前已接入的移动设备的代码,如何让程序正确获取盘符后暂时挂起
并且当多接入一个或几个优盘时自动把盘符更新到下拉列表框中,从而实现动态获取
具体解决方法可参考 9# xsjtxy 的代码,已完美解决此问题,再次感谢~~~#include <GuiConstants.au3>
$gui=GUICreate("获取移动设备",200,200,-1,-1)
Local $DriverLabel = GUICtrlCreateLabel("请选择盘符:", 20, 55)
$DriverCombo = GUICtrlCreateCombo("", 100, 55, 70, 15)
GUISetState()
AdlibRegister("GetRemoveDriver", 2000)
While 1
$eMSG = GUIGetMsg()
Switch $eMSG
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func GetRemoveDriver()
$ver = DriveGetDrive("REMOVABLE")
If Not @error Then ;搜索到移动设备
For $i = 1 To $ver
$Driver = StringUpper(StringLeft($ver[$i], 1))
;将获取的盘符转换成大写并写入到下列控件中
GUICtrlSetData($DriverCombo, $Driver, StringUpper(StringLeft($ver, 1)))
Next
Else
GUICtrlSetData($DriverCombo, "None","None")
EndIf
EndFunc ;==>GetRemoveDriver AdlibUnRegister('GetRemoveDriver')#include <GuiConstants.au3>
$gui = GUICreate("获取移动设备", 200, 200, -1, -1)
Local $DriverLabel = GUICtrlCreateLabel("请选择盘符:", 20, 55)
$DriverCombo = GUICtrlCreateCombo("", 100, 55, 70, 15)
GUISetState()
AdlibRegister("GetRemoveDriver", 2000)
While 1
$eMSG = GUIGetMsg()
Switch $eMSG
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func GetRemoveDriver()
$ver = DriveGetDrive("REMOVABLE")
If Not @error Then ;搜索到移动设备
For $i = 1 To $ver
$Driver = StringUpper(StringLeft($ver[$i], 1))
;将获取的盘符转换成大写并写入到下列控件中
GUICtrlSetData($DriverCombo, $Driver, StringUpper(StringLeft($ver, 1)))
AdlibUnRegister('GetRemoveDriver')
Next
Else
GUICtrlSetData($DriverCombo, "None", "None")
EndIf
EndFunc ;==>GetRemoveDriver 回复 2# 水木子
谢谢 水木子大大 的回复
可能是我的问题没表达清楚,我想在多接入一个U盘时,程序还能自动判断并把盘符更新到下拉列表框中 如果要达到这个效果,那么前面的 AdlibRegister("GetRemoveDriver", 2000) 就不能退出吧! 回复 4# 水木子
嗯,已经把问题更新了,这下应该是表述清楚问题了 “暂时挂起”挂起是多久呢?挂起以后又怎么唤醒呢?
挂起以后有新的设备接入又怎么知道呢?这些都是问题吧!
除非让设备接入时通知程序,程序再做出响应。(不过我不会) 回复 6# 水木子
嗯,想要让设备接入时通知程序,这的确是个让人头痛的问题 回复 6# 水木子
其实不让程序挂起而让它一直判断当前的所有移动设备并更新到下拉列表中也行
只是当我选择了下拉列表中的非最后一个选项时,它定时自动更新后又会把最后一个选项的值赋给下拉列表框了 本帖最后由 xsjtxy 于 2010-7-6 15:39 编辑
;;;;;如果检测到移动设备有增加或者减少,或盘符变更。则重新获取并写入到列表
#include <Array.au3>
#include <GuiConstants.au3>
#include <ComboConstants.au3>
$gui=GUICreate("获取移动设备",200,200,-1,-1)
Local $DriverLabel = GUICtrlCreateLabel("请选择盘符:", 20, 55)
$DriverCombo = GUICtrlCreateCombo("", 100, 55, 70, 15,$CBS_DROPDOWNLIST)
GUISetState()
Dim $ver1
$ver1 = 0
Opt("GUIOnEventMode", 1)
GUISetOnEvent($GUI_EVENT_CLOSE, "exitl")
While 1
GetRemoveDriver()
sleep(1000)
WEnd
Func GetRemoveDriver()
$ver = DriveGetDrive("REMOVABLE")
If Not @error Then ;搜索到移动设备
if _ArrayMax($ver) <> _ArrayMax($ver1) then
GUICtrlSetData($DriverCombo, "")
For $i = 1 To $ver
$Driver = StringUpper(StringLeft($ver[$i], 1))
;将获取的盘符转换成大写并写入到下列控件中
GUICtrlSetData($DriverCombo, $Driver, $Driver)
sleep(10)
Next
$ver1 = $ver
endif
Else
GUICtrlSetData($DriverCombo, "")
GUICtrlSetData($DriverCombo, "None","None")
EndIf
EndFunc ;==>GetRemoveDriver
Func exitl()
exit
EndFunc 回复 8# styledream
哦!这还不简单,判读当前获取到的内容和之前的内容是否一样不就可以啦! 只增加了19,20,21这三行。未测试#include <GuiConstants.au3>
Local $alldrive=
$gui = GUICreate("获取移动设备", 200, 200, -1, -1)
Local $DriverLabel = GUICtrlCreateLabel("请选择盘符:", 20, 55)
$DriverCombo = GUICtrlCreateCombo("", 100, 55, 70, 15)
GUISetState()
AdlibRegister("GetRemoveDriver", 2000)
While 1
$eMSG = GUIGetMsg()
Switch $eMSG
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func GetRemoveDriver()
$alldrive=DriveGetDrive("all")
If $alldrive<>$alldrive Then
$alldrive=$alldrive
$ver = DriveGetDrive("REMOVABLE")
If Not @error Then ;搜索到移动设备
For $i = 1 To $ver
$Driver = StringUpper(StringLeft($ver[$i], 1))
;将获取的盘符转换成大写并写入到下列控件中
GUICtrlSetData($DriverCombo, $Driver, StringUpper(StringLeft($ver, 1)))
;AdlibUnRegister('GetRemoveDriver')
Next
Else
GUICtrlSetData($DriverCombo, "None", "None")
EndIf
EndIf
EndFunc ;==>GetRemoveDriver 水木兄,见笑了。 回复 11# 3mile
当接入多个优盘时,它总会把最后接入的盘符作为下拉列表框的当前默认值
9# xsjtxy 的代码已完美解决此问题 回复 10# 水木子
嗯,我是想到了这种办法,只是做不出来,哈哈,我的技术还有待提高
9# xsjtxy 的代码已完美解决我提出的问题
页:
[1]