Messages - Nod5 [ switch to compact view ]

Pages: prev1 ... 7 8 9 10 11 [12] 13 14 15 16 17 ... 234next
56
Save to FARR_resolve_alias_variables.ahk (with UTF-8 BOM encoding). Requires AutoHotkey

Will work in most cases, but might fail on complex alias text with e.g. escaped % characters.

Code: Autohotkey [Select]
  1. SetWorkingDir %A_ScriptDir%
  2.  
  3. ; FARR_resolve_alias_variables.ahk
  4.  
  5. ; by Nod5 on 2021-03-16
  6.  
  7. ; A helper tool for FARR (Find And Run Robot) written in AutoHotkey
  8.  
  9. ; Reads alias result from active FARR "Edit Group Alias" window
  10. ; and resolves (converts) FARR's UserVar variables to text values
  11.  
  12. ; For example the variable "%uservar.Browser.Chrome%" is replaced
  13. ; with e.g. "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
  14.  
  15. ; How to use:
  16. ; Run script and press F8 when FARR Options "Edit Group Alias" window is active
  17. ; A MsgBox shows the results lines with resolved UserVars
  18.  
  19. ; Optional: uncomment lines near end of script to also
  20. ; - Copy text to clipboard
  21. ; - Write text to .txt file
  22.  
  23. ; Discussion
  24. ;   https://www.donationcoder.com/forum/index.php?topic=51199.0
  25.  
  26.  
  27. ; default path to FARR .ini file (edit this filepath if the .ini is in another location)
  28. vFarrIni := "C:\Users\" A_UserName "\Documents\DonationCoder\FindAndRunRobot\FindAndRunRobot.ini"
  29. return
  30.  
  31. #IfWinActive, Edit Group Alias ahk_exe FindAndRunRobot.exe ahk_class TAliasForm
  32. F8::
  33.   if !FileExist(vFarrIni)
  34.   {
  35.     MsgBox % "Error: FindAndRunRobot.ini not found.`n`nEdit script and add correct path to it."
  36.     ExitApp
  37.   }
  38.   ; get text from results editbox
  39.   ControlGetText, vText, TMemo2, A
  40.  
  41.   ; read UserVar data from FARR .ini
  42.   IniRead, vUserVars, % vFarrIni, ExtraSettings, UserVars, %A_Space%
  43.  
  44.   ; split lines to array
  45.   aUserVars := StrSplit(vUserVars, ">n>")
  46.  
  47.   ; object to store full variable/value pairs
  48.   aMap := Object()
  49.  
  50.   For Key, vLine in aUserVars
  51.   {
  52.     vLine := TRim(vLine)
  53.    
  54.     ; skip blank or comment line
  55.     if !vLine or (SubStr(vLine, 1, 2) = "//")
  56.       continue
  57.  
  58.     ; [Section]
  59.     if RegExMatch(vLine, "^\[(.+)\]$", vMatch)
  60.       vSection := vMatch1
  61.  
  62.     ; if variable line then get variable/value pair and add to map array
  63.     ; prefix variable name "uservar." and last found section name (if any)
  64.     if RegExMatch(vLine, "U)^(.+)=(.+)$", vMatch)
  65.     {
  66.       vVarName := "uservar." ( vSection ? vSection "." : "") vMatch1
  67.       vValue    := vMatch2
  68.       aMap["" vVarName] := vValue
  69.     }
  70.   }
  71.  
  72.   ; resolve
  73.   For vVarName, vValue in aMap
  74.     vText := StrReplace(vText, "%" vVarName "%", vValue) ; replace all
  75.  
  76.   ; show resolved text
  77.   MsgBox % vText
  78.  
  79.   ; put on clipboard
  80.   ;Clipboard := vText
  81.  
  82.   ; write to .txt file in this script's folder
  83.   ;FileAppend, % vText, % A_ScriptDir "\alias_resolved_" A_Now ".txt", UTF-8-RAW
  84. return
  85.  
  86.  
  87. ; ----------------------------
  88. ; notes of FARR User Variables (UserVar)
  89. ; ----------------------------
  90. ;   Used as variables in aliases
  91. ;   Set in FARR > Options > Lists > User Variables
  92. ;   Stored in FindAndRunRobot.ini
  93. ;     Default path C:\Users\<username>\Documents\DonationCoder\FindAndRunRobot\FindAndRunRobot.ini
  94.  
  95. ; Format in Options "User Variables" pane:
  96. ; -----
  97. ; TopTest=C:\folder\test.exe
  98. ; [SectionName]
  99. ; VarName=Value
  100. ; VarName2=Value2
  101. ; // comment line
  102. ;
  103. ; [Browser]
  104. ; Chrome=C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
  105. ; Firefox=C:\b\firefox.exe
  106. ; -----
  107. ; Note: it is allowed to create variables above the first [Section]
  108. ; Note: comments must be on separate lines. Not allowed: VarName=Value //comment
  109.  
  110. ; -----
  111. ; Format in FARR aliases:
  112. ; -----
  113. ;   %uservar.TopTest%
  114. ;   %uservar.SectionName.VarName%
  115. ;   %uservar.Browser.Chrome%
  116. ; -----
  117.  
  118. ; -----
  119. ; Format in FindAndRunRobot.ini
  120. ; -----
  121. ; Stored as a single line, ">n>" is linebreak separator
  122. ; Example:
  123. ; UserVars=TopTest=C:\folder\test.exe>n>[SectionName]>n>VarName=Value>n>VarName2=Value2>n>// comment line>n>>n>[Browser]>n>Chrome=C:\Program Files (x86)\Google\Chrome\Application\chrome.exe>n>Firefox=C:\b\firefox.exe
  124. ; ----------------------------

57
I don't think FARR has that feature built in, but it would be a useful feature. I have AutoHotkey code that resolves the FARR user variables. I'l clean that up and post here as a helper tool for FARR when I have more time.

58
Here you go.
Neat! I will experiment with that.

59
Here you go.
That looks nice, seems functional for this request.

Off topic: I have come across Sciter a few times before but haven't made anything with it. I see you have a small test repo that transpiles some ahk to sciter here https://github.com/GirkovArpa/ahk-to-sciter . Let me ask: do you know of some Sciter project with AutoHotkey interop, like what is available for Python https://github.com/sciter-sdk/pysciter ?

60
Neat idea, so I made an AutoHotkey version with a hotkey and also a command line mode for easy use from FARR.

Uses COM to get the focused file's path more reliably than sending keys to the context menu.
Uses SHGetSetFolderCustomSettings method which makes the new folder icon show immediately, see Microsoft doc.

Code: Autohotkey [Select]
  1. SetWorkingDir %A_ScriptDir%
  2.  
  3. ; SetExplorerFolderIcon.ahk
  4. ; 2021-02-11
  5. ; by Nod5
  6. ; In Explorer press [F8] to set the focused file's first icon as parent folder icon
  7. ; -----------------------------------
  8. ; Default mode:
  9. ;   Select a file in Explorer and press [F8].
  10. ;   To close the script right click its tray menu icon and Exit.
  11.  
  12. ; Command line mode:
  13. ;   Pass as parameter a HWND window handle to a specific Explorer window
  14. ;   to act on that window's focused file and parent folder.
  15. ;
  16. ; Optional: use this script from FARR (Find And Run Robot)
  17. ;   Create a FARR alias and use this as the result line (modify the path):
  18. ;   Set Explorer parent folder icon | C:\some\folder\SetExplorerFolderIcon.ahk %LASTHWND%
  19. ; -----------------------------------
  20.  
  21. ; if parameter is Explorer HWND then act on that window and exit
  22. if (vHwnd := A_Args[1])
  23. {
  24.   if WinExist("ahk_class CabinetWClass ahk_id " vHwnd)
  25.     GetFocusedFileSetIcon(vHwnd)
  26. }
  27. ; else hotkey mode: create Explorer hotkey and await user action
  28. else
  29. {
  30.   Hotkey, IfWinActive, ahk_class CabinetWClass
  31.   Hotkey, F8, GetFocusedFileSetIcon
  32. }
  33. return
  34.  
  35. GetFocusedFileSetIcon(vHwnd := "")
  36. {
  37.   vFile := ExplorerGetFocusedFilepath(vHwnd)
  38.   if FileExist(vFile)
  39.   {
  40.     SplitPath, vFile, , vFolder
  41.     SetFolderIcon(vFolder, vFile, 0)
  42.   }
  43. }
  44.  
  45.  
  46. ; function: ExplorerGetFocusedFilepath(vHwnd := "")  v210211
  47. ; return filepath of focused item in vHwnd (or active) Explorer window
  48. ExplorerGetFocusedFilepath(vHwnd := "")
  49. {
  50.   vHwnd := vHwnd ? vHwnd : WinActive("A")
  51.   if vHwnd and WinExist("ahk_class CabinetWClass ahk_id " vHwnd)
  52.     for Window in ComObjCreate("Shell.Application").Windows
  53.       if (Window.HWND = vHwnd)
  54.         ; https://docs.microsoft.com/en-us/windows/win32/shell/shellfolderview-focuseditem
  55.         return vFile := Window.Document.FocusedItem.Path
  56. }
  57.  
  58.  
  59. ; function: SetFolderIcon() update Explorer folder icon in desktop.ini via SHGetSetFolderCustomSettings
  60. ; by teadrinker 2017-10-09 https://www.autohotkey.com/boards/viewtopic.php?p=174984#p174984
  61. ; https://docs.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shgetsetfoldercustomsettings
  62. ; https://docs.microsoft.com/en-us/windows/win32/api/shlobj_core/ns-shlobj_core-shfoldercustomsettings
  63. SetFolderIcon(folderPath, iconPath, iconIndex)  {
  64.    static FCSM_ICONFILE := 0x10, FCS_FORCEWRITE := 0x2
  65.    if !A_IsUnicode  {
  66.       VarSetCapacity(WiconPath, StrPut(iconPath, "UTF-16")*2, 0)
  67.       StrPut(iconPath, &WiconPath, "UTF-16")
  68.    }
  69.    VarSetCapacity(SHFOLDERCUSTOMSETTINGS, size := 4*5 + A_PtrSize*10, 0)
  70.    NumPut(size, SHFOLDERCUSTOMSETTINGS)
  71.    NumPut(FCSM_ICONFILE, SHFOLDERCUSTOMSETTINGS, 4)
  72.    NumPut(A_IsUnicode ? &iconPath : &WiconPath, SHFOLDERCUSTOMSETTINGS, 4*2 + A_PtrSize*8)
  73.    NumPut(iconIndex, SHFOLDERCUSTOMSETTINGS, 4*2 + A_PtrSize*9 + 4)
  74.    DllCall("Shell32\SHGetSetFolderCustomSettings", Ptr, &SHFOLDERCUSTOMSETTINGS, WStr, folderPath, UInt, FCS_FORCEWRITE)
  75. }
  76.  
  77. ; -----------------------------------
  78. ; notes on desktop.ini files
  79. ; -----------------------------------
  80. ; https://docs.microsoft.com/en-us/windows/win32/shell/how-to-customize-folders-with-desktop-ini
  81. ; "text file that allows you to specify how a file system folder is viewed."
  82. ; See also https://hwiegman.home.xs4all.nl/desktopini.html
  83.  
  84. ; Format:
  85. ; -----
  86. ; [.ShellClassInfo]
  87. ; IconResource=C:\test\file.exe,0     ; <filepath, icon-index>
  88. ; -----
  89. ; To remove the custom folder icon delete desktop.ini
  90.  
  91. ; If we just write the file then the new folder icon does not show immediately (must close/reopen Explorer)
  92. ; If we instead use SHGetSetFolderCustomSettings the new icon shows immediately.
  93. ; SHGetSetFolderCustomSettings also hides the desktop.ini file.
  94. ; https://docs.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shgetsetfoldercustomsettings
  95. ; https://docs.microsoft.com/en-us/windows/win32/api/shlobj_core/ns-shlobj_core-shfoldercustomsettings
  96. ; AutoHotkey function: SetFolderIcon()
  97. ; by Teadrinker 2017-10-09 https://www.autohotkey.com/boards/viewtopic.php?p=174984#p174984
  98. ; -----------------------------------

Pages: prev1 ... 7 8 9 10 11 [12] 13 14 15 16 17 ... 234next
Go to full version