Что нового

Может ли метод GUI создавать файлы(папки)

rolatipov

Новичок
Сообщения
25
Репутация
0
Можно ли с помощью GUI создать файл(папку) в заданных координатах,допустим в окне рабочего стола(подобно тому как Windows создает в области вызова контекстного меню)?
Пока получается только создать FileCreate и переместить _GUICtrlListView_SetItemPosition.
 
Автор
R

rolatipov

Новичок
Сообщения
25
Репутация
0
madmasles,спасибо что поправил.Хотел написать _FileCreate.
Функции типа _GUI.....FileCreate в справочнике я не находил,но может просто такая функция может иметь немного другое название.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
rolatipov,
Код:
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>

GUICreate('Test', 200, 80)
$nInput = GUICtrlCreateInput('Test', 10, 10, 180, 20)
$nButton = GUICtrlCreateButton('Создать', 50, 40, 100, 30)
GUISetState()

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nButton
			$sName = GUICtrlRead($nInput)
			If Not $sName Then ContinueLoop
			$hListView = ControlGetHandle('[Class:Progman]', '', '[CLASS:SysListView32; INSTANCE:1]')
			If Not $hListView Then ContinueLoop
			If Not FileExists(@DesktopDir & '\' & $sName & '.txt') Then
				If FileWrite(@DesktopDir & '\' & $sName & '.txt', '') Then
					Sleep(2000)
					$iIndex = _GUICtrlListView_FindText($hListView, $sName & '.txt', -1, False)
					If $iIndex >= 0 Then
						_GUICtrlListView_SetItemPosition($hListView, $iIndex, 200, 200)
					EndIf
				EndIf
			EndIf
			If Not FileExists(@DesktopDir & '\' & $sName) Then
				If DirCreate(@DesktopDir & '\' & $sName) Then
					Sleep(2000)
					$iIndex = _GUICtrlListView_FindText($hListView, $sName, -1, False)
					ConsoleWrite($iIndex & @LF)
					If $iIndex >= 0 Then
						_GUICtrlListView_SetItemPosition($hListView, $iIndex, 200, 250)
					EndIf
				EndIf
			EndIf
	EndSwitch
WEnd
 
Автор
R

rolatipov

Новичок
Сообщения
25
Репутация
0
madmasles,а в чем принципиальная разница между твоим и моим методом?
Файл(папка) сначала падает в окно рабочего стола,а уж затем только перемещается в указанные координаты.Он не создается там сразу.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
rolatipov [?]
в чем принципиальная разница между твоим и моим методом?
А я Вашего метода не вижу, я пример привел.
Файл(папка) сначала падает в окно рабочего стола,а уж затем только перемещается в указанные координаты.Он не создается там сразу.
Файл(папка) создается в папке @DesktopDir, а на рабочем столе (на экране), ИМХО, он отображается в элементе ListView как картинка.
 
Автор
R

rolatipov

Новичок
Сообщения
25
Репутация
0
А я Вашего метода не вижу, я пример привел.

1.Создаешь файл(папку) DirCreate()
2.Узнаешь индекс этого файла(папки) _GUICtrlListView_FindInText
3.Перемещаешь файл(папку) в заданные координаты _GUICtrlListView_SetItemPosition


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

Файл(папка) создается в папке @DesktopDir, а на рабочем столе (на экране), ИМХО, он отображается в элементе ListView как картинка.

Но ведь стандартный инструмент Windows(пункт контекстного меню создать) создает файл именно там где ты вызвал контекстное меню(т.е. определяет координаты его вызова).При этом файл не вываливается куда попало.Я конечно понимаю что AutoIt может и не иметь похожих инструментов(я еще плохо в нем орриентируюсь) поэтому и спрашиваю.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Меня забавляют такие заявления, как "AutoIt не может...", "AutoIt не умеет..." и т.д. Ребята, AutoIt может все тоже самое (ну почти), что и любой другой ЯП любого уровня, вопрос только в способах реализации. IMHO, трудно найти другой ЯП, в котором было бы включено по умолчанию столько библиотек, сколько присутствует в AutoIt. А если говорить о сторонних UDF, то здесь, наверное, AutoIt вне конкуренции. Есть несколько ключевых UDF, например AutoItObject, GDIP, WinAPIEx и др., которые открывают практически все возможности, предоставляемые Windows API. Обычно тот, кто говорит о том, что "AutoIt не умеет...", сам мало представляет чего именно хочет.

По поводу вопроса. Размещение иконок на рабочем столе, это прерогатива Windows Explorer. Вы же не просите функции, например, для работы с панелями в Adobe Photoshop. Так же и здесь, никакой ЯП этого "не умеет", т.е. специальных средств для этого нет. Но вы легко можете это обойти, т.к. Windows API предоставляет все необходимые средства для работы с ListView, а в AutoIt есть UDF на эту тему. Собственно, единственно верное решение вы уже сами предложили.
 

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Вот занятся людям нечего как таскать папки, файлы по рабочему столу... :rofl:


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

OffTopic:
Yashied Ну я могу сказть что Autoit не умеет, Много поточность и dll
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Ganibal95 сказал(а):
AutoIt не умеет много поточность и dll...

А я не умею фио летовый. Это вообще на каком языке написано? (риторический вопрос)


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

AutoIt не может создавать DLL в силу того, что не является компилятором, но прекрасно работает с ними. В принципе, они ему и не нужны. DLL пишутся на языках более низкого уровня.

Многопоточность не поддерживается по той же причине. Но, если очень хочется, то можно прикрутить. Например Copy UDF и NotifyBox UDF используют многопоточность.

Но, например, такие возможности как Assign(), Execute() и т.д., вы не встретите в других ЯП-компиляторах. А функции Control... и Win... для многих вобще являются незаменимыми.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Yashied
уровень абстракции AutoIt такой же как и у Python, но последний поддерживает многопоточность.
 
Верх