바로 가기 메뉴 처리기 및 여러 동사에 대한 모범 사례

이 항목은 다음과 같이 구성됩니다.

모범 사례

정적 동사는 구현하는 가장 간단한 동사이며 풍부한 기능을 제공합니다. 정적 동사 메서드 중 하나를 사용하여 동사를 구현하는 것이 좋습니다.

동사 구현에 대한 모범 사례

다음 목록은 동사 구현에 대한 모범 사례를 나타냅니다.

  • 항상 요구 사항을 충족하는 가장 간단한 동사 메서드를 선택했습니다.
  • 가능한 경우 정적 동사 메서드를 사용합니다.
  • UI 스레드에서 리소스 집약적 작업 또는 I/O를 수행하지 마세요. IShellExtInit::InitializeIContextMenu::QueryContextMenu는 모두 수행하는 작업에서 매우 보수적이어야 합니다. IContextMenu::InvokeCommand 는 다른 프로세스에서 수행되어야 합니다. 또는 호출자를 차단하지 않도록 새 스레드를 만들어야 합니다.
  • ISV(독립 소프트웨어 공급업체) 이름의 접두사 동사는 다음과 같습니다 ISVName.verb. 정규화되지 않은 이름을 사용하면 동일한 동사 이름을 선택한 여러 ISV와 충돌이 발생할 수 있습니다.
  • 항상 애플리케이션별 ProgID를 사용합니다. 일부 항목 유형은 이 매핑을 사용하지 않으므로 공급업체 고유 이름이 필요합니다.
  • 호출 메서드를 기준으로 UI를 배치하지만 호출자 스레드에서는 실행되지 않습니다.
  • IContextMenu::InvokeCommand메서드에 전달된 정식 동사에 대한 반환 값 S_OK 허용하지 않습니다. 이렇게 하면 실제 동사 구현이 호출되지 않고 정식 동사에 대한 오류 코드가 반환됩니다. 정식 동사를 지원하지 않는 경우 0이 아닌 HIWORD(lpVerb) 값이 발견되면 실패를 반환합니다.
  • 동사의 호스트로 rundll32.exe 사용하지 않도록 합니다.
  • IContextMenu::QueryContextMenu를 구현할 때 ResultFromShort 매크로를 사용하여 HRESULT 값을 통해 메뉴에 추가된 동사 수를 반환해야 합니다.
  • 다음 레지스트리 키 항목 중 하나에 등록하는 경우 주의해야 하며 의도하지 않은 결과를 줄이기 위해 가장 구체적인 형식에 처리기를 등록해야 합니다.
    • HKEY_CLASSES_ROOT\*
    • HKEY_CLASSES_ROOT\AllFileSystemObjects
    • HKEY_CLASSES_ROOT\Folder
    • HKEY_CLASSES_ROOT\Directory
  • 바로 가기 메뉴에서 기본 동사를 변경해야 하는 경우에만 MayChangeDefaultMenu 키를 설정합니다. 처리기가 기본 동사를 변경하지 않으면 시스템이 DLL을 불필요하게 로드하므로 이 키를 설정하면 안 됩니다.
  • IShellExtInit::Initialize에서 수행하는 작업을 최소화합니다. 바로 가기 메뉴 처리기의 경우 IShellExtInit::Initialize에 전달된 데이터 개체를 캡처한 다음 IContextMenu::QueryContextMenu 또는 IContextMenu::InvokeCommand에서 처리합니다.

여러 선택 동사에 대한 모범 사례

다중 선택 동사 시나리오의 항목 수가 클 수 있으므로 동사 구현의 성능 영향을 고려하는 것이 중요합니다. 예를 들어 사용자가 많은 수의 항목을 포함하는 scope "*"를 검색한 다음 모두 선택을 클릭하고 마우스 오른쪽 단추를 클릭하면 동사에 수천 개의 항목이 있을 수 있는 선택 항목이 표시됩니다. 따라서 동사는 선택 영역의 첫 번째 항목과 전체 항목 수만 고려해야 합니다. 첫 번째 항목은 보기 맨 위에 있는 항목 또는 사용자가 처음 마우스 오른쪽 단추로 클릭한 항목으로 정의됩니다.

Windows 7 이상에서는 바로 가기 메뉴를 쿼리할 때 동사에 전달되는 항목 수가 16개로 제한됩니다. 그런 다음 동사가 호출될 때 전체 선택 영역으로 동사를 다시 만들고 다시 초기화합니다.

경우에 따라 적은 수의 고정 항목을 고려하는 것이 적절합니다. 예를 들어 "diff" 동사는 처음 두 항목만 고려하는 것이 적절합니다. 일반적으로 선택 영역의 모든 항목을 테스트하여 특정 형식인지 확인하거나 선택 영역의 모든 항목을 해당 속성에 대해 쿼리할 필요는 없습니다. 첫 번째 항목을 살펴보고 동사를 추가하는 것이 적절한지 결정합니다.

이기종 선택

동사에서 검사되지 않은 항목을 처리할 수 있다고 가정하면 다중 선택 사례에 낙관적 동사가 자동으로 추가됩니다. 반면, 선택 영역에 검색되지 않은 항목이 포함된 경우 비관적 동사는 추가되지 않으며 항목 수가 적은 경우에만 추가됩니다.

플레이어 스타일 동사는 낙관적이어야 하며 처리되지 않은 항목을 자동으로 건너뜁니다. 항목에 대해 작업을 수행하지 못하면 데이터가 손실되거나 혼동될 수 있는 경우 동사는 처리할 수 없는 항목에 대해 사용자에게 경고해야 합니다. 예를 들어 "백업" 동사는 일부 항목을 백업할 수 없음을 나타내야 합니다.

바로 가기 메뉴에 대한 정적 또는 동적 동사 선택

바로 가기 메뉴 처리기 만들기

동적 동사를 사용하여 바로 가기 메뉴 사용자 지정

바로 가기(상황에 맞는) 메뉴 및 바로 가기 메뉴 처리기

동사 및 파일 연결

바로 가기 메뉴 참조