|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Отправка WM_DROPFILES
Доброго времени суток.
Пытаюсь раздуплить как перетаскивать объекты из моей проги в другую. Нарыл код: Код:
function DropFilesOnWnd(AWnd: HWND; AFiles: String): Boolean; overload; var LInfo: PDragInfoA; LRes: Boolean; LHGlobal: Cardinal; i:integer; begin LRes := False; if copy(AFiles, length(AFiles), 1) <> #0 then AFiles := AFiles + #0; LHGlobal := GlobalAlloc(GMEM_SHARE or GMEM_MOVEABLE or GMEM_ZEROINIT, SizeOf(TDragInfoA) + length(AFiles) + 1); if LHGlobal <> 0 then begin LInfo := GlobalLock(LHGlobal); if LInfo <> nil then begin LInfo.uSize := SizeOf(TDragInfoA); LInfo.fNC:=true; Move(AFiles[1], PAnsiChar(Cardinal(LInfo) + LInfo.uSize)^, Length(AFiles)); GlobalUnlock(LHGlobal); LRes := PostMessageA(AWnd, WM_DROPFILES, LHGlobal, 0); end; if not(LRes) then GlobalFree(LHGlobal); end; result := LRes; end; вызываю его таким мокаром: Код:
DropFilesOnWnd(WindowFromPoint(Mouse.CursorPos),'D:\boot.ini'); Собственно проблема: Пишу все это счастье в Delphi 2009 на Win7 При отсылке сообщения, видимо из - за юникода, во первых отсылается половина длины строки. Во вторых например винамп разрезает всю строку посимвольно и считает каждый символ как отдельное имя файла. Также реагирует и скайп. Говорит, что папку нельзя отправлять. Крутил и так и эдак... ничего в голову не приходит. Подскажите плиз как быть. |
#2
|
|||
|
|||
Разобрался )
Надо было юзать структуру PDROPFILES. Там есть fWide который отвечает за юникод ) |