Ich rufe IContextMenu::QueryContextMenu
mit CMF_CANRENAME
und ich habe Probleme mit der Umbenennung Operation beim Aufruf IContextMenu::InvokeCommand
unter Windows XP.Wie behandeln Sie Umbenennungsvorgänge beim Aufrufen von IContextMenu?
Ich bin keine Namespace-Erweiterung und ich verwende nicht DefView/IShellView, aber ich stelle eine Website, die IServiceProvider
implementiert.
In neueren Versionen von Windows werde ich für einen Dienst abgefragt, der IFolderView2 und die Shellaufrufe IFolderView2::DoRename
implementiert, und ich kann den Umbenennungsvorgang starten.
Unter Windows XP fragt es jedoch nach dem SID_DefView
-Dienst, aber ich kann keine Informationen darüber finden, wie ich diesen Dienst implementieren soll.
Die Schnittstelle it (Shell32! CDefFolderMenu :: _ ProcessRename) für die Nachfrage ist {985F64F0-D410-4E02-BE22-DA07F2B5C5E1} und ich kann für IDefViewFrame3
aber es scheint in der Registrierung, das ist die IID sehen zu werden ohne Papiere ! IDefViewFrame auf der anderen Seite ist dokumentiert, aber das einzige, was MSDN sagt, ist "nur für seine IUnknown-Funktionalität verwendet. Es hat keine eigenen Methoden.".
Gibt es eine dokumentierte Möglichkeit, Umbenennungsvorgänge unter XP in dieser Situation zu behandeln?
Ich möchte nicht wirklich eine IDefViewFrame3-Schnittstelle vortäuschen, aber die einzige andere Option, die ich mir vorstellen kann, ist zu sehen, ob es das Umbenennungsverb ist und behandeln es selbst nach TrackPopupMenu
.
Überlegen Sie, ob Sie XP wirklich unterstützen müssen. –
Wenn ich Ihre Frage richtig lese, fragt ein anderer Code Ihren Code nach einem Umbenennungsvorgang, und Sie verwenden intern ein Shell-Kontextmenü, um die tatsächliche Umbenennung durchzuführen. Ist das richtig? Fragen Sie, wie man 'IDefViewFrame3' implementiert, um diese anfängliche Umbenennungsanforderung zu erhalten? –
Für das tatsächliche Umbenennen benötigen Sie 'TrackPopupMenu()' nicht. Sie würden einfach 'QueryContextMenu()' benutzen, um eine 'HMENU' mit Menüpunkten zu füllen, dann den Menüeintrag' Rename' suchen und seine ID an 'InvokeCommand()' übergeben. Oder überspringe 'QueryContextMenu()' einfach und übergebe ein festes '' rename'' Verb an 'InvokeCommand()'. –