Hejo
Ich muss euch wieder belästigen.
Ich hätte gerne dass wenn ich eine Datei per Drag & Drop auf eine GUI ziehe, ein Ereignis ausgelöst wird. Leider schaffe ich es nur eine Datei per Drag & Drop zb in ein Textfeld zu bekommen, und dann das ganze Textfeld auszulesen. So komm ich zb sehr umständlich und unpraktisch an den Pfad zur Datei und hab in Schleifen das Problem, dass ein und derselbe Drop immerwieder gefunden wird.
Hier habe ich eine Möglichkeit gefunden, ein ganzes Form drag & dropable zu machen. Leider wird aber der Dateipfad in die Console gepostet. $DragDrop = GUIRegisterMsg(0x233, "On_WM_DROPFILES") funktioniert nicht, die Variable bleibt leer und das Ergebnis landet weiter nur in der Console. Die AutoIt-Hilfe ist für mich zu kryptisch, ich verstehe die GUIRegisterMsg-Funktion nicht.
Aber auch wenn ich ganz regulär eine Datei in ein Text- oder anderes Inputfeld ziehe, komme ich nicht an ihren Pfad, ohne das gesamte Feld auszulesen. Ich habe es mitdem @GUI_DRAGFILE Makro versucht (dass wird im Changelog erwähnt), aber die AutoIt scheint dieses nicht (mehr?) zu kennen oder so, ich find dazu auch nicht viel.
Mein eigener Ansatz war folgender:
Spoiler anzeigen
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Form1", 316, 139, 192, 124, -1, BitOR($WS_EX_ACCEPTFILES,$WS_EX_WINDOWEDGE))
$Edit1 = GUICtrlCreateEdit("", 8, 24, 297, 89)
GUICtrlSetState(-1, $GUI_ACCEPTFILES)
GUICtrlSetData(-1, "Hallo")
GUISetState(@SW_SHOW)
While 1
[/autoit] [autoit][/autoit] [autoit]$DragDrop = GuiCtrlRead($Edit1,0)
If StringLen($DragDrop) >= 10 Then MsgBox(0,"","Eine Datei wurde gedroppt: " & @CRLF & $DragDrop)
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Dieser ist natürlich totaler Blödsinn, weil ja so unendlich ein Pfad entdeckt wird, wenn im Textfeld mehr als 10 Zeichen sind. Aber ich hab einfach keine Idee. Man könnte es mit RegEx machen (zb nach ":\\" suchen) aber auch da würd man ja bei jedem Durchlauf wieder den Pfad finden. Und das Input-Feld resetten will ich nicht, ich bin eigentlich an garkeiner Visualisierung des Drops interessiert.
Also nochmal in kurz: Ich will am liebsten eine Datei auf die GUI an sich ziehen (notfalls tut es auch ein Input-Feld), und diese nicht anzeigen, sondern einfach nur in eine Variable speichern, die, sobald sie Inhalt halt, eine Aktion auslöst und dann wieder zurückgesetzt wird um auf den nächsten Drag & Drop zu warten.
Sicher nix schweres aber ich bin zu doof ![]()