VB 如何监视插入移动存储设备?

huangyahai 2008-10-11 10:07:02
高手指点下
当插入移动存储设备时,如何马上监视到
...全文
232 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bob008 2008-10-17
  • 打赏
  • 举报
回复
老张的东西好猛。。。 MARK
rpbensr 2008-10-16
  • 打赏
  • 举报
回复
顶!
tanjiunnya 2008-10-14
  • 打赏
  • 举报
回复
lz还不结帐啊?
SYSSZ 2008-10-13
  • 打赏
  • 举报
回复
'工程-引用-选中Microsoft Scripting Runtime-确定
Private Sub Timer1_Timer()
Dim fs, vDrv
Set fs = CreateObject("scripting.filesystemobject")
For Each vDrv In fs.Drives
If vDrv.DriveType = Removable Then
MsgBox "有移动存储插入!"
Timer1.Enabled = False
Exit Sub
End If
Next
End Sub
zz005 2008-10-13
  • 打赏
  • 举报
回复
研究下,还没看过这个.
tanjiunnya 2008-10-13
  • 打赏
  • 举报
回复

'Place a listbox (Listbox1) on a form (Form1) and add this code In a form
Option Explicit

Dim hDevNotify As Long

Private Sub Form_Load()
Call DoRegisterDeviceInterface(Me.hWnd, hDevNotify)
glngPrevWndProc = GetWindowLong(Me.hWnd, GWL_WNDPROC)
SetWindowLong Me.hWnd, GWL_WNDPROC, AddressOf MyWindowProc
End Sub

Private Sub Form_Unload(Cancel As Integer)
If hDevNotify <> 0 Then
Call UnregisterDeviceNotification(hDevNotify)
End If
'pass control back to previous windows
SetWindowLong Me.hWnd, GWL_WNDPROC, glngPrevWndProc
End Sub
tanjiunnya 2008-10-13
  • 打赏
  • 举报
回复

Public Function MyWindowProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Dim dbHdr As DEV_BROADCAST_HDR

Dim dbDdb As DEV_BROADCAST_DEVICEINTERFACE2

Select Case Msg
Case WM_DEVICECHANGE

Form1.List1.AddItem "WM_DEVICECHANGE " & Msg

Select Case wParam

Case DBT_CONFIGCHANGECANCELED
Form1.List1.AddItem "wParam = DBT_CONFIGCHANGECANCELED"

Case DBT_CONFIGCHANGED
Form1.List1.AddItem "wParam = DBT_CONFIGCHANGED"

Case DBT_CUSTOMEVENT
Form1.List1.AddItem "wParam = DBT_CUSTOMEVENT"

Case DBT_DEVICEARRIVAL
Form1.List1.AddItem "wParam = DBT_DEVICEARRIVAL"

CopyMemory dbHdr, ByVal (lParam), Len(dbHdr)

Select Case dbHdr.dbch_devicetype
Case DBT_DEVTYP_OEM
Form1.List1.AddItem "Device Type: DBT_DEVTYP_OEM"

Case DBT_DEVTYP_DEVNODE
Form1.List1.AddItem "Device Type: DBT_DEVTYP_DEVNODE"

Case DBT_DEVTYP_VOLUME
Form1.List1.AddItem "Device Type: DBT_DEVTYP_VOLUME"

Case DBT_DEVTYP_PORT
Form1.List1.AddItem "Device Type: DBT_DEVTYP_PORT"

Case DBT_DEVTYP_NET
Form1.List1.AddItem "Device Type: DBT_DEVTYP_NET"

Case DBT_DEVTYP_DEVICEINTERFACE
Form1.List1.AddItem "Device Type: DBT_DEVTYP_DEVICEINTERFACE"

CopyMemory dbDdb, ByVal (lParam), ByVal (dbHdr.dbch_size)

Form1.List1.AddItem "Device Name: " & Mid(dbDdb.dbcc_name, 1, InStr(dbDdb.dbcc_name, Chr(0)))

Case DBT_DEVTYP_HANDLE
Form1.List1.AddItem "Device Type: DBT_DEVTYP_HANDLE"

Case Else
Form1.List1.AddItem "Device Type unknown: " & CStr(dbHdr.dbch_devicetype)

End Select


Case DBT_DEVICEQUERYREMOVE
Form1.List1.AddItem "wParam = DBT_DEVICEQUERYREMOVE"

Case DBT_DEVICEQUERYREMOVEFAILED
Form1.List1.AddItem "wParam = DBT_DEVICEQUERYREMOVEFAILED"

Case DBT_DEVICEREMOVECOMPLETE
Form1.List1.AddItem "wParam = DBT_DEVICEREMOVECOMPLETE"

Case DBT_DEVICEREMOVEPENDING
Form1.List1.AddItem "wParam = DBT_DEVICEREMOVEPENDING"

Case DBT_DEVICETYPESPECIFIC
Form1.List1.AddItem "wParam = DBT_DEVICETYPESPECIFIC"

Case DBT_DEVNODES_CHANGED
Form1.List1.AddItem "wParam = DBT_DEVNODES_CHANGED"

Case DBT_QUERYCHANGECONFIG
Form1.List1.AddItem "wParam = DBT_QUERYCHANGECONFIG"

Case DBT_USERDEFINED
Form1.List1.AddItem "wParam = DBT_USERDEFINED"

Case Else
Form1.List1.AddItem "wParam = unknown = " & wParam

End Select

End Select

' pass the rest messages onto VB's own Window Procedure
MyWindowProc = CallWindowProc(glngPrevWndProc, hWnd, Msg, wParam, lParam)
End Function


Public Function DoRegisterDeviceInterface(hWnd As Long, ByRef hDevNotify As Long) As Boolean

Dim NotificationFilter As DEV_BROADCAST_DEVICEINTERFACE

NotificationFilter.dbcc_size = Len(NotificationFilter)
NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE

hDevNotify = RegisterDeviceNotification(hWnd, NotificationFilter, DEVICE_NOTIFY_WINDOW_HANDLE Or DEVICE_NOTIFY_ALL_INTERFACE_CLASSES)

If hDevNotify = 0 Then
MsgBox "RegisterDeviceNotification failed: " & CStr(Err.LastDllError), vbOKOnly
DoRegisterDeviceInterface = False
Exit Function
End If

DoRegisterDeviceInterface = True
End Function
tanjiunnya 2008-10-13
  • 打赏
  • 举报
回复

'In a module
Option Explicit

Public Type GUID
Data1(1 To 4) As Byte
Data2(1 To 2) As Byte
Data3(1 To 2) As Byte
Data4(1 To 8) As Byte
End Type

Public Type DEV_BROADCAST_DEVICEINTERFACE
dbcc_size As Long
dbcc_devicetype As Long
dbcc_reserved As Long
dbcc_classguid As GUID
dbcc_name As Long
End Type

Public Type DEV_BROADCAST_DEVICEINTERFACE2
dbcc_size As Long
dbcc_devicetype As Long
dbcc_reserved As Long
dbcc_classguid As GUID
dbcc_name As String * 1024
End Type

Public Declare Function RegisterDeviceNotification Lib "user32.dll" _
Alias "RegisterDeviceNotificationA" ( _
ByVal hRecipient As Long, _
NotificationFilter As Any, _
ByVal Flags As Long) As Long

Public Declare Function UnregisterDeviceNotification Lib "user32.dll" _
(ByVal hRecipient As Long) As Long

Public Const DEVICE_NOTIFY_ALL_INTERFACE_CLASSES = &H4
Public Const DEVICE_NOTIFY_WINDOW_HANDLE = 0



Public Declare Sub CopyMemory Lib "kernel32" Alias _
"RtlMoveMemory" (Destination As Any, Source As Any, _
ByVal Length As Long)

Public Declare Function CallWindowProc Lib "user32" _
Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, _
ByVal hWnd As Long, _
ByVal Msg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long

Public Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" (ByVal hWnd As Long, _
ByVal nIndex As Long) As Long

Public Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" (ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Public Const GWL_WNDPROC = (-4)
Public Const WM_DEVICECHANGE = &H219
Public Const UNSAFE_REMOVE = &H1C

Public glngPrevWndProc As Long

Public Type DEV_BROADCAST_HDR
dbch_size As Long
dbch_devicetype As Long
dbch_reserved As Long
End Type

Public Const DBT_CONFIGCHANGECANCELED As Long = 25
Public Const DBT_CONFIGCHANGED As Long = 24
Public Const DBT_CUSTOMEVENT As Long = 32744
Public Const DBT_DEVICEARRIVAL As Long = 32768
Public Const DBT_DEVICEQUERYREMOVE As Long = 32769
Public Const DBT_DEVICEQUERYREMOVEFAILED As Long = 32770
Public Const DBT_DEVICEREMOVECOMPLETE As Long = 32772
Public Const DBT_DEVICEREMOVEPENDING As Long = 32771
Public Const DBT_DEVICETYPESPECIFIC As Long = 32773
Public Const DBT_DEVNODES_CHANGED As Long = 7
Public Const DBT_QUERYCHANGECONFIG As Long = 23
Public Const DBT_USERDEFINED As Long = 65535

Public Const DBT_DEVTYP_OEM As Long = 0
Public Const DBT_DEVTYP_DEVNODE As Long = 1
Public Const DBT_DEVTYP_VOLUME As Long = 2
Public Const DBT_DEVTYP_PORT As Long = 3
Public Const DBT_DEVTYP_NET As Long = 4
Public Const DBT_DEVTYP_DEVICEINTERFACE As Long = 5
Public Const DBT_DEVTYP_HANDLE As Long = 6

chenhui530 2008-10-12
  • 打赏
  • 举报
回复
其实CSDN这样的帖子N多了你搜索下吧
我给你的是消息常量只需要弄个subclass就可以了
huangyahai 2008-10-12
  • 打赏
  • 举报
回复
楼上的大哥能不能详细点说明?
我是初学者,不明白
谢谢

chenhui530 2008-10-11
  • 打赏
  • 举报
回复
添加
DBT_DEVICEARRIVAL
移除
DBT_DEVICEREMOVECOMPLETE
chenhui530 2008-10-11
  • 打赏
  • 举报
回复
添加
DBT_DEVICEARRIVAL
移除
DBT_DEVICEREMOVECOMPLETE
内容概要:本文针对考虑算力负荷时空迁移特性的多微电网与共享储能系统的协同优化调度问题展开研究,并提供了完整的Matlab代码实现。研究构建了融合算力负荷动态迁移特征的数学优化模型,通过引入共享储能机制,实现多微电网间的能量互济与资源协同,有效提升系统对分布式能源波动性和负荷不确定性的适应能力。文中采用先进的优化算法求解该调度模型,重点解决了算力任务在时空维度上的灵活调配与电力供需平衡之间的耦合关系,旨在提高综合能源系统的运行经济性、可靠性与灵活性。所提出的方法为未来能源互联网背景下电-算协同管理提供了理论支持与技术路径。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力的科研人员、高校研究生,尤其适用于从事微电网运行、共享储能配置、综合能源系统优化以及电-算融合等领域研究的专业技术人员。; 使用场景及目标:①开展多微电网与共享储能系统的协同调度策略设计与仿真验证;②支撑高比例可再生能源接入下的新型电力系统优化运行研究;③为考虑算力迁移的数据中心与电网协同调度提供建模与算法参考;④作为高水平学术论文撰写或学位课题研究的技术支撑与代码复现平台。; 阅读建议:建议读者结合Matlab代码与相关学术文献深入研读,重点关注目标函数构建、约束条件设定及求解器调用逻辑,可在现有模型基础上拓展多时间尺度优化、不确定性建模(如鲁棒优化、随机规划)或加入实际工程约束进行二次开发与深化研究。

1,488

社区成员

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

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