找回密码
 加入
搜索
查看: 5871|回复: 13

[系统综合] 【已解决】动态获取移动设备盘符问题

  [复制链接]
发表于 2010-7-6 13:43:19 | 显示全部楼层 |阅读模式
本帖最后由 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[0]
                        $Driver = StringUpper(StringLeft($ver[$i], 1))
                        ;将获取的盘符转换成大写并写入到下列控件中
                        GUICtrlSetData($DriverCombo, $Driver, StringUpper(StringLeft($ver[1], 1)))
                Next
        Else
                GUICtrlSetData($DriverCombo, "None","None")
        EndIf
EndFunc   ;==>GetRemoveDriver

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-7-6 13:48:51 | 显示全部楼层
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[0]
                        $Driver = StringUpper(StringLeft($ver[$i], 1))
                        ;将获取的盘符转换成大写并写入到下列控件中
                        GUICtrlSetData($DriverCombo, $Driver, StringUpper(StringLeft($ver[1], 1)))
                        AdlibUnRegister('GetRemoveDriver')
                Next
        Else
                GUICtrlSetData($DriverCombo, "None", "None")
        EndIf
EndFunc   ;==>GetRemoveDriver

评分

参与人数 2金钱 +30 收起 理由
afan + 20
styledream + 10 谢谢帮忙

查看全部评分

 楼主| 发表于 2010-7-6 13:59:19 | 显示全部楼层
回复 2# 水木子

谢谢 水木子大大 的回复
可能是我的问题没表达清楚,我想在多接入一个U盘时,程序还能自动判断并把盘符更新到下拉列表框中
发表于 2010-7-6 14:03:56 | 显示全部楼层
如果要达到这个效果,那么前面的 AdlibRegister("GetRemoveDriver", 2000) 就不能退出吧!
 楼主| 发表于 2010-7-6 14:05:39 | 显示全部楼层
回复 4# 水木子

嗯,已经把问题更新了,这下应该是表述清楚问题了
发表于 2010-7-6 14:12:14 | 显示全部楼层
“暂时挂起”挂起是多久呢?挂起以后又怎么唤醒呢?

挂起以后有新的设备接入又怎么知道呢?这些都是问题吧!

除非让设备接入时通知程序,程序再做出响应。(不过我不会)
 楼主| 发表于 2010-7-6 14:44:37 | 显示全部楼层
回复 6# 水木子

嗯,想要让设备接入时通知程序,这的确是个让人头痛的问题
 楼主| 发表于 2010-7-6 14:49:03 | 显示全部楼层
回复 6# 水木子

其实不让程序挂起而让它一直判断当前的所有移动设备并更新到下拉列表中也行
只是当我选择了下拉列表中的非最后一个选项时,它定时自动更新后又会把最后一个选项的值赋给下拉列表框了
发表于 2010-7-6 14:49:56 | 显示全部楼层
本帖最后由 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[1]
$ver1[0] = 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[0]
                        $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

评分

参与人数 2金钱 +30 贡献 +2 收起 理由
afan + 20
styledream + 10 + 2 感谢分享,已测试成功^_^

查看全部评分

发表于 2010-7-6 14:59:30 | 显示全部楼层
回复 8# styledream
哦!这还不简单,判读当前获取到的内容和之前的内容是否一样不就可以啦!
发表于 2010-7-6 15:14:36 | 显示全部楼层
只增加了19,20,21这三行。未测试
#include <GuiConstants.au3>
Local $alldrive[2]=[0,0]
$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[1]=DriveGetDrive("all")
        If $alldrive[1]<>$alldrive[0] Then 
                $alldrive[0]=$alldrive[1]
        $ver = DriveGetDrive("REMOVABLE")
        If Not @error Then ;搜索到移动设备
                For $i = 1 To $ver[0]
                        $Driver = StringUpper(StringLeft($ver[$i], 1))
                        ;将获取的盘符转换成大写并写入到下列控件中
                        GUICtrlSetData($DriverCombo, $Driver, StringUpper(StringLeft($ver[1], 1)))
                        ;AdlibUnRegister('GetRemoveDriver')
                Next
        Else
                GUICtrlSetData($DriverCombo, "None", "None")
                EndIf
        EndIf
EndFunc   ;==>GetRemoveDriver

评分

参与人数 3金钱 +50 贡献 +1 收起 理由
afan + 20
styledream + 10 + 1 谢谢帮忙
水木子 + 20 嘿嘿!

查看全部评分

发表于 2010-7-6 15:45:05 | 显示全部楼层
水木兄,见笑了。
 楼主| 发表于 2010-7-6 15:51:03 | 显示全部楼层
回复 11# 3mile

当接入多个优盘时,它总会把最后接入的盘符作为下拉列表框的当前默认值
9# xsjtxy 的代码已完美解决此问题
 楼主| 发表于 2010-7-6 15:53:07 | 显示全部楼层
回复 10# 水木子

嗯,我是想到了这种办法,只是做不出来,哈哈,我的技术还有待提高
9# xsjtxy 的代码已完美解决我提出的问题
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-11 05:06 , Processed in 0.089314 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表