TO: DevilXelloss,对于如何知道 CD-ROM 的托盘状态(打开/关闭)的一点意见!

HowardOK 2002-02-10 12:43:16
我还是一个菜鸟吧!被CSDN的等级之分而限制我不能在高手区发言!
对于你的问题我的意见如下,若然你觉得对你无帮助的话就算了,不要笑我,因为我还是一个菜鸟呀!!!!

其实这样也可以呀!
先用 mciSendString 关闭光驱,然后捕捉光驱的动作,如果它动作了就算了,如果它没动作,就执行打开的命令。我在技术区对你的问题已经讲过捕捉光驱动作的了!但对于 wjq(b_wind)所提到的非法操作,我就不知了,你试试吧!
这样应该比你的好一点点!
...全文
27 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
skydg 2002-02-10
  • 打赏
  • 举报
回复
捕捉光驱的什么动作?
如何捕捉?
HowardOK 2002-02-10
  • 打赏
  • 举报
回复
捕捉光驱的动作:

在窗体中的代码:
Option Explicit

Private Sub Form_Load()
prevWndProc = GetWindowLong(Me.hWnd, GWL_WNDPROC)
SetWindowLong Me.hWnd, GWL_WNDPROC, AddressOf WndProc
End Sub

Private Sub Form_Unload(Cancel As Integer)
SetWindowLong Me.hWnd, GWL_WNDPROC, prevWndProc
End Sub

建立一模块,代码如下:

Option Explicit
Public Const WM_DEVICECHANGE& = 537&
Public Const DBT_DEVICEREMOVECOMPLETE& = 32772
Public Const DBT_DEVICEARRIVAL& = 32768

Public Const GWL_WNDPROC = (-4)

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
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public prevWndProc As Long

Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_DEVICECHANGE Then MsgBox "OK" '这个是光驱状态发生变化是产生的
If wParam = DBT_DEVICEREMOVECOMPLETE Then MsgBox "1" '这个是光驱弹开时产生的
If wParam = DBT_DEVICEARRIVAL Then MsgBox "2"  '这个是光驱关上时产生的
WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)
End Function在窗体中的代码:
Option Explicit

Private Sub Form_Load()
prevWndProc = GetWindowLong(Me.hWnd, GWL_WNDPROC)
SetWindowLong Me.hWnd, GWL_WNDPROC, AddressOf WndProc
End Sub

Private Sub Form_Unload(Cancel As Integer)
SetWindowLong Me.hWnd, GWL_WNDPROC, prevWndProc
End Sub

建立一模块,代码如下:

Option Explicit
Public Const WM_DEVICECHANGE& = 537&
Public Const DBT_DEVICEREMOVECOMPLETE& = 32772
Public Const DBT_DEVICEARRIVAL& = 32768

Public Const GWL_WNDPROC = (-4)

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
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public prevWndProc As Long

Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_DEVICECHANGE Then MsgBox "OK" '这个是光驱状态发生变化是产生的
If wParam = DBT_DEVICEREMOVECOMPLETE Then MsgBox "1" '这个是光驱弹开时产生的
If wParam = DBT_DEVICEARRIVAL Then MsgBox "2"  '这个是光驱关上时产生的
WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)
End Function

742

社区成员

发帖
与我相关
我的任务
社区描述
VB 版八卦、闲侃,联络感情地盘,禁广告帖、作业帖
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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