Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

Vollständigen Dateipfad aus Clipboardall auslesen


  • Please log in to reply
13 replies to this topic
Johnny R
  • Members
  • 54 posts
  • Last active: Sep 18 2015 05:36 AM
  • Joined: 03 Nov 2012

Im Zusammenhang mit meinem Filename Shortener suche ich nach einer Möglichkeit, aus der Variable Clipboardall den vollständigen Dateipfad auszulesen nachdem ich vorher im Explorer mit Ctrl+C eine Datei kopiert habe.

 

Wenn ich Clipboardall mit FileAppend in eine Datei schreibe, ist der gesuchte vollständige Dateipfad zwar zu sehen, aber so kryptisch, daß ich damit nicht klarkomme...

 

Weiß jemand Hilfe?



nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012

Hier:



GetFileName()
{
If DllCall("IsClipboardFormatAvailable","UInt",15)
{
f:=[]
DllCall("OpenClipboard","Uint",0)
hMem:=DllCall("GetClipboardData","UInt",15)
DllCall("Shell32.dll\DragQueryFileA","Ptr",hmem,"UInt",0xFFFFFFFF,"Ptr",0,"UInt",0)
Loop, % DllCall("Shell32.dll\DragQueryFileA","Ptr",hmem,"UInt",0xFFFFFFFF,"Ptr",0,"UInt",0)
   {
	VarSetCapacity(b,c:=DllCall("Shell32.dll\DragQueryFileA","UPtr",hmem,"UInt",A_Index-1,"UPtr",0,"UInt",0)+1)
	DllCall("Shell32.dll\DragQueryFileA","UPtr",hmem,"UInt",A_Index-1,"UPtr",&b,"UInt",c)
	f.insert(Strget(&b,c,"CP0"))
   }
DllCall("CloseClipboard")
return f
}
}





;;;;;;;__________________________________________________________
;;;Beispiel
F3::
h:=GetFileName()
Msgbox % h.MaxIndex()
For each,FileName in h
	Msgbox % FileName
return

Visit the new forum ahkscript.org.

http://ahkscript.org


Johnny R
  • Members
  • 54 posts
  • Last active: Sep 18 2015 05:36 AM
  • Joined: 03 Nov 2012

@nnnik, ist ja unglaublich, wie schnell Du das hingezaubert hast! Man merkt halt doch, wenn sich jemand so richtig auskennt und nicht nur so dahindilettiert wie ich...

 

Das Skript funktioniert leider noch nicht ganz richtig. Dein Bespielskript liefert zunächst immer die Anzahl der markierten Dateien und nicht die erste markierte Datei. Und irgendwann kommt dann immer ein Leerstring. Kann man da noch etwas machen?

 

Verrätst Du noch, wo die Funktionen "IsClipboardFormatAvailable", "OpenClipboard", "GetClipboardData" etc. versteckt sind?



nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012

 

Das Skript funktioniert leider noch nicht ganz richtig. Dein Bespielskript liefert zunächst immer die Anzahl der markierten Dateien und nicht die erste markierte Datei. Und irgendwann kommt dann immer ein Leerstring. Kann man da noch etwas machen?

Nun ja ich liefere eig. nie fertige Scripts ab.

Hier ist es nur ein Beispiel.

F3::
h:=GetFileName()
Msgbox % h.MaxIndex()
For each,FileName in h
	Msgbox % FileName
return

Es ruft die Funktion GetFileName (Die oben steht ) auf. Und Speichert das Ergebnis (ein Array~Liste(sihe Hilfe)).

Msgbox % h.Maxindex() sorgt dann dafür, dass der Höchste Wert des Arrays zurückgegeben wird.

For each,FileName in h
	Msgbox % FileName

sorgt dann dafür, dass alle Einträge des Arrays durchlaufen werden.

 

Falls ein Leerstring entsteht ist es der Fehler von Windows.

Solche Fehler kann man ganz leicht rausfiltern.

 

 

Verrätst Du noch, wo die Funktionen "IsClipboardFormatAvailable", "OpenClipboard", "GetClipboardData" etc. versteckt sind?

Das sind sogenannte DllCalls also man ruft eine externe Dll auf.(siehe Hilfe Tutorial etc.)

Die Funktionen verstecken sich also in Dlls.

Diese kannst du dir aus dem Internt runterladen...

Die Funktionen die Hier benutzt werden sind jedoch in Windows schon integriert, d.h. findet man sie in MSDN:

http://msdn.microsoft.com/en-US/

Dort musst du sie dann einfach suchen.


Visit the new forum ahkscript.org.

http://ahkscript.org


Johnny R
  • Members
  • 54 posts
  • Last active: Sep 18 2015 05:36 AM
  • Joined: 03 Nov 2012
Falls ein Leerstring entsteht ist es der Fehler von Windows.

Das glaube ich eigentlich nicht. Ein Dateiname wird nämlich immer nicht richtig wiedergegeben, sondern als Leerstring, wird also ausgelassen. Wenn nur eine einzige Datei kopiert wurde, wird nur ein Leerstring ausgegeben und nicht die kopierte Datei. Diese wird ausgelassen. Da ist also irgendwo ein Wurm, bzw. ein Bug.

 

Kann man der Funktion ggf. auch noch die fehlerhafte Wiedergabe von Umlauten und ß etc. abgewöhnen?



nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012
MSDN baut manchmal echt Mist.
In der Hilfe steht:

Index of the file to query. If the value of this parameter is 0xFFFFFFFF, DragQueryFile returns a count of the files dropped. If the value of this parameter is between zero and the total number of files dropped, DragQueryFile copies the file name with the corresponding value to the buffer pointed to by the lpszFile parameter.

Das bedeutet für mich 1-Anzahl der Dateien
Aber in den Kommentaren steht.

The sentence "If the value of this parameter is between zero and the total number of files dropped, DragQueryFile copies the file name [...]" is slightly incorrect.


Of course, zero is a valid index value as well, but COUNT is not.


:-)

In den Kommentaren steht genau das Gegenteil.
Habs Geedited.

Visit the new forum ahkscript.org.

http://ahkscript.org


Johnny R
  • Members
  • 54 posts
  • Last active: Sep 18 2015 05:36 AM
  • Joined: 03 Nov 2012

@nnnik, vielen Dank! Jetzt ist dieser Bug behoben. Bin happy.

 

Nur mit den Umlauten habe ich noch mein Problem. An Stelle der Umlaute erhalte ich nur Fragezeichen...

Ich benutze AHK v1.1.13.00 Ansi 32-Bit.

 

btw:

Ich kann Code aus dem Forum nur völlig unformatiert (ohne Einrückungen) kopieren. Was mache ich falsch?

 

EDIT:

Ich habe jetzt in Zeile 14 statt

f.insert(Strget(&b,c,"UTF-8"))

den Code

f.insert(Strget(&b,c, "CP0"))

verwendet. Das scheint funktioniert und mein Umlautproblem behoben zu haben.



nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012

Ich kann Code aus dem Forum nur völlig unformatiert (ohne Einrückungen) kopieren. Was mache ich falsch?

Gar nichts nur die Forum-Software möchte durch ihre Einzigartigkeit bestechen in dem es alle Einrückungen entfernt.

Visit the new forum ahkscript.org.

http://ahkscript.org


Johnny R
  • Members
  • 54 posts
  • Last active: Sep 18 2015 05:36 AM
  • Joined: 03 Nov 2012
die Forum-Software möchte durch ihre Einzigartigkeit bestechen in dem es alle Einrückungen entfernt.

Ich glaube, die Forensoftware ist in puncto Code-Tags ganz dringend renovierungsbedürftig! Ein Programmierforum in dem die Codes nicht funktionieren ist wie eine Formel 1- Rennstrecke wo man nicht tanken und Reifen wechseln kann...



Alibaba
  • Members
  • 435 posts
  • Last active: Nov 19 2014 04:21 PM
  • Joined: 01 Nov 2012
Du glaubst doch nicht tatsächlich, dass sich bisher noch keiner darüber beschwert hat, oder?
Das Problem liegt eher beim fehlenden Interesse der verantwortlichen für die Probleme des Forums.

Find the recent autohotkey version here: ahkscript.org


Johnny R
  • Members
  • 54 posts
  • Last active: Sep 18 2015 05:36 AM
  • Joined: 03 Nov 2012

Den Umweg über ClipboardAll hätte ich mir sparen können weil überraschenderweise schon die Variable Clipboard den Dateipfad zu kopierten Dateien enthält, und das sogar mit richtigen Umlauten und ohne Fragezeichen. Insoweit enthält der AHK-Clipboard also wesentlich mehr als der normale Windows-Clipboard, der mit CTRL-v bekanntlich keine solchen Dateinamen ausgibt. Man lernt doch nie aus...

 

Vielen Dank für Eure (leider vergebens aufgewendete) Mühe!



SAPlayer
  • Members
  • 403 posts
  • Last active: Apr 11 2014 04:45 PM
  • Joined: 06 Nov 2012

Das wandelt AHK automatisch um:

 

 

Dateien (die beispielsweise mit STRG+C kopiert wurden) gelten als Text: Sie werden automatisch in ihren Dateinamen umgewandelt (mit vollständigem Pfad), sobald Clipboard im Script verwendet wird. Um die Dateien einzeln zu extrahieren, befolgt dieses Beispiel:

http://ragnar-f.gith...c/Clipboard.htm



nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012
LOL grin.png

Visit the new forum ahkscript.org.

http://ahkscript.org


Alibaba
  • Members
  • 435 posts
  • Last active: Nov 19 2014 04:21 PM
  • Joined: 01 Nov 2012

Man lernt nie aus. wink.png


Find the recent autohotkey version here: ahkscript.org