Доброго времени суток.
Пытаюсь раздуплить как перетаскивать объекты из моей проги в другую.
Нарыл код:
Код:
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
При отсылке сообщения, видимо из - за юникода, во первых отсылается половина длины строки. Во вторых например винамп разрезает всю строку посимвольно и считает каждый символ как отдельное имя файла. Также реагирует и скайп. Говорит, что папку нельзя отправлять.
Крутил и так и эдак... ничего в голову не приходит. Подскажите плиз как быть.