다음을 통해 공유


디바이스 이벤트에 대한 처리기를 등록하는 방법

처리기는 자동 실행의 소프트웨어 부분을 정의합니다. 소프트웨어의 아이콘 및 친숙한 이름과 COM(구성 요소 개체 모델) 구성 요소를 정의하여 인스턴스화하고 이벤트에 대한 응답으로 구성 요소를 초기화하는 방법을 정의합니다. 특정 이벤트에 대한 각 처리기는 적절한 EventHandler 키 아래에 값으로 등록됩니다. 해당 이벤트가 감지되면 해당 이벤트에 등록된 모든 처리기 목록에서 처리기를 선택하라는 메시지가 사용자에게 표시됩니다.

지침

처리기 및 관련 값은 AutoplayHandlers\처리기 키 아래에 정의됩니다. 하위 키는 시스템에서 디바이스 콘텐츠를 직접 읽을 수 있는지 또는 디바이스가 독점 인터페이스를 통해 시스템에 콘텐츠를 제공하는지에 따라 다릅니다.

다음 예제에서는 독점 인터페이스를 통해 시스템에 콘텐츠를 제공하는 디지털 비디오 카메라 또는 .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(클래스 식별자) 값을 모두 보여 주지만 실제로는 이러한 값이 상호 배타적이므로 하나 또는 다른 값만 존재합니다. ProgID 값이 선호됩니다. 어떤 것이 사용하든 IHWEventHandler 인터페이스를 구현하는 COM 구성 요소를 가리킵니다.

 

이 예제와 같이 Action 값을 리터럴 값(예: "음악 재생")으로 입력하거나 리소스 문자열이 있는 파일 이름으로 입력할 수 있습니다. 공급자 값을 리터럴 값으로 입력하거나 리소스 문자열이 있는 파일 이름으로 입력할 수도 있습니다. 자동 실행은 작업 값과 공급자 값을 "using"라는 단어와 결합하여 UI에 표시되는 친숙한 캡션 만듭니다. 예제에서 결과 캡션 "Windows 미디어 플레이어 사용하여 음악 재생"입니다.

DefaultIcon 값은 .ico 파일 또는 이진 파일의 리소스를 가리킵니다. 이진 파일 이름 뒤에 있는 숫자 값이 0 이상인 경우 해당 이진 파일에 있는 아이콘의 인덱스 값입니다. 음수 값이면 아이콘 리소스 ID입니다. 음수 인덱스 값을 사용하는 것이 좋습니다. .ico 파일의 경우 값이 필요하지 않습니다. 경로에서 환경 변수를 사용하는 것이 좋습니다.

InitCmdLine 값은 다른 메서드가 호출되기 전에 IHWEventHandler::Initialize 메서드를 통해 변경되지 않은 상태로 전달됩니다.

다음 예제에서는 CD-ROM 드라이브 또는 기타 이동식 디스크와 같이 직접 읽을 수 있는 디바이스에 사용되는 하위 키 및 값을 보여 줍니다. 다시 말하지만 예제 처리기를 MyHandler라고 합니다.

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

이 예제에서 작업 및 공급자 값은 리터럴 값이 아닌 리소스 문자열이 있는 파일 이름으로 표시되지만 참조하는 문자열은 동일한 방식으로 사용됩니다. 앞에서 설명한 대로 "using"라는 단어와 결합하여 친숙한 캡션 형성합니다.

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를 사용하여 적절한 애플리케이션을 구현합니다.

이러한 두 가지 방법 중 하나로 처리기를 정의한 후에는 특정 이벤트에 등록해야 합니다. EventHandlers에서 해당 이벤트의 키에 대한 값으로 처리기 이름을 제공하여 이 작업을 수행합니다. 다음 예제에서는 GenericVolumeArrival 이벤트에 대한 처리기로 MyHandler 를 등록하는 방법을 보여 있습니다. 할당된 데이터 값이 없습니다.

HKEY_LOCAL_MACHINE or HKEY_CURRENT_USER
   SOFTWARE
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  AutoplayHandlers
                     EventHandlers
                        GenericVolumeArrival
                           MyHandler [REG_SZ]

IHWEventHandler

CoCreateInstance