AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi TShellDropper und Windows 8.1: Probleme?
Thema durchsuchen
Ansicht
Themen-Optionen

TShellDropper und Windows 8.1: Probleme?

Ein Thema von ULIK · begonnen am 25. Nov 2013 · letzter Beitrag vom 24. Jun 2015
Antwort Antwort
Benutzerbild von ULIK
ULIK

Registriert seit: 25. Sep 2006
Ort: Regensburg
416 Beiträge
 
Delphi 11 Alexandria
 
#1

TShellDropper und Windows 8.1: Probleme?

  Alt 25. Nov 2013, 10:53
Servus,

eine Frage: sind eigentlich Probleme von TShellDropper unter Windows 8.1 bekannt? Ich verwende die Komponente und bis Windows 8 läuft alles glatt und ich kann Dateien vom Explorer auf meine Anwendung ziehen, aber unter Windows 8.1 enthält die Fileliste zwar den richtigen Dateinamen, aber einen falschen Pfad?!

So verwende ich den Shelldropper:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  lDropControl: TDropControl;
begin
  Si.Connections := 'file(filename=log.sil)';
  si.Enabled := true;

  // Via ShellDropper
  FDropTarget := TShellDropper.Create(self);
  FDropTarget.OnDragEnter := HandleExternalDragDropEnter;
  FDropTarget.OnDrop := HandleExternalDragDrop;

  lDropControl := TDropControl.Create(FDropTarget.Controls);
  lDropControl.Control := self;
  lDropControl.Enabled := true;
end;
und in HandleExternalDragDropEnter wird geprüft, ob die Dragoperation angenommen werden soll (ja, wenn die Datei existiert und der Typ stimmt):
Delphi-Quellcode:
procedure TForm1.HandleExternalDragDropEnter(Sender: TObject; const DropRec: TDropRec;
    var Accept: Boolean);
var
  i: Integer;
  nFileExtType, nFileType: TIOFileType;
  strExt: string;
  strFilename: string;
begin
  // Erst einmal nichts zulassen
  Accept := False;

  memResult.Lines.Add(Format('# Files: %d', [DropRec.Files.Count]));

  // Nun Test auf Dateien
  for i := 0 to DropRec.Files.Count - 1 do
  begin
    strFilename := DropRec.Files[i];
    memResult.Lines.Add(strFilename);

    if FileExists(strFilename) then
    begin
      // Abhängig vom Format der Datei diese akzeptieren
      strExt := ExtractFileExt(strFilename);
      nFileExtType := IEExtToFileFormat(strExt);
      nFileType := FindFileFormat(strFilename);

      // PDF akzeptieren oder Grafiken, wenn bereits ein Dokument geladen ist)
      Accept := Accept or (nFileExtType = ioPDF) or ((nFileType <> ioUnknown) );

      if Accept then
        memResult.Lines.Add('Accepted')
      else
        memResult.Lines.Add('Not accepted')
    end
    else
      memResult.Lines.Add('File not available');
  end;

end;
Hier bekomme ich nun immer gemeldet, daß die Datei nicht vorhanden wäre. Ist sie auch nicht, denn DropRec.Files[i] enthält nun zwar den richtigen Dateinamen, als Pfad wird aber immer das TEMP Verzeichnis des Benutzers verwendet:
d:\data\testfile.txt --> DropRec.Files[0] = %TEMP%\testfile.txt

Wie gesagt, das passiert nur unter Windows 8.1! Kennt da jemand zufällig die Ursache? Bzw. wie man das beheben kann?

Danke, Uli
  Mit Zitat antworten Zitat
SittingDuck

Registriert seit: 11. Jan 2006
Ort: Leverkusen
159 Beiträge
 
Delphi 2010 Professional
 
#2

AW: TShellDropper und Windows 8.1: Probleme?

  Alt 24. Jun 2015, 10:41
Moin zusammen ...

zuerst mal sorry, dass ich eine schon etwas ältere Frage ausgrabe und versuche darauf zu antworten. Bei der Anwendung dieser nützlichen Unit bin ich nämlich ebenfalls auf dieses Problem gestoßen. Darauf hin habe ich mir mal den entsprechenden SourceCode angesehen und eine Änderung vorgenommen, die das Problem behebt. Per Zufall würde ich mal sagen ... Da ich jedoch glaube, das es das nicht sein kann bitte ich Euch um Eure Meinung dazu.
Folgende Änderung habe ich in der Funktion IsFileDescriptor vorgenommen: (Zeile: 624)

Code:
  if dataObj.GetDataHere(FormatDesc, MediumDesc) = S_OK then // vorher: nur GetData
Diese Veränderung bewirkt, dass der darauf folgende try ... finally Block wieder durchlaufen, statt das er über Exit verlassen wird und nun stimmt auch unter Win8.1 der Pfad wieder. Joa, läuft ja könnte man sagen, aber bevor ich hier irgend einen Quatsch mache ... und ggf. sind ja auch noch andere Änderungen notwendig. Die meines Wissens aktuelle (UNVERÄNDERTE) Version v1.65 der ShellDropper.pas habe ich diesem Beitrag mal mit angehängt.

Danke schon mal für Eure Ideen.
Angehängte Dateien
Dateityp: pas ShellDropper.pas (28,3 KB, 8x aufgerufen)
Ciao ... SittingDuck
iPhone Backup und mehr: iTwin v3.9 Beta ... Alternative Startleiste: Launcher v3.8 !
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 Uhr.
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