[译]from https://docs.microsoft.com/en-us/windows/win32/shell/how-to-register-a-handler-for-a-device-event
如何为设备事件注册Handler
- Handlers 定义了 AutoPlay 的软件部分. 他们软件图标和名字, 同时还有COM组件用来初始化以用来响应事件. 每一个Handler 对于特定的事件都写一个注册表在 EventHandler key下. 当事件到了就会调用.
Instructions
Handlers 和他们关联的事件定义在 AutoplayHandlers\Handlers 下. 子键不通,取决于系共同是否能直接读取设备或者设备提供内容通过合理的接口.
下面的例子展示一个设备的Handler 像mp3播放器那样,我们叫他MyHandler.他提供了内容对系统,通过专有的接口
HKEY_LOCAL_MACHINE or HKEY_CURRENT_USER
SOFTWARE
Microsoft
Windows
CurrentVersion
Explorer
AutoplayHandlers
Handlers
MyHandler
Action [REG_SZ] = Play music
CLSID [REG_SZ] = {a51f2ed3-634e-4a97-9d55-efcf08e7b32f}
DefaultIcon [REG_EXPAND_SZ] = %ProgramFiles%\Windows Media Player\wmplayer.exe,0
InitCmdLine [REG_SZ] = /Play
ProgID [REG_SZ] = WMP.PlayMusicFiles
Provider [REG_SZ] = Windows Media Player
虽然例子中有 ProgID 和 CLSID value, 他们是不相容的. 推荐 ProgID . 无论哪一个都应该指向一个 COM 组件来实现 IHWEventHandler 接口.
Action值可以是字面的值如 "Play music" 也可以是文件的资源字符串如 @%systemroot%\System32\wiaacmgr.exe,-276 这样. Provider也是一样的. 自动播放时 会将他们组合展示 比如例子的这个会展示成 "Play music using Windows Media Player."
DefaultIcon 是图标 .ico 文件或者二进制资源文件后面那个数就是icon在文件中资源的序号 ,如果是负数是资源ID建议用负数.
InitCmdLine 直接传递给IHWEventHandler::Initialize 在其他的方法调用前.
下面的例子再次展示如CD-ROM 以及其他可移动磁盘.
HKEY_LOCAL_MACHINE or HKEY_CURRENT_USER
SOFTWARE
Microsoft
Windows
CurrentVersion
Explorer
AutoplayHandlers
Handlers
MyHandler
Action [REG_SZ] = @%systemroot%\System32\wiaacmgr.exe,-276
DefaultIcon [REG_EXPAND_SZ] = %systemroot%\System32\wiaacmgr.exe,-2
InvokeProgID [REG_SZ] = WIA.AutoPlayDropHandler
InvokeVerb [REG_SZ] = open
Provider [REG_SZ] = @%systemroot%\System32\wiaacmgr.exe,-101
InvokeProgID 和 InvokeVerb 替换了 CLSID, InitCmdLine, 和 ProgID.
InvokeProgID 和 InvokeVerb 匹配 HKEY_CLASSES_ROOT下的 键名字 . 如下.
HKEY_CLASSES_ROOT
WIA.AutoplayDropHandler
shell
open
DropTarget
Clsid = {F1ABE2B5-C073-4dba-B6EB-FD7A5111DD8F}
CoCreateInstance 会用这个CLSID 实现应用程序.
用以上2种方法定义后, 还需要注册一个特定的事件. 通过提供一个在 EventHandlers下的 注册表注意名字要一致.
下面是例子,展示如何注册一个GenericVolumeArrival 事件
HKEY_LOCAL_MACHINE or HKEY_CURRENT_USER
SOFTWARE
Microsoft
Windows
CurrentVersion
Explorer
AutoplayHandlers
EventHandlers
GenericVolumeArrival
MyHandler [REG_SZ]
相关