2016-07-06 5 views
0

Я пытаюсь создать представления цикла цикла в проводнике Windows (библиотеки Windows 7 не позволяют запоминать настройки просмотра для каждой папки).Как установить и установить параметры просмотра проводника Windows

Я нашел postMessage с сообщением WM_COMMAND (код 0x111), но не может его использовать, чтобы повлиять на представление Проводника. Ничего не происходит, когда я посылаю:

PostMessage,0x111,0x702c,0,,ahk_id %parent% 

где %parent% является дескриптор окна. Примеры на форумах для Windows XP, которые, похоже, работают по-другому. Как установить и установить настройку просмотра?

ответ

0

Найден UDF для AutoIt, который работает для меня. Это называется automating windows explorer. Код ниже, который я написал на основе примера форума, показывает рабочий пример получения представления и изменения его, увеличивая существующее состояние.

Так как это для Windows 7, я пропускаю миниатюры и всплывающие окна - я думаю, что это для Vista. Просмотр содержимого также не поддерживается Vista.

Я искал имена и значения Windows Constants. Я нашел правильные размеры взглядов, экспериментируя/просматривая собственные результаты.

#include "Includes\AutomatingWindowsExplorer.au3" 

;Icon sizes are standard: 16, 48, 96, 196 
;Details & list: 16 
;Tiles: 48 
;Content: 32 (!) 
;~ FVM_ICON  = 1, (48, 96, 196) 
;~ FVM_SMALLICON = 2, (16) 
;~ FVM_LIST  = 3, 
;~ FVM_DETAILS  = 4, 
;~ FVM_THUMBNAIL = 5, (seems to be same as ICON in win7) 
;~ FVM_TILE  = 6, 
;~ FVM_THUMBSTRIP = 7, (seems to be same as ICON in win7) 
;~ FVM_CONTENT  = 8, 

Opt("MustDeclareVars", 1) 

Example() 

Func Example() 
    ; Windows Explorer on Vista, 7, 8 
    Local $hExplorer = WinGetHandle("[REGEXPCLASS:^(Cabinet|Explore)WClass$]") 
    If Not $hExplorer Then 
    MsgBox(0, "Automating Windows Explorer", "Could not find Windows Explorer. Terminating.") 
    Return 
    EndIf 

    ; Get an IShellBrowser interface 
    GetIShellBrowser($hExplorer) 
    If Not IsObj($oIShellBrowser) Then 
    MsgBox(0, "Automating Windows Explorer", "Could not get an IShellBrowser interface. Terminating.") 
    Return 
    EndIf 

    ; Get other interfaces 
    GetShellInterfaces() 

    ; Get current icon view 
    Local $view = GetIconView() ;returns array [view,size] 

    ; Determine the new view 
    Local $iView, $iSize, $iNewView, $iNewSize 
    $iView = $view[0] ; Icon view 
    $iSize = $view[1] ; Icon size 
    If $iView = 8 Then 
     $iNewView = 1 
     $iNewSize = 48 
    Else 
     $iNewView = $iView + 1 
     If $iNewView = 5 Or 7 Then 
     $iNewView += 1 ;skip from 5 to 6, or from 7 to 8 
     EndIf 
    EndIf 
    Switch $iNewView 
    Case 2 To 4 
    $iNewSize = 16 
    Case 6 
    $iNewSize = 48 
    Case 8 
    $iNewSize = 32 
    EndSwitch 

    ;MsgBox(0, "NewView", $iNewView) 
    SetIconView($iNewView, $iNewSize) ; Set details view 
    Sleep(1000)      ; Wait 
    SetIconView($iView, $iSize)  ; Restore old view 
EndFunc 
0

Вы можете попробовать следующее. Он запускает постоянный скрипт, который запускает подпрограмму таймера, которая ищет окна типа «Сохранить-как», и когда она встречается с ней, она отправляет найденное окно некоторым нажатиям клавиш. Обратите внимание, что клавиши для отправки WILL DEFINITELY DEPEND, на которых вы используете Win-версию, - и у меня были проблемы со стандартными ярлыками Win 7, и, следовательно, использовались для работы в kludgey. Из комментариев в коде должно быть ясно, что я делаю, и это должно помочь вам сделать то, что вам нужно.

#Persistent 
SetTitleMatchMode, 2 ; Matches all titles with the designated words in it (picks the top most) 
SetTimer, MaxAll, 150 ; time in ms 
return 

MaxAll: 
IfWinActive, Save MoviePlus File As ; runs only on "Save MoviePlus File As" 
    DoIt("Movie") 
IfWinActive, Save ; runs on "Save" "Save As" "Save File" etc. 
    DoIt("Save") 
IfWinExist, Open ; runs on "Open" "Open File" "File Open" etc. 
    DoIt("Open") 
IfWinExist, Import ; runs on "Import" "File Import" "Import Commands" etc. 
    DoIt("Import") 
return 

DoIt(Type) 
{ 
SetTimer, MaxAll, Off ; turn of timer 
sleep, 250 
WinMaximize ; maximize the window (or comment out) 
sleep, 250 
Send, !n ; start at the Filename textbox 
sleep, 250 
Send, +{tab} ; SHIFT+TAB to move to files pane 
sleep, 250 
; Send, ^+5 ; CTRL+SHIFT+5: Win8.1 to go to "List View" 
; Send, ^!5 ; CTRL+ALT+5: Win8 to go to "List View" 
; Send, {LAlt}vl ; LEFTALT+V+L: Win7 to go to "List View" - but doesn't work consistently 
SendEvent, {F3}{tab}{right 2}{down}{end}{up 3}{enter} ; Navigate to "View" drop-down-list starting from from search bar 
sleep, 250 
IfEqual, Type, Open ; If the dialog was a File Open 
    { 
    Send, !p ; ALT+P: Toggles preview pane 
    sleep, 250 
    } 
IfEqual, Type, Movie ; If the dialog was for MoviePlus 
    { 
    Send, ^!p ; Ctrl+ALT+P: Toggles preview pane? Google the keyboard shortcuts (I didn't check) 
    sleep, 250 
    } 
Send, !n ; back to Filename textbox 
WinWaitClose ; wait to close the dialog 
SetTimer, MaxAll, On ; turn timer back on 
return 
} 

+esc::ExitApp ; Shift+Esc ends script 

НТН,

+0

Btw, вы должны иметь возможность легко адаптировать его для работы по требованию (то есть, с ярлыком) - просто устранить сохранение и таймер, дать ему триггер быстрого доступа и сделать его прямым GoTo: 'GoTo, MaxAll', и вы должны иметь его. – PGilm

+2

Я понимаю ваш сценарий, но, к сожалению, это не то, что мне нужно. Для правильного циклического изменения настроек представления любого окна проводника мне необходимо определить текущее состояние. Мне кажется, мне нужен dllcall. – jiggunjer

+0

IDK, не Win7 всегда запускает окно проводника в том же состоянии? Что вы подразумеваете под «циклом»? Если вам нужно перейти в какое-либо конкретное состояние из начального состояния, мой код может доставить вас туда. Если вам просто нужен ярлык для изменения вида (значки, плитки, список, детали и т. Д.), Встроенные ярлыки (см. Комментарии в моем коде). Если вам нужен ярлык AHK, который переходит к следующему виду из любого вида, в котором вы находитесь, это сложнее, я допускаю, и может потребовать сохранения переменной для отслеживания состояния представления. Конечно, кое-что по этим линиям не так сложно. – PGilm

 Смежные вопросы

  • Нет связанных вопросов^_^