![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Прием ссылок из эксплорера [D7, Win2k]
Brenagwynn © (2004-06-17 19:12:00)Каким образом можно организовать сабж при помощи дрыга и дропа(а-ля ReGetовская корзина)? С файлами-то понятно, а вот как быть со ссылками?
Brenagwynn (2004-06-18 11:29:00) [1]Неее, как принимать файлы я знаю. И WM_DROPFILES не прокатывает.
VMcL (2004-06-18 00:03:00) [2]>>Brenagwynn (17.06.04 19:12)
Или ты имеешь в виду, что не знаешь как прочитать параметры файла-ярлыка? Если да, то вот как-то так:
type
TPathBuf = packed array [0 .. 4095] of Char;
TLinkInfo = packed record
Path: String;
Args: String;
WorkDir: String;
ShowCmd: TWindowState;
Descr: String;
IconPath: String;
IconIdx: Integer;
Hotkey: Word;
end;
function ReadLink(var ALink: TLinkInfo; const AFileName: String): Boolean;
var
Obj: IUnknown;
Lnk: IShellLink;
pFile: IPersistFile;
Cmd: Integer;
WFileName: WideString;
pc: TPathBuf;
FD: TWin32FindData;
const
Mx = SizeOf(pc) - 1;
begin
Result := False;
Obj := CreateComObject(CLSID_ShellLink);
if Obj = nil then
raise Exception.Create(
'ReadLink: cannot create IShellLink interface object.');
Lnk := Obj as IShellLink;
pFile := Obj as IPersistFile;
WFileName := WideString(AFileName);
if pFile.Load(PWideChar(WFileName),
stgm_Read or stgm_Share_Deny_Write) <> S_OK then Exit;
if Lnk.GetDescription(pc, Mx) <> S_OK then Exit;
ALink.Descr := String(pc);
if Lnk.GetPath(pc, Mx, FD, 0) <> S_OK then Exit;
ALink.Path := pc;
if Lnk.GetArguments(pc, Mx) <> S_OK then Exit;
ALink.Args := pc;
if Lnk.GetWorkingDirectory(pc, Mx) <> S_OK then Exit;
ALink.WorkDir := pc;
if Lnk.GetShowCmd(Cmd) <> S_OK then Exit;
case Cmd of
sw_ShowNormal: ALink.ShowCmd := wsNormal;
sw_ShowMinNoActive: ALink.ShowCmd := wsMinimized;
sw_ShowMaximized: ALink.ShowCmd := wsMaximized;
else
raise ERangeError.CreateFmt(
'ReadLink: unexpected value of "show command" (%d).', [Cmd]);
end;
if Lnk.GetIconLocation(pc, Mx, ALink.IconIdx) <> S_OK then Exit;
ALink.IconPath := String(pc);
if Lnk.GetHotkey(ALink.Hotkey) <> S_OK then Exit;
Result := True;
end;
DVM (2004-06-17 22:57:00) [3]IDropTarget интерфейс реализовать.
Есть компонент Drag 'n' Drop Component Suite, вроде, Андрис Меландер, кажется, автор (www.torry.net) - там можно глянуть как делается.
Хотя WM_DROPFILES может и прокатит, т.к. с помощью этого сообщения посылается список строк и необязательно это должны быть файлы.
VMcL (2004-06-17 19:43:00) [4]>>Brenagwynn (17.06.04 19:12)
DragAcceptFiles() + WM_DROPFILES
Win32 SDK Help: Using the Drag-Drop Feature - там пример на C.