我们都知道可以为您的窗口实现拖放功能,以便它接受拖放操作,但我的问题是,如何检测正在进行的在其他窗口中的拖放操作,例如,在Windows资源管理器中拖动文件?我想做的是当用户拖动文件时,我的隐藏窗口会显示出来。谢谢!
procedure WinEventProc(hWinEventHook: THandle; event: DWORD;
hwnd: HWND; idObject, idChild: Longint; idEventThread, dwmsEventTime: DWORD); stdcall;
var
ClassName: string;
begin
SetLength(ClassName, 255);
SetLength(ClassName, GetClassName(hWnd, pchar(ClassName), 255));
if pchar(ClassName) = 'SysDragImage' then
begin
if event = EVENT_OBJECT_CREATE then
Form1.Memo1.Lines.Add('Drag Start')
else
Form1.Memo1.Lines.Add('Drag End');
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FEvent1 := SetWinEventHook(EVENT_OBJECT_CREATE, EVENT_OBJECT_CREATE, 0, @WinEventProc, 0, 0, WINEVENT_OUTOFCONTEXT);
FEvent2 := SetWinEventHook(EVENT_OBJECT_DESTROY, EVENT_OBJECT_DESTROY, 0, @WinEventProc, 0, 0, WINEVENT_OUTOFCONTEXT);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
UnhookWinEvent(FEvent1);
UnhookWinEvent(FEvent2);
end;
SetWindowsHookEx()
,并让它跟踪用户何时按住左键并将鼠标移出源窗口。但是没有办法获取有关正在拖动的内容的信息。我使用来自Raize Software的DropMaster。 http://www.raize.com/devtools/Products.asp
你也可以使用Melander的,但我没有测试过这个。 http://melander.dk/delphi/dragdrop/。