Текущий архив: 2005.07.31;
Скачать: CL | DM;
ВнизКонтекстное меню дла файла в сети Найти похожие ветки
← →
_Seldon_ (2005-04-18 20:12) [0]Для показа контекстного меню использую такой код:
OleInitialize(nil);
PMenu:=TPopupMenu.Create(Application);
SHGetDesktopFolder(IShFolder);
Dirs:=TStringList.Create;
try
Delete(FileName,1,2);
Dirs.Text:=FastReplace(FileName,"\",#13#10);
Dirs[0]:="\\"+Dirs[0];
for a:=0 to Dirs.Count-2 do
begin
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,PChar(Dirs[a]),-1,@szOleChar,SizeOf(szOleChar));
IShFolder.ParseDisplayName(0,nil,@szOleChar,Tmp,IdList,Tmp); {!!!}
IShFolder.BindToObject(IdList,nil,IID_IShellFolder,Pointer(IShFolder));
end;
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,PChar(Dirs[Dirs.Count-1]),-1,@szOleChar,SizeOf(szOleChar));
IShFolder.ParseDisplayName(0,nil,@szOleChar,Tmp,IdList,Tmp);
finally
Dirs.Free;
end;
IShFolder.GetUIObjectOf(Application.Handle,1,IdList,IID_IContextMenu,nil,Pointer(IMenu));
IMenu.QueryInterface(IID_IContextMenu2,ActiveIContextMenu);
IMenu.QueryContextMenu(PMenu.Handle,0,1,$7fff,CMF_EXPLORE);
idCmd:=Word(TrackPopupMenu(PMenu.Handle,TPM_LEFTALIGN or TPM_RETURNCMD or TPM_RIGHTBUTTON,Pos.X,Pos.Y,0,Application.Handle,nil));
if idCmd>0 then
with cmi do
begin
IMenu.GetCommandString(idCmd-1,GCS_VERB,nil,@cmd_verb,MAX_PATH);
cbSize:=SizeOf(cmi);
fMask:=0;
hwnd:=Application.Handle;
lpVerb:=PChar(idCmd-1);
dwHotkey:=0;
hicon:=0;
nShow:=SW_SHOWNORMAL;
lpParameters:=nil;
lpDirectory:=nil;
IMenu.InvokeCommand(cmi);
end;
Для локальных файлов он работает, а для файлов, расположенных в сети - нет. В стороке, помеченной !!! на второй итерации IdList всегда равен nil. В чём ошибка?
← →
_Seldon_ (2005-04-19 22:20) [1]Аууу :)
← →
nikkie © (2005-04-20 00:16) [2]вот это что такое?
>Delete(FileName,1,2);
← →
_Seldon_ (2005-04-20 17:17) [3]удаление \\ из имён вида \\somecomp
← →
nikkie © (2005-04-20 23:46) [4]а как же это на локальных файлах работает?
Страницы: 1 вся ветка
Текущий архив: 2005.07.31;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.039 c