2017-06-30 27 views
0

私はテストとフィードバックをしたいと思います(私はこれが、この改造のために正しい場所です願って移動してください/適宜削除)のVisual Studio環境変数は、スクリプト

頻繁に環境変数を変更し、誰もがVisual Studioは」doesnの知っているようにそれらを自動的に拾います。

explorer.exeのすべてのインスタンスを終了して再起動すると、再起動せずに最新の環境変数セットが取得されます。

残念ながら、これは開いているウィンドウをすべて失うということです。

私はこれを回避するためにAutoHotKey(www.AutoHotKey.com)スクリプトを書いています。

; Array must be initialised 
Full_Path := Object() 

; First Array dimension must be setup 
Full_Path[j] := A_LoopField 

; Generate a list of HWND's for explorer windows 
WinGet, id, list, ahk_class CabinetWClass 

; iterate over all HWND's filling in our Full_Path array 
Loop, %id% 
{ 
    ; store hwnd in this_id for current loop 
    this_id := id%A_Index% 

    ; Get the window information for this_id 
    WinGetText, pathToStore, ahk_id %this_id% 

    ; strips the address out of the text storing in ActiveAddress 
    StringSplit, ActiveAddress, pathToStore, `n 

    ; Turn's Path Into Variable 
    pathToStore = %ActiveAddress1% 

    ; Remove's The Beginning "Address:" Phrase 
    pathToStore := RegExReplace(pathToStore, "^Address: ", "") 

    ; Remove's Carriage Returns Incase it Exist in pathToStore 
    StringReplace, pathToStore, pathToStore, `r, , all 

    ; Store the result in the Full_Path array 
    ifExist, %pathToStore% 
     Full_Path%A_Index% := pathToStore 
} 

; We can now kill all instances of explorer.exe at command prompt 
Loop, %id% 
{ 
    ; Store hwnd in id array 
    this_id := id%A_Index% 

    ; get process id to kill from stored hwnd 
    WinGet, pidVal, PID, ahk_id %this_id% 

    ; kill the explorer process 
    Run, taskkill /f /pid %pidVal% 
} 
; kill explorer shell 
RunWait, taskkill /f /im explorer.exe 

; restart explorer shell 
Run, explorer 

; open all windows we had open previously 
Loop, %id% 
{ 
    ; store actual path to open in local variable path To Open 
    pathToOpen := Full_Path%A_Index% 

    ; Run explorer providing the correct path to open 
    Run, explorer %pathToOpen% 
} 
Return 

あなたにできるアドバイスや改善があれば幸いです。 うまくいけば、それは誰か他の人にとって役に立つでしょう。

答えて

1

別のアプローチ:それは良い代替方法を提供して

; Get fullpath of all opened explorer windows: 
If WinExist("ahk_class CabinetWClass") ; explorer 
{ 
    list := "" 
    ; https://autohotkey.com/boards/viewtopic.php?p=28751#p28751 
    for window in ComObjCreate("Shell.Application").Windows 
    { 
     explorer_path := "" 
     try explorer_path := window.Document.Folder.Self.Path 
     list .= explorer_path ? explorer_path "`n" : "" 
    } 
    list := trim(list, "`n") 
    ; MsgBox, "%list%" 
} 

; We can now restart the Explorer.exe Process: 
RunWait, %comspec% /c taskkill /f /im explorer.exe ,,hide 
Process, WaitClose, explorer.exe 
Run, explorer.exe 

; open all explorer windows we had open previously: 
If (list != "") 
{ 
    Process, wait, explorer.exe 
    Loop, parse, list, `n 
     Run %A_LoopField% 
} 
+0

答えとしてマークされました。 – Hinchy

関連する問題