2016-09-08 28 views
6

Mam rozszerzenie powłoki zbudowane przy użyciu SharpShell. Zastanawiam się, czy jest możliwe, aby dołączyć do podpowiedzi zobaczysz po najechaniu kursorem myszy na pliku:Dołącz do domyślnej etykiety narzędzi w rozszerzeniu powłoki

enter image description here

Przeczytałem próbował użyć Shell Info Tip Handler, ale problem polega na tym, że unieważnia cała podpowiedź z tym, co ustawiłeś, zamiast dać ci możliwość dołączenia linii tekstu do domyślnej podpowiedzi, którą normalnie zobaczysz, co jest moim pożądanym rezultatem.

Mam przeczucie, że może nie być obsługiwane w SharpShell, w rezultacie pomogłoby mi uzyskać od ludzi wiedzę na temat tego, w jaki sposób mogę dodatkowo podejść do tego problemu w rozszerzeniach powłoki MSVC++.

+0

Czy próbowałeś wywołać klasę podstawową ze swojego zastąpienia? –

+0

@BenVoigt Żałuję, że jest to niestety abstrakcyjna metoda bazowa. – Alexandru

+0

Oto ktoś, kto miał to samo pytanie - zapytał w niewłaściwym miejscu i nie otrzymał odpowiedzi. https://social.microsoft.com/Forums/en-US/d3a0b665-019d-41cb-9e6e-b9ff99c70234/iqueryinfo-getinfotip-how-get-the-default-window-tip-text?forum=Offtopic –

Odpowiedz

1

Jest to możliwe, ale nie przez rozszerzenie etykiety narzędzia powłoki. Zamiast tego za pośrednictwem właściwość powłoki powłoki. Obiekt obsługi receptury jest udokumentowany here i można go pobrać w całości z this repository. Oto zdjęcie z niego w działaniu w systemie Windows 10:

enter image description here

Zasadniczo dodaje dodatkowe właściwości pliku do pliku PerfectSteaks.recipe rejestrując się jako obsługi nieruchomości, takich jak nieruchomości na Recipe difficulty który jest kluczowy jest Microsoft.SampleRecipe.Difficulty i może można go łatwo ustawić na Explorer, modyfikując klucz HKCRHKEY_CLASSES_ROOT\SystemFileAssociations\.recipe tak, aby miał InfoTip (typu REG_SZ) ustawiony jako prop:System.ItemType;System.Author;System.Rating;Microsoft.SampleRecipe.Difficulty, co powoduje jego wyświetlenie.

Właściwości są przechowywane w samym pliku. Plik .recipe to plik XML, który zawiera, między innymi, rzeczywista trudność których obsługi pobiera:

<RecipeInfo> 
    <Difficulty>Hard</Difficulty> 
    <PreparationTime>5</PreparationTime> 
    <CookTime>20</CookTime> 
    <Yield>2 servings</Yield> 
</RecipeInfo> 

To nie jest czymś wyjątkowym w dzisiejszych czasach, ponieważ wiele formatów zrobić zapewnić jakąś formę dodatkowego wewnętrznego API do przechowywania. Jeśli pracujesz z plikami pakietu Office (którymi jestem), możesz zauważyć, że eksponują one właściwości do przechowywania w nich dla trwałości przy użyciu OLE. The DSOFile.dll (click here to download the source) jest bardzo interesujące dla plików Office, a także ogólnie innych plików. Zobaczysz, że próbuje on przechowywania OLE w samym formacie pliku Office, z tym, że próbuje przechowywać w pamięci Microsoft Office Metadata Handler. Jeśli to się nie powiedzie, w końcu spróbuje użyć alternatywnych strumieni (nie fanem alternatywnych strumieni, ponieważ one nie będą się utrzymywać).

W związku z powyższym, dzięki kombinacji obsługi właściwości powłoki i podobnej taktyki do narzędzia DSOFile.dll, można połączyć rozwiązanie, aby wykonać to zadanie we właściwy sposób.

+0

Widzę duży problem, jeśli używasz tej metody dla plików takich jak .doc. Takie rozszerzenia plików mają już zainstalowane moduły obsługi właściwości, a twój moduł obsługi zastąpi istniejący. W rezultacie powłoka nie będzie w stanie pokazać właściwości przetworzonych przez początkową obsługę właściwości Property. W przypadku formatu .doc będzie to Autor, Komentarze i tak dalej. –

+0

I drobna notatka. Ta metoda nie jest uniwersalna. Domyślną etykietkę narzędziową można wygenerować za pomocą innej kombinacji przycisków PropertyKeys lub można ją wygenerować za pomocą innej procedury obsługi informacji lub można ją wygenerować za pomocą łańcucha z zasobów. Tak więc ta metoda nie jest dołączana do domyślnej podpowiedzi, ale tworzy nową. –

+0

@DenisAnisimov Przyznaję, że szybko wymigałem się od pistoletu, ponieważ jest to dokładnie coś, co chciałem przetestować dzisiaj, jeśli możesz mieć wiele programów do obsługi skorup na żywo obok siebie. – Alexandru