2009-12-29 5 views
2

나는이 기사를 http://www.codeproject.com/KB/shell/overlayicon.aspx에서 읽었다. 내가 대답 할 수없는 몇 가지 질문이 있습니다. 도와주세요?오버레이 아이콘을 구현 하시겠습니까?

  1. 프로젝트를 COM dll로 빌드 할 때. 이 DLL을 호출하기 위해 다른 프로그램을 사용할 때. 선택한 파일에 어떤 방법으로 오버레이 아이콘을 표시 할 수 있습니까? 먼저 GetOverlayInfo()으로 전화를 걸어 IsMemberOf()으로 전화하겠습니까? 2 가지 기능 만?
  2. GetOverlayInfo(). 첫 번째 매개 변수에서 어떤 값을 전달합니까? 오버레이 아이콘의 경로? 또는 오버레이 아이콘이 설정된 파일의 경로? 예를 들어 주시겠습니까? 아래의 기능에서
  3. :

    STDMETHODIMP CMyOverlayIcon::GetOverlayInfo(
        LPWSTR pwszIconFile, 
        int cchMax,int* pIndex, 
        DWORD* pdwFlags) 
    { 
    GetModuleFileName(_AtlBaseModule.GetModuleInstance(),pwszIconFile,cchMax); 
    
    *pIndex =0; 
    *pdwFlags = ISIOI_ICONFILE | ISIOI_ICONINDEX; 
    
    return S_OK; 
    } 
    

은 u는 나를 내가 외부 프로그램에서 호출 함수에 어떤 가치를 전달할 수 말할 수 없습니다. 전화를 걸어 값을 전송하는 방법을 보여줄 수 있습니까?
  • pIndex
  • pdwFlags

    1. pwszIconFile
    2. cchMax
    3. 는 (I 통과 할 수 내가 외부에서 호출 할 때하는 값입니다. 예 C# 프로그램)
  • +1

    오버레이 아이콘을 어디에 표시 하시겠습니까? Windows 탐색기에서? 이 경우 응용 프로그램에서 COM dll을 호출하지 않고 필요할 때 자동으로 호출됩니다. COM dll은 Shell Extension으로 등록되고 Windows 탐색기가이를 호출합니다. – A9S6

    +0

    마우스 오른쪽 버튼으로 클릭 한 파일에 겹침 아이콘을 표시하는 응용 프로그램을 작성하고 싶습니다. 나는 codeproject에서 링크를 찾습니다. 이제는이 OverlapIcon.dll을 호출하여 내 목표를 수행 할 다른 응용 프로그램을 작성하려고합니다. 좀 더 말해 주거나 샘플을 주시겠습니까? 대단히 감사합니다 – Sean

    +0

    사실 나는 같은 문제가 있습니다. 어떤 동작이 실행될 때 이미지를 보여줍니다.대답을 찾을 수 있다면 여기에 게시하십시오!) 감사합니다 – Evgeny

    답변

    1
    1. 예, 당신이 떨어져 얻을 수 있습니다 두 가지 기능 만 있습니다. 하지만 반환 값을 사용하지 않아도 GetPriority()를 호출 할 것입니다. 오버레이 처리기가 해당 호출에 의존하는지 여부는 알 수 없습니다 (직접 작성하지 않은 경우). GetOverlayInfo()를 한 번만 호출하면되지만 오버레이 아이콘을 표시 할 모든 파일에 대해 IsMemberOf()를 호출하면됩니다.
    2. (빈) 버퍼를 전달하고 cchMax에는 버퍼의 길이를 전달해야합니다. 오버레이 핸들러는 아이콘 파일의 경로로 버퍼를 채 웁니다. 하지만 당신은 또한 pdwFlags와 pIndex (둘 다 오버레이 핸들러로 채워진다)를 체크해야한다. pdwFlags에 설정된 플래그에 따라, pwszIconFile에있는 아이콘 파일의 경로 나 아이콘이 표시됩니다. 후자의 경우 pIndex 값은로드해야하는 exe 파일의 아이콘 리소스 인덱스입니다.

    왜 오버레이 처리기를 직접 호출할지 말하지 않았습니다. 일부 목록보기 또는 대화 상자에서 탐색기로 아이콘을 표시하기 만하면 모든 오버레이 처리기가 등록되어있는 레지스트리를 읽을 필요가없는 훨씬 쉬운 경로를 사용할 수 있습니다 (일부 시스템 오버레이는 등록되지 않습니다). 심지어 거기에 등록하지 마라!).

    KB192055을 보시면 도움이 될 것입니다.

    +0

    감사합니다. Stefan very very much. 나는 더 많은 질문이있다. 당신이 나를 도울 수? C++ (또는 C#)의 샘플 스 니프 코드 작성 기능을 사용하여 OverlayIcon.dll의 함수를 호출하여 파일에 오버레이 아이콘을 표시 할 수 있습니까? 내가 선택한 파일에 오버레이 아이콘을 표시하는 기능을 개발 중입니다. 특정 파일을 마우스 오른쪽 버튼으로 클릭하면됩니다. 도와 주시겠습니까? 당신에게 매우 감사드립니다. 미리 감사드립니다. – Sean

    +0

    위에 링크 된 KB192055의 코드 예제를 사용하십시오. 이것은 당신이 원하는 것을 할 것입니다 (단지 "* .lnk"을 사용하지 말고 파일의 실제 확장자로 오버레이가있는 아이콘을 원합니다). – Stefan

    +0

    Stefan에게 대단히 감사합니다. 하지만이 파일을 오버레이 아이콘으로 설정하는 방법을 설명해 주시겠습니까? 샘플 스 니펫을 줄 수 있습니까? 감사 사전 – Sean

    관련 문제