Что нового

Не работает стандартный механизм Drag&Drop

Pat4005

Новичок
Сообщения
85
Репутация
4
Здравствуйте. Мне необходимо получить имя файла, брошенного на элемент Pic. Нашёл на форуме много примеров работы Drag&Drop (в том числе и с помощью _WinAPI_DragQueryFileEx), но ни один из них не заработал на моей машине. И как вообще работает стандартный способ? Насколько я понял, необходимо произвести следующие действия: создать окно с расширенным стилем $WS_EX_ACCEPTFILES, создать элемент (я пробовал как Pic, так и Input) и установить для него флаг $GUI_DROPACCEPTED, а затем отлавливать сообщение $GUI_EVENT_DROPPED, в котором будет содержаться путь к файлу, то есть –@GUI_DragFile. Может я что-то сделал не так, или пытаться бесполезно и это известный недочёт AutoIt?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
перетащить картинку на окно

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Form1", 600, 440, -1, -1, -1, $WS_EX_ACCEPTFILES)
$pic = GUICtrlCreatePic("", 0, 0, 600, 440)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
GUICtrlSetState(-1, $GUI_DISABLE)
$label = GUICtrlCreateLabel('', 10, 10, 590, 17)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetFont(-1, 10, 800, 2, "Arial")
GUICtrlSetColor(-1, 0xff0000)
GUISetState(@SW_SHOW)


While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $GUI_EVENT_DROPPED
			GUICtrlSetImage($pic, @GUI_DragFile)
			WinSetTitle($Form1, '', @GUI_DragFile)
			GUICtrlSetData($label, @GUI_DragFile)
	EndSwitch
WEnd
 
Автор
P

Pat4005

Новичок
Сообщения
85
Репутация
4
Благодарю. Я, правда, делал тоже самое) Не запускалось опять же.. пока не скомпилировал скрипт. Хм, может что-то с правами доступа на Windows 8.1. Кто-то упоминал, что ещё не запускается с директивой #RequireAdmin.


Добавлено:
Сообщение автоматически объединено:

Да, только что проверил, при запуске от имени администратора уже скомпилированный скрипт отказывается работать в Drag&Drop ключе.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Pat4005 [?]
скрипт отказывается работать
Дело не в скрипте, а в правах. Запустите блокнот и перетащите в него файл из проводника - блокнот откроет файл. Теперь запустите блокнот с правами администратора - и перетаскивания из проводника работать не будут. Перетаскивать можно между окнами с одинаковыми правами или в сторону уменьшения (от админа к пользователю).
 
Верх