.net - C #: Sådan falder du en træk og slip handling af en fil til et bestemt drop-mål på et vindue

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg vil falske en træk og slip handling (trækker en fil fra lad os sige Windows Explorer til et bestemt program). Dette program har et vindue med fire drop-targets.


Målprogrammet har sit eget grafiske delsystem, så det er hverken baseret på WinForms eller WPF. Jeg prøvede WinSpy, og alt det detekterer, er vinduet selv, men ingen af ​​kontrollerne.


Når jeg trækker over et af målene, vises det en Windows-kopi-mulighed dog (som når du trækker en fil til en mappe på et andet drev).

Bedste reference


Jeg tror ikke der er nogen dokumenteret måde.


Du kan sende WM\_DROPFILES, men dette (1) kræver, at du sætter filnavnet i en ubeskrevet HDROP-struktur i målprocessen hukommelse før tid, og (2) er den ældre metode til at acceptere filer, det vandt 't arbejde, hvis applikationen bruger de nyere API'er IDropTarget.


IDropTarget er faktisk designet til at være mere generel end blot at trække filer fra explorer: der er en Win32 API, DoDragDrop, som gør det muligt for en applikation at fungere som en trækkilde, så brugeren kan droppe sine data til andre applikationer. Desværre ser DoDragDrop musebevægelsen direkte, så du skal simulere musens bevægelse og knapfrigivelse for at kontrollere, hvor genstanden faldt. Selv dette virker ikke, medmindre det andet vindue ligger oven på z-ordren, da DoDragDrop finder vinduet under markøren og vil forstyrre enhver musaktivitet brugeren gør. Så det skal bruges som en sidste udvej. [7]