- Offizieller Beitrag
Ich habe ein kleines Problem.
Und zwar möchte ich eine Datei vom Explorer auf die Toolbar in meinem Script ziehen. Im Prinzip klappt das auch.
Ich habe als Extended-Style bei der GUI "$WS_EX_ACCEPTFILES" angegeben und bei der Toolbar "$TBSTYLE_REGISTERDROP".
Somit erhalte ich bei $WM_NOTIFY einen Notification-Code "$TBN_GETOBJECT", wenn ich die Datei über der Toolbar bewege.
Das Problem ist jetzt, wie bekomme ich den Dateinamen von der Datei heraus?
Ich kriege eine piid, also wohl einen Pointer auf ein Objekt, aber was fange ich damit an? Wie kriege ich den Dateinamen raus?
Hier mal ein Minimalbeispiel:
AutoIt
#include <AutoItConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiReBar.au3>
#include <GuiToolbar.au3>
#include <RebarConstants.au3>
#include <StructureConstants.au3>
#include <ToolbarConstants.au3>
#include <WindowsConstants.au3>
Opt('GUIOnEventMode', 1)
Global $hMainGui = GUICreate('Test', 1020, 480, -1, -1, BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPCHILDREN), $WS_EX_WINDOWEDGE + $WS_EX_ACCEPTFILES)
GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseMainGui')
Global $hDrivesRebar = _GUICtrlRebar_Create($hMainGui, BitOR($CCS_TOP, $CCS_NODIVIDER, $RBS_VARHEIGHT, $RBS_BANDBORDERS))
Global $hUserToolbar = _GUICtrlToolbar_Create($hMainGui, BitOR($TBSTYLE_FLAT, $CCS_NOPARENTALIGN, $WS_CHILD, $WS_CLIPSIBLINGS, $WS_VISIBLE, $TBSTYLE_REGISTERDROP))
_GUICtrlRebar_AddToolBarBand($hDrivesRebar, $hUserToolbar, '', 0, $RBBS_NOGRIPPER)
GUISetState()
GUIRegisterMsg($WM_NOTIFY, '_WM_NOTIFY')
WinWaitClose($hMainGui)
Exit
Func _CloseMainGui()
GUIDelete($hMainGui)
EndFunc ;==>_CloseMainGui
Func _WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $wParam
Local $tNMHDR, $hWndFrom, $iCode
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, 'hWndFrom'))
$iCode = DllStructGetData($tNMHDR, 'Code')
Switch $hWndFrom
Case $hUserToolbar
Switch $iCode
Case $TBN_GETOBJECT
Local $tOBJECTNOTIFY = DllStructCreate($tagNMOBJECTNOTIFY, $lParam)
_DebugPrint("$RBN_GETOBJECT" & @CRLF & "--> hWndFrom:" & @TAB & DllStructGetData($tOBJECTNOTIFY, "hWndFrom") & @CRLF & _
"-->IDFrom:" & @TAB & DllStructGetData($tOBJECTNOTIFY, "IDFrom") & @CRLF & _
"-->Code:" & @TAB & DllStructGetData($tOBJECTNOTIFY, "Code") & @CRLF & _
"-->Item:" & @TAB & DllStructGetData($tOBJECTNOTIFY, "Item") & @CRLF & _
"-->piid:" & @TAB & DllStructGetData($tOBJECTNOTIFY, "piid") & @CRLF & _
"-->pObject:" & @TAB & DllStructGetData($tOBJECTNOTIFY, "pObject") & @CRLF & _
"-->Result:" & @TAB & DllStructGetData($tOBJECTNOTIFY, "Result"))
EndSwitch
EndSwitch
EndFunc
Func _DebugPrint($s_Text, $sLine = @ScriptLineNumber)
ConsoleWrite( _
"!===========================================================" & @CRLF & _
"+======================================================" & @CRLF & _
"-->Line(" & StringFormat("%04d", $sLine) & "):" & @TAB & $s_Text & @CRLF & _
"+======================================================" & @CRLF)
EndFunc ;==>_DebugPrint
Alles anzeigen