2016-08-17 33 views
0

Windowsには、 "IsShortcut"というファイル登録にフラグがあります。このフラグが設定されている場合、ファイルにはショートカットアイコンオーバーレイが自動的に付けられ、他の方法でショートカットとして扱われます(たとえば、右クリックして「ショートカットの作成」を選択すると、.lnkファイル)。マイクロソフトではClickOnceアプリケーション参照(拡張子.appref-ms)にこの機能を使用しています。Windowsエクスプローラとカスタムショートカットファイルの種類

私たちは、独自のソフトウェア用のカスタムショートカットファイルタイプにこの機能を使用しています.Windows 10以降では、カスタムショートカットが[スタート]メニューに表示されません。もちろん、スタートメニューには.lnkファイルがあり、にはにも.appref-msのファイルが含まれていますが、登録が実質的に.appref-msと異なるファイルでない私たち自身のファイルフォーマットは、スタートメニューから除外されています。ショートカットファイルは、スタートメニューのフォルダ構造(%APPDATA%\Microsoft\Windows\Start Menu\Programs)内に物理的に存在しますが、Windowsエクスプローラでは無視されます。同じディレクトリにある他のショートカットタイプ(.lnk.appref-ms)が表示されます。

私が探しているのは、Windowsエクスプローラがどのファイル形式を[スタート]メニューに含めるかを決定する指標です。カスタム形式を開発するときに同じ方法で表示できるようにします。私たちのカスタムフォーマットはWindows XP、Windows Vista、Windows 7ではうまく機能しましたが、ファイルと同じ方法でIsShortcutとマークされていても、何らかの理由で新しいスタートメニューデザインがファイルフォーマットを除外しました。

これは可能ですか?

+0

ファイル拡張子に関連付けられたIShellLinkシェル拡張を実装していますか? –

+0

私たちはしません。 IShellLinkのメンバーの大部分は、私たちのショートカットで実装することはできません。たとえば、ショートカットには1つ以上のアプリケーション名の値が格納され、ランチャに渡されます。プログラムファイルへの正確なパスは不明であり、たとえそれがあったとしても、複数存在する可能性があります。これにより、 'GetPath' /' SetPath'を適切に実装することができなくなります。 これは、エクスプローラがどのショートカットを表示するかを決定する方法ではありません。そうしないと、特定のフォルダの一覧を表示するためにすべてのショートカットファイルを読み込んでテストする必要があります。それはうまくいかないでしょう。 –

+0

...実際に表示されるすべてのショートカットをロードしてテストするとします。そうしないとアイコンハンドラが動作しません。私は、エクスプローラが指定されたショートカットを表示するかどうかのセマフォとして 'IShellLink'を使用する可能性が否定できないと思います... –

答えて

1

:-)(これが答えではありませんが、あなたの調査であなたを助けるかもしれない。)

私が作成し、自分の殻リンク拡張をregistred。 Explorerを再起動すると、拡張機能が使用され、IPropertyStoreインターフェイスを介してさまざまなプロパティが要求されます。全ログ:私は別の値でプレイしようとしましたが、まだカントは、スタートメニューの私1.mylnkファイルを表示する方法を見つけるが、おそらく、このログがお手伝いします

TMyLinkExtension.07BA12F0 is created 
    TMyLinkExtension.07BA12F0.QueryInterface IID_IShellLinkW out Result=S_OK 
    TMyLinkExtension.07BA12F0.QueryInterface IID_IInitializeWithFile out Result=S_OK 
    TMyLinkExtension.07BA12F0.IInitializeWithFile.Initialize started 
    TMyLinkExtension.07BA12F0.IInitializeWithFile.Initialize in AFileName=C:\Users\Dec\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Total Commander\1.mylnk 
    TMyLinkExtension.07BA12F0.IInitializeWithFile.Initialize in AOpenMode=STGM_READ 
    TMyLinkExtension.07BA12F0.IInitializeWithFile.Initialize out Result=S_OK 
    TMyLinkExtension.07BA12F0.IInitializeWithFile.Initialize finished 
    TMyLinkExtension.07BA12F0.QueryInterface IID_IShellLinkW out Result=S_OK 
    TMyLinkExtension.07BA12F0.QueryInterface IID_IShellLinkDataList out Result=S_OK 
    TMyLinkExtension.07BA12F0.IShellLinkDataList.GetFlags started 
    TMyLinkExtension.07BA12F0.IShellLinkDataList.GetFlags out Result=E_NOTIMPL 
    TMyLinkExtension.07BA12F0.IShellLinkDataList.GetFlags finished 
    TMyLinkExtension.07BA12F0.IShellLinkW.GetPath started 
    TMyLinkExtension.07BA12F0.IShellLinkW.GetPath in AFileName=0C1FF058 
    TMyLinkExtension.07BA12F0.IShellLinkW.GetPath in AFileNameLength=260 
    TMyLinkExtension.07BA12F0.IShellLinkW.GetPath in @AFindData=0C1FEE08 
    TMyLinkExtension.07BA12F0.IShellLinkW.GetPath in AFlags=SLGP_RAWPATH 
    TMyLinkExtension.07BA12F0.IShellLinkW.GetPath out Result=E_NOTIMPL 
    TMyLinkExtension.07BA12F0.IShellLinkW.GetPath finished 
    TMyLinkExtension.07BA12F0.QueryInterface IID_IPropertyStore out Result=S_OK 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue started 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue in AKey=PKEY_AppUserModel_ID (Caption: AppUserModelId, CanonicalName: System.AppUserModel.ID, Type: VT_LPWSTR) 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue out Result=E_INVALIDARG 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue finished 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue started 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue in AKey=PKEY_AppUserModel_PreventPinning (Caption: Prevent pinning, CanonicalName: System.AppUserModel.PreventPinning, Type: VT_BOOL) 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue out AData.vt=VT_BOOL 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue out AData=0 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue out Result=S_OK 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue finished 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue started 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue in AKey={9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}, 23 (Caption: System.AppUserModel.ExcludedFromLauncher, CanonicalName: System.AppUserModel.ExcludedFromLauncher, Type: VT_BOOL) 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue out AData.vt=VT_BOOL 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue out AData=0 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue out Result=S_OK 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue finished 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue started 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue in AKey={9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}, 14 (Caption: Host environment, CanonicalName: System.AppUserModel.HostEnvironment, Type: VT_UI4) 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue out Result=E_INVALIDARG 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue finished 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue started 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue in AKey=PKEY_AppUserModel_StartPinOption (Caption: Start pin option, CanonicalName: System.AppUserModel.StartPinOption, Type: VT_UI4) 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue out Result=E_INVALIDARG 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue finished 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue started 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue in AKey={9F4C2855-9F79-4B39-A8D0-E1D42DE1D5F3}, 18 (Caption: Installed by, CanonicalName: System.AppUserModel.InstalledBy, Type: VT_UI4) 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue out Result=E_INVALIDARG 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue finished 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue started 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue in AKey=PKEY_AppUserModel_IsDualMode (Caption: Is dual mode, CanonicalName: System.AppUserModel.IsDualMode, Type: VT_BOOL) 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue out Result=E_INVALIDARG 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue finished 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue started 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue in AKey=PKEY_Link_Arguments (Caption: Arguments, CanonicalName: System.Link.Arguments, Type: VT_LPWSTR) 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue out Result=E_INVALIDARG 
    TMyLinkExtension.07BA12F0.IPropertyStore.GetValue finished 
TMyLinkExtension.07BA12F0 is destroyed 

+0

このログはスタートメニューを開いて生成されますか?あなたのショートカットについての詳細を収集していますが、それを表示しないことを最終的に決定していますか? –

+0

はい。はい。おそらく私はエクスプローラに自分のリンクを表示させるために、私のサンプル(さらにそれらのすべて)のPropertyKeysを処理する必要があります。 –

+0

これについてMicrosoftのカスタマーサポートに電話し、数ヶ月の審議(文字通り)の後、それは範囲外だった。彼らはカスタマーサポートフォーラムへの投稿を推奨しましたので、私はそれを行いました:https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/7c88d220-2363-4cfb-8ae1-87be143d85b7/custom-shortcut-filetypes? forum = windowsgeneraldevelopmentissues 最新の情報は、これが実際にはWindowsエクスプローラのバグであることを示しています。最近の2つのコメントは、「コメント」と「この問題を再現するための非常に簡潔な方法」のテキストを参照してください。 –