2016-11-08 5 views
0

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.

+0

Überlegen Sie, ob Sie XP wirklich unterstützen müssen. –

+0

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? –

+0

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()'. –

Antwort

0

IDefViewFrame3 sieht nach IUnknown auf Windows XP:

STDMETHOD(GetWindowLV)(THIS_ HWND*phwnd) PURE; 
STDMETHOD(ShowHideListView)(THIS) PURE; 
STDMETHOD(OnResizeListView)(THIS) PURE; 
STDMETHOD(ReleaseWindowLV)(THIS) PURE; 
STDMETHOD(DoRename)(THIS) PURE; 

und DoRename von DefView innerhalb InvokeCommand genannt werden, aber da es so dunkel und nicht dokumentiert ist, ist es unwahrscheinlich, dass alle 3rd-Party-Namespace-Erweiterungen behandeln es richtig Selbst wenn Sie IDefViewFrame3 implementieren, müssen Sie immer noch nach dem Umbenennungsverb suchen, wenn InvokeCommand fehlschlägt.

Verwandte Themen