Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi [VISTA] Drag&Drop wird nicht ausgeführt! (https://www.delphipraxis.net/115255-%5Bvista%5D-drag-drop-wird-nicht-ausgefuehrt.html)

TheMiller 9. Jun 2008 11:09


[VISTA] Drag&Drop wird nicht ausgeführt!
 
Moin!

Ich habe mehrere Threads zum Thema Drag&Drop gelesen und die Codes mal ausprobiert. Doch ich habe das Problem, dass die Drag&Drop-Nachricht nicht abgefangen wird (warum auch immer). Auf dem Gebiet bin ich noch Neuling... Liegt es an Windows Vista? Hier mal "mein" Code. Ich habe ein neues Projekt angelegt und den Code aus den Threads importiert.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ShellAPI, StdCtrls;

type
  TListBox = class(StdCtrls.TListBox)
  private
    procedure WMDROPFILES (var Msg: TMessage); message WM_DROPFILES;
end;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    procedure FormCreate(Sender: TObject);
  private

  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TListBox.WMDROPFILES (var Msg: TMessage);
var
  i, Counts, Size: Integer;
  PCharFileName: PChar;
begin
  inherited;

  PCharFileName := nil;
  Counts := DragQueryFile(Msg.WParam, $FFFFFFFF, PCharFileName, 255);

  for i := 0 to Counts - 1 do
  begin
    Size := DragQueryFile(Msg.WParam, i, nil, 0) + 1;
    PCharFileName := StrAlloc(Size);
    DragQueryFile(Msg.WParam, i, PCharFileName, Size);
    Items.Add(String(PCharFileName));
    StrDispose(PCharFileName);
  end;

  DragFinish(Msg.WParam);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(ListBox1.Handle, true);
end;

end.
Wie gesagt, das Annehmen der Files funktioniert. Will heißen, dass das kleine Plus an der Maus erscheint, aber die WMDROPFILES-MSG wird nicht abgefangen und somit auch nicht zur ListBox hinzugefügt.


[EDIT]Es liegt definitiv an Windows Vista. Habe hier noch einen XP-Rechner rumstehen. Bei dem funktioniert es super... Was nun?[/EDIT]


Danke im Voraus!

Bye

Luckie 9. Jun 2008 11:44

Re: [VISTA] Drag&Drop wird nicht ausgeführt!
 
Von wo ziehst du die Dateien auf die Listbox?

TheMiller 9. Jun 2008 11:49

Re: [VISTA] Drag&Drop wird nicht ausgeführt!
 
Vom Desktop oder aus dem Windows Explorer. Beides funktioniert bei Windows XP, bei Vista aber nicht.

Luckie 9. Jun 2008 11:58

Re: [VISTA] Drag&Drop wird nicht ausgeführt!
 
Beide Prozesse laufen unter dem gleichen Account? Ist die UAC aktiv?

TheMiller 9. Jun 2008 11:58

Re: [VISTA] Drag&Drop wird nicht ausgeführt!
 
Ich habe gerade einen "sehr schönen" Beitrag in einem anderen Forum gefunden. Der Verfasser hat mit seiner Aussage vollkommen recht. Nur die Frage ist, ob diese Sicherheitsfunktion umgangen werden kann. So toll ist die Idee nämlich nicht... Hier der Beitrag (Quelle: http://www.c-plusplus.de/forum/viewt...-previous.html)


Zitat:

Wenn Dein Programm elevated (als Admin läuft) ist ein Drop aus Programmen, die nicht elevated (Explorer) laufen nicht möglich.
Dies gehört zur Session Isolation!
Nur Programme im selben SIcherheits Kontext können Drag&Drop durchführen.
Und nun? Also, wenn ich das Programm ohne Admin-Rechte starte, klappt's! Aber das kann auch nicht Sinn der Sache sein, oder?

sakura 9. Jun 2008 12:08

Re: [VISTA] Drag&Drop wird nicht ausgeführt!
 
Zitat:

Zitat von DJ-SPM
Und nun? Also, wenn ich das Programm ohne Admin-Rechte starte, klappt's! Aber das kann auch nicht Sinn der Sache sein, oder?

Genau das ist der Sinn der Sache. Die Windowsbotschaften sind ein Relikt der Windows 1.x Zeit und in sich ein recht unsicheres Konzept, zu welchem es bis jetzt in Windows keine Alternative gibt. Durch solche Botschaften lassen sich mit etwas Geschick auch Buffer-Overflows produzieren, andere Programme steuern, etc. Genau deswegen können "normale Prozesse" an "elevated" Prozesse keine solche Botschaften senden, auch ein einfaches Drag-n-Drop nicht. UAC ausschalten oder eine andere Lösung für Deine Software finden - muss die wirklich als Admin laufen, kann man die nötigen Routinen nicht evtl. auslagern, ...

...:cat:...

TheMiller 9. Jun 2008 12:12

Re: [VISTA] Drag&Drop wird nicht ausgeführt!
 
Nene... meine Software muss nicht als Admin laufen. Das mit den Buffer-Overflows in der Weise wusste ich nicht. Dann ist das nachvollziehbar. Nur, man muss erstmal auf eine solche Idee kommen, dass es mit den Rechten zu tun hat.

Jedefalls habe ich beim Programmieren jetzt Probleme, da Delphi bei mir als Admin ausgeführt werden muss. Ist das nicht der Fall, so würden einige Komponenten nicht verfügbar sein. Weis zwar net warum, ist aber so. Jetzt wird's halt etwas umständlich, passt aber schon.

Danke

Bernhard Geyer 9. Jun 2008 12:15

Re: [VISTA] Drag&Drop wird nicht ausgeführt!
 
Zitat:

Zitat von DJ-SPM
... da Delphi bei mir als Admin ausgeführt werden muss. Ist das nicht der Fall, so würden einige Komponenten nicht verfügbar sein. Weis zwar net warum, ist aber so.

Wird vermutlich mit der Virtualisierung zusammenhängen. Wurden diese Komponentn evtl. unter C:\Programme\... installiert?

TheMiller 9. Jun 2008 12:18

Re: [VISTA] Drag&Drop wird nicht ausgeführt!
 
Jap... Genauer gesagt:

C:\Programme\Borland\Delphi7\Komponenten
C:\Programme\PngComponents
C:\Programme\Borland\Delphi7\Lib

Tja.. pg (Pech gehabt)

Bernhard Geyer 9. Jun 2008 12:28

Re: [VISTA] Drag&Drop wird nicht ausgeführt!
 
Entweder alles woanders hin installieren um in der IDE umstellen oder dir für diese Verzeichnisse entsprechende Rechte als normaler User geben lassen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:19 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz