自制弹出光驱托盘的DLL

回答|共 23 个

孤星119 发表于 2021-4-13 15:44:51| 字数 165 | 显示全部楼层

legs+ 发表于 2021-4-13 15:41
[DllImport(@"C:\FASM\DLL\CDTRAY\CDTRAY.DLL")]
这段代码是什么意思

因为DLL的关系,无法使用using System.Media....或imports System......那样使用,必须用那段代码来“导入”(中文术语有限

legs+ 发表于 2021-4-13 15:46:04| 字数 0 | 显示全部楼层

simonzhd 发表于 2021-4-13 19:30:03| 字数 25 | 显示全部楼层

不错,就是应用场景不多了,因为很多电脑都不用光驱了

点评

哈哈,谢谢你的反馈。  发表于 2021-4-13 19:39

james007 发表于 2021-4-14 10:52:09| 字数 4 | 显示全部楼层

我有光驱

点评

哦哦  发表于 2021-4-20 00:01
人生是一部书

willsonlincake 发表于 2022-4-3 15:01:44| 字数 16 来自手机 | 显示全部楼层

牛逼,还可以做个弹出U盘的DLL

willsonlincake 发表于 2022-5-1 18:38:50| 字数 195 | 显示全部楼层

感谢分享,后期可以开发一个类似Nero的光盘刻录软件.
不过我想挑战极限,看看Python是否也能开发光盘刻录软件.
老版本的Pygame也支持弹出光盘,现在取消了.
  1. import pygame.cdrom as cdrom
  2. cdrom.init()
  3. cd = cdrom.CD(0) # 0 = first cdrom device
  4. cd.init()
  5. cd.eject()
  6. cd.quit()
  7. cdrom.quit()
复制代码

Starrry 发表于 2022-5-1 18:43:35| 字数 93 | 显示全部楼层

willsonlincake 发表于 2022-4-3 15:01
牛逼,还可以做个弹出U盘的DLL

现在才看到这贴,那个DLL只是用Win32 API而已,根本没有涉及到底层和硬件I/O.....

Starrry 发表于 2022-5-1 18:45:44| 字数 1,060 | 显示全部楼层

DLL 源码如下:

  1. format PE GUI 4.0 DLL
  2. entry DllEntryPoint

  3. include 'win32a.inc'

  4. section '.data' readable executable

  5. _cmd_open  db 'open cdaudio',0
  6. _cmd_eject db 'set cdaudio door open',0
  7. _cmd_play  db 'play cdaudio',0
  8. _cmd_stop  db 'stop cdaudio',0
  9. _cmd_close db 'close cdaudio',0

  10. section '.code' code readable executable

  11. proc DllEntryPoint hinstDLL,fdwReason,lpvReserved
  12.         mov     eax, TRUE
  13.         ret
  14. endp

  15. proc Eject
  16.         invoke  mciSendString,_cmd_open,0,0,0
  17.         invoke  mciSendString,_cmd_eject,0,0,0
  18.         invoke  mciSendString,_cmd_close,0,0,0
  19.         ret
  20. endp

  21. proc Play
  22.         ;invoke  mciSendString,_cmd_open,0,0,0
  23.         invoke  mciSendString,_cmd_play,0,0,0
  24.         ret
  25. endp

  26. proc Stop
  27.         invoke  mciSendString,_cmd_stop,0,0,0
  28.         ;invoke  mciSendString,_cmd_close,0,0,0
  29.         ret
  30. endp

  31. section '.idata' import data readable writeable

  32. library kernel32,'KERNEL32.DLL',\
  33.          user32,'USER32.DLL',\
  34.          winmm,'WINMM.DLL'

  35. import kernel32,\
  36.         ExitProcess,'ExitProcess'

  37. import user32,\
  38.         MessageBoxA,'MessageBoxA'

  39. import winmm,\
  40.         mciSendString,'mciSendStringA'

  41. section '.edata' export data readable

  42.   export 'CDTRAY.DLL',\
  43.          Eject, 'Eject',\
  44.          Play, 'Play',\
  45.          Stop, 'Stop'

  46. section '.reloc' fixups data readable discardable

  47.   if $=$$
  48.     dd 0,8              ; if there are no fixups, generate dummy entry
  49.   end if
  50.          
复制代码

willsonlincake 发表于 2022-5-1 18:47:29| 字数 38 | 显示全部楼层


收藏了 正好用到

Starrry 发表于 2022-5-1 18:48:42| 字数 167 | 显示全部楼层

willsonlincake 发表于 2022-5-1 18:38
感谢分享,后期可以开发一个类似Nero的光盘刻录软件.
不过我想挑战极限,看看Python是否也能开发光盘刻录软件 ...

有前途!那个DLL源码内的mciSendString(WINMM.DLL) 和你的这个Pygame(虽然取消了)类似,其实都是应用层面的代码了,没有什么困难。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐