1

Тема: AHK: SelectedItems из FileDialog

Есть код который получает список выделенных файлов и папок в окне проводника и рабочего стола.
Как получить тоже самое из окон "Сохранить как" и "Выбрать папку"?

Смотрел тут, но так и не понял возможно ли это.
https://docs.microsoft.com/en-us/previo … dfrom=MSDN
https://www.autohotkey.com/boards/viewt … 83#p145883
https://www.autohotkey.com/boards/viewt … 73#p302618
https://www.autohotkey.com/boards/viewt … 75#p302675


1::MsgBox % sel := JEE_ExpWinGetSel()


JEE_ExpWinGetSel(hWnd:=0, vSep:="`n")
{
	local oItem, oWin, oWindows, vCount, vOutput, vWinClass
	DetectHiddenWindows, On
	(!hWnd) && hWnd := WinExist("A") 
	WinGetClass, vWinClass, % "ahk_id " hWnd
	if (vWinClass = "CabinetWClass") || (vWinClass = "ExploreWClass")
	{
		for oWin in ComObjCreate("Shell.Application").Windows
			if (oWin.HWND = hWnd)
				break
	}
	else if (vWinClass = "Progman") || (vWinClass = "WorkerW")
	{
		oWindows := ComObjCreate("Shell.Application").Windows
		VarSetCapacity(hWnd, 4, 0)
		;SWC_DESKTOP := 0x8 ;VT_BYREF := 0x4000 ;VT_I4 := 0x3 ;SWFO_NEEDDISPATCH := 0x1
		oWin := oWindows.FindWindowSW(0, "", 8, ComObject(0x4003, &hWnd), 1)
	}
	else
		return

	vCount := oWin.Document.SelectedItems.Count
	vOutput := ""
	VarSetCapacity(vOutput, (260+StrLen(vSep))*vCount*2)
	for oItem in oWin.Document.SelectedItems
		if !(SubStr(oItem.path, 1, 3) = "::{")
			vOutput .= oItem.path vSep
	oWindows := oWin := oItem := ""
	return SubStr(vOutput, 1, -StrLen(vSep))
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

2

Re: AHK: SelectedItems из FileDialog

Никак, эти диалоги не относятся к процессу проводника. Можно только из своего процесса, либо инжектом кода.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: SelectedItems из FileDialog

Через ControlGetText.

4

Re: AHK: SelectedItems из FileDialog

Путь к файлу?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: SelectedItems из FileDialog

Ну да через ToolbarWindow сверху.

6

Re: AHK: SelectedItems из FileDialog

Не уверен, что это надёжно.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: SelectedItems из FileDialog

Я в премьере пользуюсь уже лет 10 - не подводило.
Хотя в общем случае может и нет.
Зависит от задачи.

8

Re: AHK: SelectedItems из FileDialog

А выделенные файлы как ты получаешь?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9

Re: AHK: SelectedItems из FileDialog

Через нижний edit box.

10

Re: AHK: SelectedItems из FileDialog

Туда можно что угодно написать, если это нужно для общего случая, тоже не очень вариант. Может, через Accessible конечно можно.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11

Re: AHK: SelectedItems из FileDialog

teadrinker пишет:

Туда можно что угодно написать

А смысл тогда вообще узнавать?

12

Re: AHK: SelectedItems из FileDialog

Не знаю, задача получить выделенные элементы списка. Если они выделены, значит в этот момент пользователь уже произвёл какие-то действия, соответственно, мог и запись в edit поменять.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

13 (изменено: serzh82saratov, 2021-02-01 05:39:27)

Re: AHK: SelectedItems из FileDialog

teadrinker пишет:

Может, через Accessible конечно можно.

Да, кстати очень просто, если Focus - name и Focus - value окна равны.
И тут есть плюс, можно получить выделенную папку.
Я поспешил искать сложное решение, так как всё равно там нельзя выделить несколько файлов.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

14

Re: AHK: SelectedItems из FileDialog

+ Дополнил библиотеку Explorer.

Explorer_GetSelected(hwnd="")
{
	If WinActive("ahk_class #32770")
		return Explorer_GetSelected_32770()
	return Explorer_Get(hwnd,true)
}
Explorer_GetSelected_32770(hwnd="")
{ 
	Hwnd := hwnd ? hwnd : WinExist("A")
	ControlGetFocus, CtrlFocus, ahk_id %Hwnd%
	If !InStr(CtrlFocus, "DirectUIHWND")
		return ErrorLevel := "ERROR"
	Acc := Acc_ObjectFromWindow(Hwnd) 
	While IsObject(Acc.accFocus)
		Acc := Acc.accFocus 
	child := Acc.accFocus
	name := Acc.accName(child)
	If (name != Acc.accValue(child))
		return ErrorLevel := "ERROR"
	ControlGetText, Dir, ToolbarWindow324 
	Dir := RegExReplace(Dir, ".*?:\s+(.*)", "$1")
	If !FileExist(Dir "\" name)
		return ErrorLevel := "ERROR"
	Return Dir "\" name  
}
Malcev пишет:

Через ControlGetText.

Но остаётся проблема получения папки Рабочий стол, Видео, Документы, Загрузки и.т.п.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

15

Re: AHK: SelectedItems из FileDialog

Похоже самое надёжное из доступного, это буфер обмена.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

16

Re: AHK: SelectedItems из FileDialog

serzh82saratov пишет:

Но остаётся проблема получения папки Рабочий стол, Видео, Документы, Загрузки и.т.п.

Через known folders guid.
Только я так и не понял зачем всё это надо?

17

Re: AHK: SelectedItems из FileDialog

serzh82saratov пишет:
ControlGetText, Dir, ToolbarWindow324

На семёрке ToolbarWindow323.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

18

Re: AHK: SelectedItems из FileDialog

Malcev пишет:

known folders guid

У тебя есть код, который русские имена преобразует в путь к папке?

Malcev пишет:

Только я так и не понял зачем всё это надо?

Есть разные хоткеи на выделенные файлы, бывает что хочется их нажать в диалоге "Сохранить как".

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

19

Re: AHK: SelectedItems из FileDialog

Malcev пишет:

Только я так и не понял зачем всё это надо?

Malcev пишет:

Я в премьере пользуюсь уже лет 10 - не подводило.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

20

Re: AHK: SelectedItems из FileDialog

teadrinker пишет:

На семёрке ToolbarWindow323.

Я себе на буфер обмена переделал, хорошо работает.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

21 (изменено: Malcev, 2021-02-02 13:35:54)

Re: AHK: SelectedItems из FileDialog

Но это конкретно в премьере и в моем случае.
Но, например чтобы знать, что программа будет импортировать надо смотреть в edit контрол, а не в то, что выделено.
https://www.autohotkey.com/boards/viewt … 94#p286094

22

Re: AHK: SelectedItems из FileDialog

Так это надо делать список всех соответствий: "Название папки (на нужном языке) - CLSID".

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

23

Re: AHK: SelectedItems из FileDialog

Да.

24

Re: AHK: SelectedItems из FileDialog

В случае получения выделенного, я думаю это избыточно.
В случае получения выходного может быть.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

25

Re: AHK: SelectedItems из FileDialog

Мы рассматриваем общий случай или конкретно твой?
Так-как в общем случае может быть выделено и несколько файлов.

26

Re: AHK: SelectedItems из FileDialog

Если общий, то через iaccessible получаешь объект из окна и перебираешь элементы, проверяя state - selected.

27

Re: AHK: SelectedItems из FileDialog

Malcev пишет:

Так-как в общем случае может быть выделено и несколько файлов.

В FileDialog разве может быть выделено несколько?

Malcev пишет:

проверяя state - selected

Не пробовал, AhkSpy не показывает, но скорее всего.

Но для общего случая остаётся вопрос с получением папки.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

28

Re: AHK: SelectedItems из FileDialog

serzh82saratov пишет:

В FileDialog разве может быть выделено несколько?

Конечно. Например при импорте файлов.

serzh82saratov пишет:

Не пробовал, AhkSpy не показывает, но скорее всего.

Я смотрел через AccExplorer.

serzh82saratov пишет:

Но для общего случая остаётся вопрос с получением папки.

Либо через тулбар с конвертацией known folders, либо через clipboard.

29

Re: AHK: SelectedItems из FileDialog

serzh82saratov пишет:

AhkSpy не показывает

А, нет, туплю, надо было на всю строку целиком навести.

Ну, так как готового списка нет, а меня пока интересует активное окно, и только выделенные файлы, то проще через clipboard,

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui