CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  API

关于Hook

楼主achinacracker()2004-12-01 00:29:44 在 VB / API 提问

可不可以用HOOK来检测光驱里面是否有盘?如果可以该怎样实现? 问题点数:100、回复次数:15Top

1 楼AprilSong(X)回复于 2004-12-01 00:35:49 得分 1

这个可以不用Hook吧~Top

2 楼AprilSong(X)回复于 2004-12-01 00:44:30 得分 1

比如这样~  
   
  Private   Sub   Form_Click()  
          If   TestDrive("j:")   Then  
                  MsgBox   "有盘"  
          Else  
                  MsgBox   "无盘"  
          End   If  
  End   Sub  
   
  Private   Function   TestDrive(Drive   As   String)   As   Boolean  
          On   Error   Resume   Next  
           
          Dir   Drive  
          TestDrive   =   (Err.Number   =   0)  
           
          Err.Clear  
  End   FunctionTop

3 楼homezj(小吉)回复于 2004-12-01 01:52:43 得分 1

用HOOK来检测光驱里面何时放入或取出光盘倒有点像!而检测是否有盘,则有点文不对题,刚才发现“多线程”是个时髦的词,看来现在“Hook”也是了。Top

4 楼achinacracker()回复于 2004-12-01 12:07:49 得分 0

不是:  
  Private   Sub   Form_Click()  
          If   TestDrive("j:")   Then  
                  MsgBox   "有盘"  
          Else  
                  MsgBox   "无盘"  
          End   If  
  End   Sub  
   
  而是随时检测Top

5 楼myjian(嗷嗷叫的老马--很不顺.....最近.....很不顺.........)回复于 2004-12-01 21:47:23 得分 1

http://community.csdn.net/Expert/TopicView1.asp?id=3403601  
   
  看看这个吧.人家是早发了的了,不过好像还没有解决的办法.Top

6 楼happy_sea(开心海(数据读取中,请稍候......))回复于 2004-12-01 21:58:25 得分 1

思路:  
  1、确定光驱的盘符;  
  2、  
  Private   Sub   Command1_Click()  
          On   Error   GoTo   NoDisk  
          If   Dir("h:\*.*")   <>   ""   Then   MsgBox   "有盘!"  
          Exit   Sub  
  NoDisk:  
          MsgBox   "无盘!"  
  End   Sub  
  Top

7 楼happy_sea(开心海(数据读取中,请稍候......))回复于 2004-12-01 22:00:14 得分 1

以上假定光驱盘符为H,用Dir命令如果出错说明无盘,反之有盘。Top

8 楼achinacracker()回复于 2004-12-01 23:58:04 得分 0

我不管门开没看,我只是想随时检测光驱,看里面有没有光盘,不想用TIMER控件Top

9 楼myjian(嗷嗷叫的老马--很不顺.....最近.....很不顺.........)回复于 2004-12-06 00:13:38 得分 1

开心海朋友,建议先看一下我发的那个地址!那里面已经讨论得相当清楚了!!Top

10 楼happy_sea(开心海(数据读取中,请稍候......))回复于 2004-12-06 09:32:59 得分 1

“检测光驱里面是否有盘”,这跟仓门关没关有啥关系?当然是关着的时候了,如果门开着这个问题还有意义吗?开着的时候还要检测,恐怕要在光驱托盘上加个计重装置吧,晕!Top

11 楼happy_sea(开心海(数据读取中,请稍候......))回复于 2004-12-06 09:38:19 得分 1

另外,门开着跟没有盘这两种情况对你的要求来说,有什么差别吗?Top

12 楼happy_sea(开心海(数据读取中,请稍候......))回复于 2004-12-06 09:40:18 得分 0

不过,要想实现实时检测倒不是一件容易的事。。。Top

13 楼achinacracker()回复于 2004-12-06 13:33:37 得分 0

他的问题是:判断光驱门是开还是关  
  但我只管光驱门关着的时候里面有没有光盘Top

14 楼HtoFire(冬天里的一把火)回复于 2004-12-16 16:45:01 得分 1

Hook不是万能的,这个好像Hook也办不到吧。Top

15 楼fanzai(帆仔)回复于 2004-12-17 05:54:01 得分 90

当程序刚刚运行的时候,肯定要直接检查一下管区是否有盘。前面几位老兄已经说了直接的方法,主要就是用dir来判断。  
  关键是程序运行后,怎样不通过timer实现及时地知道什么时候可能有盘进入。下面的程序可以实现!  
   
   
  在模块中写入:  
   
  Public   Const   GWL_WNDPROC   =   (-4)  
  Public   Const   WM_DEVICECHANGE   As   Long   =   &H219  
  Public   Declare   Function   SetWindowLong   Lib   "user32.dll"   Alias   "SetWindowLongA"   (ByVal   hwnd   As   Long,   ByVal   nIndex   As   Long,   ByVal   dwNewLong   As   Long)   As   Long  
  Public   Declare   Function   CallWindowProc   Lib   "user32.dll"   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   lpPrevWndProc   As   Long  
   
  Function   WindowProc(ByVal   hw   As   Long,   ByVal   uMsg   As   Long,   ByVal   wParam   As   Long,   ByVal   lParam   As   Long)   As   Long  
          If   uMsg   =   WM_DEVICECHANGE   Then  
                  If   wParam   And   4   Then  
                          MsgBox   "光驱打开了!肯定没盘!"  
                  Else  
                          MsgBox   "光驱关上了,有待检查!"  
                  End   If  
          End   If  
          WindowProc   =   CallWindowProc(lpPrevWndProc,   hw,   uMsg,   wParam,   lParam)  
  End   Function  
   
   
  在窗体中写入:  
  Private   Sub   Form_Load()  
          lpPrevWndProc   =   SetWindowLong(Me.hwnd,   GWL_WNDPROC,   AddressOf   WindowProc)  
  End   Sub  
   
  Private   Sub   Form_Unload(Cancel   As   Integer)  
          SetWindowLong   Me.hwnd,   GWL_WNDPROC,   lpPrevWndProc  
  End   Sub  
  Top

相关问题

  • HOOK
  • HOOK
  • "Hook API"
  • hook,hook,又见hook 高分请教
  • 请教api hook(api hook by LiuYang)!
  • Hook的制作
  • hook问题?
  • hook问题<2>?
  • 关于hook
  • 有关HOOK

关键词

  • 检测
  • 光驱
  • lpprevwndproc
  • testdrive
  • msgbox
  • byval
  • 门开
  • hook
  • umsg
  • 光盘

得分解答快速导航

  • 帖主:achinacracker
  • AprilSong
  • AprilSong
  • homezj
  • myjian
  • happy_sea
  • happy_sea
  • myjian
  • happy_sea
  • happy_sea
  • HtoFire
  • fanzai

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo