AIMP Forum

AIMP for Windows => Дополнения / Addons => Разработка / Development => Topic started by: mc0re on January 05, 2020, 14:58:15

Title: Drag-and-drop to WPF
Post by: mc0re on January 05, 2020, 14:58:15
Я написал WPF-приложение, и попытался перетащить на него файл из AIMP. Результат получился странный.

AIMP говорит, что поставляет два типа данных:
? args.Data.GetFormats(аalse)
{Length=2}
    (0): "ACL.FileURIs"
    (1): "FileDrop"

Но самый обычный, "FileDrop", не поставляется:
? args.Data.GetData(DataFormats.FileDrop)
null

Тот же результат с конвертируемыми типами "FileName" и "FileNameW".

Тип "ACL.FileURIs" возвращает MemoryStream, где начиная с индекса 20 идёт имя файла в Unicode. Но формат заголовка неизвестен (хотя, похоже, первые байты сообщают его длину).

1) Могу я расчитывать на то, что в заголовке первые 4 байта дают его длину? Или два? И что там есть ещё?
2) Не могли бы вы сделать так, чтобы "FileDrop" возвращал, как и положено, массив строк - имён файлов?
Title: Re: Drag-and-drop to WPF
Post by: Artem on January 05, 2020, 15:06:49
"ACL.FileURIs" и "FileDrop" одинаковы по структуре, отличаются лишь тем, какие данные туда пишутся. Мне кажется, что WPF-приложение ожидает не олешный FileDrop-контейнер, а хендл для DragQueryXXX апи. Поэтому и не работает.

Формат контейнера:

Сначала идет стуктура:
Code: [Select]
  _DROPFILES = record
    pFiles: DWORD;                       { offset of file list }
    pt: TPoint;                          { drop point (client coords) }
    fNC: BOOL;                           { is it on NonClient area }
                                         { and pt is in screen coords }
    fWide: BOOL;                         { WIDE character switch }
  end;

За ней - список файлов, разделенных #0-сепаратором в single-byte / wide-byte формате (в зависимости от fWide-параметра в структуре). Конец списка - двойной #0-сепаратор
Title: Re: Drag-and-drop to WPF
Post by: mc0re on January 05, 2020, 15:28:25
Спасибо. Значит, пока нужно будет возиться со стримом. Да ещё и на флаг Wide смотреть :-(
Вы не глянете как-нибудь, как бы AIMP с WPF совместить? :-)