Что нового

Открытие папки с определенными видом и группировкой

TheBloodTear

Знающий
Сообщения
36
Репутация
9
Всем доброго времени суток ;)..

Есть потребность открыть папку при помощи AutoIt'а.. Обычное открытие - это не проблема, но нужно чтобы при открытии папка имела заданный вид.. А конкретней, нужно чтобы был вид "Таблица" или "Список", и группировка по дате изменения :smile:..

Пробовал искать в сторону ключей к запуску "explorer.exe", но там есть только возможность открытия папки и выделение конкретного файла, а по поводу вида ни слова :(..

P.S. Советы по поводу "Зайди в Свойства Папок и там выставь" прошу не отписывать, так как это требуется делать только для папок открытых непосредственно AutoIt'ом :smile:..

Заранее всем спасибо :smile:..
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
У мня такой пример.
Проверял на Win XP Pro SP3 (rus)
Код:
ShellExecute("D:\Programs") ; открыть папку
WinWaitActive("[CLASS:CabinetWClass]", "Programs"); ждем активации нашего окна
$handle = WinGetHandle("[CLASS:CabinetWClass]", "Programs"); запоминаеи его хендл
If @error Then
    MsgBox(16, "Ошибка", "Окно не найдено")
; дальше шлем нашему окну нажатия клавиш	
Else
	;сначала для Вид-Таблица
    Sleep(100)
    ControlSend($handle, "", "", "{ALT}{в}"); комбинация клавиш Alt + русская в (&Вид)
	Sleep(100)
	ControlSend($handle, "", "", "{т}") ; затем русская "т" (&Таблица)
	;терерь упорядочить по дате изменения
	ControlSend($handle, "", "", "{ALT}{в}") ; опять комбинация клавиш Alt + русская "в" (&Вид)
	Sleep(100)
	ControlSend($handle, "", "", "{у}") ; затем русская "у" (&Упорядочить значки)
	Sleep(100)
	ControlSend($handle, "", "", "{з}") ; затем русская "з" (И&зменен)
EndIf
Exit
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
У меня сейчас нет XP под рукой, но это должно работать.

Код:
_SendMessage(WinGetHandle(...), $WM_COMMAND, 28715, 0)
 

AZJIO

Меценат
Меценат
Сообщения
2 752
Репутация
1 149
попробуй отправить открытой папке команды
Shift+F10 > в > т
или
Alt+в > у > з
посмотри SaveFolders, я там ещё делал проверку, чтоб русский язык был включен, а после команд возвращал раскладку по умолчанию.

строка 503 SaveFolders
Код:
Func _CreateFT()
	$window=WinGetTitle('')
	If $window <> "" And $window <> "Program Manager" And StringRight(_ProcessGetPath(WinGetProcess($window)), 13)='\explorer.exe' Then
		$win_handle = WinGetHandle ($window)
		_SetKeyboardLayout("00000419", $win_handle)
		Send("!{ф}")
		Sleep(100)
		Send("{а}")
		If @HotKeyPressed=$CrTx Then
			Send("{т}") ; текстовый документ
			_Rename()
		Else
			Send("{п}") ; папка
		EndIf
		_SetKeyboardLayout($langdef, $win_handle) ; возвращаем язык по умолчанию
	EndIf
EndFunc
 
; переключение раскладки клавиатуры
Func _SetKeyboardLayout($sLayoutID, $hWnd)
    Local $ret = DllCall("user32.dll", "long", "LoadKeyboardLayout", "str", $sLayoutID, "int", 0)
    DllCall("user32.dll", "int", "SendMessage", "hwnd", $hWnd, "int", 0x50, "int", 1, "int", $ret[0])
EndFunc
 
Автор
T

TheBloodTear

Знающий
Сообщения
36
Репутация
9
Yashied сказал(а):
У меня сейчас нет XP под рукой, но это должно работать.

Код:
_SendMessage(WinGetHandle(...), $WM_COMMAND, 28715, 0)
Yashied спасибо огромное ;).. Но есть еще одна маленькая просьба :-[.. Что нужно послать окну, чтобы оно приняло вот такой вид:



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

Вопрос исчерпан ;D.. Спасибо всем, кто откликнулся ;)..

Если кому пригодится это то вот:
28717; Thumbnails
28713; Large Icons
28714; Small Icons
28715; List
28716; Details
28717; Thumbnails
28718; Tiles
30209; Show in groups
30210; Name
30211; Size
30212; Type
30213; Date modified
30214; Date Created
30215; Date Accessed
30216; Attributes
30217; Status
30218 ; Owner
30219; Author
 
Автор
T

TheBloodTear

Знающий
Сообщения
36
Репутация
9
Еще один вопрос

А как считать с открытого окна стиль?.. Именно используется ли в нем группировка и сортировка или нет.. А то при открытии окна несколько раз виды меняются :wacko:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Код:
#Include <GUIListView.au3>

$hWnd = WinGetHandle(...)
$hListView = ControlGetHandle($hWnd, '', '[CLASS:SysListView32; INSTANCE:1]')
ConsoleWrite(_GUICtrlListView_GetView($hListView) & @CR)


Кстати, сменить стиль можно с помощью _GUICtrlListView_SetView().

:smile:
 
Автор
T

TheBloodTear

Знающий
Сообщения
36
Репутация
9
Yashied сказал(а):
Код:
#Include <GUIListView.au3>

$hWnd = WinGetHandle(...)
$hListView = ControlGetHandle($hWnd, '', '[CLASS:SysListView32; INSTANCE:1]')
ConsoleWrite(_GUICtrlListView_GetView($hListView) & @CR)


Кстати, сменить стиль можно с помощью _GUICtrlListView_SetView().

:smile:
Yashied, таким способом я только смогу увидеть "вид" окна :(.. А мне больше интересно как узнать есть ли группировка или сортировка в открытом окне :(..

Я пересмотрел уже "половину" интернета, но что-то безуспешно :(.. Есть уже идеи обнулить кеш вида папок перед открытием, но даже это не знаю как :(..


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

Ай-ай-ай, все понял :smile:.. Спасибо ;).. :beer:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
Если нужна именно групировка (тоненькие синенькие полосочки-разделители), то

Код:
_GUICtrlListView_GetGroupViewEnabled($hListView)
 
Верх