Fazit: $WS_EX-Styles mit GUICtrlCreateListView und $LVS_EX-Styles mit _GUICtrlListView_SetExtendedListViewStyle setzen.
Unterstreich! Wollte gerade das Gleiche schreiben.
Fazit: $WS_EX-Styles mit GUICtrlCreateListView und $LVS_EX-Styles mit _GUICtrlListView_SetExtendedListViewStyle setzen.
Unterstreich! Wollte gerade das Gleiche schreiben.
Oh sorry, ja ich meine die unterschiedlichen Rahmen
Mir gefällt der Rahmen im linken ListView nicht. >>> hier werden die Stile direkt mit GUICtrlCreateListView gesetzt
Der Rahmen im rechten ListView ist schöner. >>> hier werden manche Stile mit _GUICtrlListView_SetExtendedListViewStyle gesetzt
Deshalb:
Fazit: $WS_EX-Styles mit GUICtrlCreateListView und $LVS_EX-Styles mit _GUICtrlListView_SetExtendedListViewStyle setzen.
Nun aber zurück zum eigentlichen Thema. Wer kann noch was zum Thema Drag & Drop beitragen
Da waren sie wieder, meine 3 ListView Probleme! ... Prima, dann ist ja 1 gelöst!
Nun aber zurück zum eigentlichen Thema. Wer kann noch was zum Thema Drag & Drop beitragen
Wie ist denn dein letzer Stand, wie sieht dein Code nun aus? Funktionieren die Tipps von B&B?
Du kannst den hier nehmen
In der Konsole steht mit dem Beispiel
Ich weiß jetzt woran es liegt.
Ich habe SciTE Admin-Rechte gegeben, damit ich au3-Dateien direkt unter C:\ speichern kann. Ist quasi mein Müllordner für schnelle Versuche.
Dies habe ich in der Registry eingestellt.
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\Program Files (x86)\\AutoIt3\\SciTE\\SciTE.exe"="~ RUNASADMIN"
Wenn ich dies deaktiviere, funktioniert es.
Gibt es einen Weg beides zu bekommen (Dateien auf C:\ speichern und Drag & Drop?)
Gibt es einen Weg beides zu bekommen (Dateien auf C:\ speichern und Drag & Drop?)
Ohne Gewähr und ungetestet: Hast du es mal mit einem Unterordner probiert?
In der Konsole steht mit dem Beispiel
Ops, da warst du wohl zu schnell... ich hatte in dem Script noch ein Exit drin... jetzt aber nicht mehr... teste es bitte noch mal.
Gibt es einen Weg beides zu bekommen (Dateien auf C:\ speichern und Drag & Drop?)
Lege ein Verzeichnis auf C:\ an, in dem du deine AutoIt-Files speicherst... dann brauchst du SciTE auch nicht mehr als Admin starten... alle anderen Lösungen sind nicht zu empfehlen!
Also in der Konsole steht das gleiche drin.
Somit hatte ich wohl bereits das aktuelle Skript.
Ok, mit einem Unterordner auf C:\ funktioniert es nun.
Somit sind alle Probleme gelöst
Danke euch 3 für die Geduld
Hier eine etwas geänderte Version des Bsp. aus der AutoIt-Hilfe zu _WinAPI_DragAcceptFiles, das auch funktioniert, wenn das Script als Administrator ausgeführt wird.
Im Original wird ein Label verwendet, für Tweaky habe ich dafür nun ein Listview verwendet... und zudem folgende auskommentierte Zeilen im Script aktiviert:
; Allow WM_DROPFILES to be received from lower privileged processes (Windows Vista or later)
#cs
If IsAdmin() Then
_WinAPI_ChangeWindowMessageFilterEx($g_hLabel, $WM_COPYGLOBALDATA, $MSGFLT_ALLOW)
_WinAPI_ChangeWindowMessageFilterEx($g_hLabel, $WM_DROPFILES, $MSGFLT_ALLOW)
EndIf
#ce
Dies ermöglicht den Empfang von WM_DROPFILES von Prozessen mit niedrigeren Berechtigungen.
Weil sich das Listview in dem geänderten Bsp. in einer Group befindet, muss bei _WinAPI_DragAcceptFiles das Handle der Group angegeben werden, ohne Group das Handle des Listviews.
;-- TIME_STAMP 2021-01-03 18:11:21
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <GuiListView.au3>
#include <WinAPI.au3>
#include <WinAPISys.au3>
#include <WindowsConstants.au3>
OnAutoItExitRegister('OnAutoItExit')
; Create GUI
Global $g_hGUI = GUICreate('Test ' & StringReplace(@ScriptName, '.au3', '()'), 420, 660)
Global $g_idGroup = GUICtrlCreateGroup('Drop here', 5, 5, 410, 650, -1, $WS_EX_TRANSPARENT)
Global $g_hGroup = GUICtrlGetHandle(-1)
Global $g_iExStyle = BitOR($LVS_EX_DOUBLEBUFFER, $LVS_EX_GRIDLINES) ; default (-1) : $LVS_EX_FULLROWSELECT, $WS_EX_CLIENTEDGE
Global $g_idListview = GUICtrlCreateListView("Droped files", 10, 20, 400, 600, BitOR($LVS_SHOWSELALWAYS, $LVS_NOSORTHEADER))
Global $g_hListview = GUICtrlGetHandle(-1)
_GUICtrlListView_SetExtendedListViewStyle($g_idListview, $g_iExStyle) ; $WS_EX-Styles mit GUICtrlCreateListView und $LVS_EX-Styles mit _GUICtrlListView_SetExtendedListViewStyle setzen.
; Mit _GUICtrlListView_GetExtendedListViewStyle($idListview) kann man sich den Wert für die $LVS_EX-Syles holen.
; Mit _WinAPI_GetWindowLong(GUICtrlGetHandle($idListview), $GWL_EXSTYLE) kann man sich den Wert für die $LVS_EX-Syles und die $WS_EX-Styles holen.
; Das AutoIt-Info-Tool zeigt bei Listviews im Tab "Control" übrigens nur den Wert für die $LVS_EX-Syles an.
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 378)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetBkColor(-1, 0xFF0000)
Global $g_idCheck = GUICtrlCreateCheckbox('Enable Drag && Drop', 10, 630, 120, 19)
GUICtrlCreateGroup("", -99, -99, 1, 1) ;close group
Global $g_hAccept = $g_hGroup ; Ohne Group = $g_hListview
Global $g_iCheck
; Allow WM_DROPFILES to be received from lower privileged processes (Windows Vista or later)
;~ #cs
ConsoleWrite('IsAdmin() = ' & IsAdmin() & @CRLF)
If IsAdmin() Then
_WinAPI_ChangeWindowMessageFilterEx($g_hAccept, $WM_COPYGLOBALDATA, $MSGFLT_ALLOW)
_WinAPI_ChangeWindowMessageFilterEx($g_hAccept, $WM_DROPFILES, $MSGFLT_ALLOW)
EndIf
;~ #ce
; Register Listview window proc
Global $g_hDll = DllCallbackRegister('_WinProc', 'ptr', 'hwnd;uint;wparam;lparam')
Global $g_pDll = DllCallbackGetPtr($g_hDll)
Global $g_hProc = _WinAPI_SetWindowLong($g_hAccept, $GWL_WNDPROC, $g_pDll)
GUISetState(@SW_SHOW)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $g_idCheck
$g_iCheck = GUICtrlRead($g_idCheck) = $GUI_CHECKED
_WinAPI_DragAcceptFiles($g_hAccept, $g_iCheck)
GUICtrlSetBkColor($g_idListview, $g_iCheck ? 0x0000FF : 0xFF0000)
EndSwitch
WEnd
Func _WinProc($hWnd, $iMsg, $wParam, $lParam)
Switch $iMsg
Case $WM_DROPFILES
Local $aFileList = _WinAPI_DragQueryFileEx($wParam)
If Not @error Then
ConsoleWrite('--------------------------------------------------' & @CRLF)
For $i = 1 To $aFileList[0]
ConsoleWrite($aFileList[$i] & @CRLF)
GUICtrlCreateListViewItem($aFileList[$i], $g_idListview)
Next
EndIf
_WinAPI_DragFinish($wParam)
Return 0
EndSwitch
Return _WinAPI_CallWindowProc($g_hProc, $hWnd, $iMsg, $wParam, $lParam)
EndFunc ;==>_WinProc
Func OnAutoItExit()
_WinAPI_SetWindowLong($g_hAccept, $GWL_WNDPROC, $g_hProc)
DllCallbackFree($g_hDll)
EndFunc ;==>OnAutoItExit
Alles anzeigen
Funktioniert