AutoHotkey: TC Fav Menu
Jump to navigation
Jump to search
TC FavMenu 1.0 beta07
for Windows XP & 2K
This is Total Commander utility.
It will make TC favorites available in the system.
It will also make TC Favorites to become Open/Save dialog enhancer (for standard dialogs)
g_title = TC FavMenu 1.0b7 ;************************************************************************* ; TC FavMenu ; ; ; Created by majkinetor ! Jun 2006 ; ; code.r-moth.com www.r-moth.com r-moth.deviantart.com ;************************************************************************* #NoEnv TC_FAVMENU_Init() return ;========================================================================== TC_FAVMENU_Init() { global DetectHiddenWindows, on #SingleInstance force SetKeyDelay, -1 OnMessage(0x18, "MessageMonitor") ;wm_show OnMessage(0x100, "MessageMonitor") ;wm_key cm_editpath = 2912 cm_CopySrcPathToClip = 2029 cm_CopyTrgPathToClip = 2030 cm_FocusLeft = 4001 cm_FocusRight = 4002 cm_OpenNewTab = 3001 if ( ! GetConfigData() ) Setup_Create() else CheckConfigData() SetTrayMenu() } ;-------------------------------------------------------------------------- MenuHotKey: CreateFullMenu() ShowMenu() DeleteMenu() return ;-------------------------------------------------------------------------- ShowMenu() { global tcPos if (tcPos = 2) { posX := A_CaretX posY := A_CaretY } if (tcPos = 3) { h := WinExist("A") WinGetPos, , , win_w, win_h, ahk_id %h% posX := win_w /2 posY := win_h /2 } Menu, sub1, show, %posX%, %posY% } ;--------------------------------------------------------------------------- CreateMenu() { global local separator, cmd_cnt, submenu_id, sub_num, mnu, cmd, ico, delta, name cmd_cnt = 0 g_sub_cnt += 1 if (g_sub_cnt = 1) delta := g_dynamic sub_num = %g_sub_cnt% submenu_id = sub%sub_num% Loop { ;read next menu item g_mnu_cnt += 1 IniRead, mnu, %tcIni%, DirMenu, menu%g_mnu_cnt%, & IniRead, cmd, %tcIni%, DirMenu, cmd%g_mnu_cnt%, & IniRead, ico, %tcIni%, DirMenu, icon%g_mnu_cnt%, & if (mnu = "&") break menuproc: ;is it separator ? if (mnu = "-") { Menu, %submenu_id%, add cmd_cnt += 1 continue } ; "--" exit condition (end of submenu), return this menu to the caller if (mnu = "--") return %submenu_id% ; if "-....." submenu, create it (recursion step) StringMid, c1, mnu, 1, 1 if (c1 = "-") { StringMid, name, mnu, 2, 100 Menu, %submenu_id%, add, %name%, % ":" . CreateMenu() cmd_cnt += 1 if FileExist(ico) Menu_AssignBitmap( submenu_id, cmd_cnt + delta, ico ) continue } Menu, %submenu_id%, add, %mnu%, MenuHandler cmd_cnt += 1 command%sub_num%_%cmd_cnt% := cmd menu_order%sub_num%_%cmd_cnt% := g_mnu_cnt if FileExist(ico) Menu_AssignBitmap( submenu_id, cmd_cnt + delta, ico ) } return true } ;-------------------------------------------------------------------------- CreateFullMenu() { global g_dynamic, command0_2, command0_1 ifWinExist ahk_class TTOTAL_CMD { hwnd := WinExist() if (hwnd = WinActive()) goto skipdyn GetTCPanels(tc_left, tc_right) command0_1 := tc_left command0_2 := tc_right g_dynamic := AddTcPanels(tc_left, tc_right) } skipdyn: if (! CreateMenu() ) { MsgBox, ,TC Fav Menu, Can not create menu, unable to read wincmd.ini.`nApplication will exit now. ExitApp } } ;--------------------------------------------------------------------------- DeleteMenu() { global if (g_sub_cnt = 0 ) return loop { if (g_sub_cnt = 0) break Menu, sub%g_sub_cnt%, Delete g_sub_cnt -= 1 } g_mnu_cnt = 0 g_dynamic = 0 } ;--------------------------------------------------------------------------- FullMenuHandler: if ( DialogWindowActive() ) { tmp := command0_%A_ThisMenuItemPos% StringGetPos idx, tmp,\\\ if (idx = -1) { SetDialogPath(tmp) return } } ; if dialog is not active, just activate TC & panel if (A_ThisMenuItemPos = 1) SendTCCommand(cm_FocusLeft, false ) else SendTCCommand(cm_FocusRight, false ) WinActivate ahk_class TTOTAL_CMD return ;-------------------------------------------------------------------------- MenuHandler: ;-- calculate position of selected item in commands array j := A_ThisMenuItemPos if (A_ThisMenu = "sub1") j -= g_dynamic StringReplace i, A_ThisMenu, sub, keys := % command%i%_%j% g_mnu_cnt := % menu_order%i%_%j% ;-- check modifiers GetKeyState, stateC, Control GetKeyState, stateS, Shift if (stateC = "D") { if (properties_visible) return properties_mnu_cnt := g_mnu_cnt Properties_Create() return } if (stateS = "D") bOpenTab := true else bOpenTab := false ;-- is it file ? StringLeft, tmp, keys, 3 if (tmp != "cd ") { ShellExecute(keys) return } ;-- remove "cd " (all other commands start with this word) StringMid keys, keys, 4 ;-- \\\plugin - call total commander unconditionaly ;-- path - send keys if dialog else call TC StringGetPos tmp, keys, \\\ if (tmp != -1) goto open_tc if ( DialogWindowActive() ) { if (IsPseudoVar(keys)) keys := ConvertPseudoPath(keys) SetDialogPath(keys) return } ;-- not the property, not the dialog, let the TC handle it open_tc: if (bOpenTab) SendTCCommand(cm_OpenNewTab) openTc(keys) return ;--------------------------------------------------------------------------- ShellExecute(ppath) { global g_title if (IsPseudoVar(ppath)) ppath := ConvertPseudoPath(ppath) expath := ExpandEnvVars(ppath) Run %expath%, ,UseErrorLevel if (ErrorLevel = "ERROR") MsgBox, 64, %g_title%, Invalid menu item. Command can not be executed:`n%ppath%`n`nExpanded to:`n%expath% return } ;--------------------------------------------------------------------------- ExpandEnvVars(ppath) { VarSetCapacity(dest, 2000) DllCall("ExpandEnvironmentStrings", "str", ppath, "str", dest, int, 1999, "Cdecl int") return dest } ;--------------------------------------------------------------------------- IsQuoted(str) { StringLeft sl, str, 1 StringRight sr, str, 1 if (sr = """") && (sl = sr) return true else return false } ;====================== INCLUDES =========================================== ; ###################################################################### ; ## ExpandIncludes: 1. occurance of "GUI_Properties.ahk" ; -- #include GUI_Properties.ahk -- ; ###################################################################### ; ###################################################################### ; ########## BEGIN pasting of "GUI_Properties.ahk" ; ###################################################################### Properties_Create() { global ;title Gui, Add, Text, x16 y5 w80 h16, Title Gui, Add, Edit, veTitle x16 y22 w200 h18 ;nav buttons Gui, Add, Button, gProperties_OnNavClick x255 y23 w15 h15, < Gui, Add, Button, vbtnUp gProperties_OnNavClick x270 y23 w15 h15, > ;path Gui, Add, Text, x16 y55 w80 h16, Command Gui, Add, Edit, veCommand x16 y72 w270 h20, ;icon Gui, Add, Text, x16 y102 w80 h16, Icon Gui, Add, Picture, BackgroundTrans AltSubmit vpicIcon x46 y102 w16 h16 Gui, Add, Edit, veIcon x17 y119 w248 h20, Gui, Add, Button, gProperties_OnBrowseClick x267 y121 w18 h17, .. Gui, Add, Button, gProperties_OnSaveClick x16 y155 w104 h19, &Save Gui, Show, x370 y313 h185 w299, Properties properties_visible := true } ;----------------------------------------------------------------------------------- Properties_OnSaveClick: Gui, Submit, NoHide IniWrite, %eTitle%, %tcIni%, DirMenu, menu%properties_mnu_cnt% if !IsQuoted(eCommand) IniWrite, %eCommand%, %tcIni%, DirMenu, cmd%properties_mnu_cnt% else IniWrite, "%eCommand%", %tcIni%, DirMenu, cmd%properties_mnu_cnt% IniWrite, %eIcon%, %tcIni%, DirMenu, icon%properties_mnu_cnt% return ;----------------------------------------------------------------------------------- Properties_OnKeyDown(wparam, lparam) { if (wparam = "27") Properties_Close() } ;----------------------------------------------------------------------------------- Properties_OnBrowseClick: FileSelectFile, picIcon, 3, , Select Icon, Icons (*.ico) if Errorlevel = 1 return GuiControl, Text, picIcon, %picIcon% GuiControl, Text, eIcon, %picIcon% return ;----------------------------------------------------------------------------------- Properties_OnShowWindow(wparam, lparam) { global if (! wparam) return IniRead, mnu, %tcIni%, DirMenu, menu%properties_mnu_cnt%, & IniRead, cmd, %tcIni%, DirMenu, cmd%properties_mnu_cnt%, & IniRead, ico, %tcIni%, DirMenu, icon%properties_mnu_cnt%, & if (ico = "&") ico := "" GuiControl, Text, eTitle, %mnu% GuiControl, Text, eCommand, %cmd% GuiControl, Text, eIcon, %ico% GuiControl, Text, picIcon, %ico% } ;----------------------------------------------------------------------------------- Properties_OnNavClick: tmp := properties_mnu_cnt if (A_GuiControl = "btnUp") tmp += 1 else tmp -= 1 IniRead, mnu, %tcIni%, DirMenu, menu%tmp%, & if (mnu = "&") return properties_mnu_cnt := tmp if (mnu = "-") or (mnu = "--") goto Properties_OnNavClick Properties_OnShowWindow(true, 0) return ;----------------------------------------------------------------------------------- Properties_Close() { global Gui, Destroy properties_visible := false } GuiClose: Properties_Close() return ; ###################################################################### ; ########## END pasting of "GUI_Properties.ahk" ; ###################################################################### ; ###################################################################### ; ###################################################################### ; ## ExpandIncludes: 1. occurance of "GUI_Setup.ahk" ; -- #include GUI_Setup.ahk -- ; ###################################################################### ; ###################################################################### ; ########## BEGIN pasting of "GUI_Setup.ahk" ; ###################################################################### Setup_Create() { global Gui, 2:-sysmenu Gui, 2:Add, Text, x75 y10 w156 h17, Total Commander Exe && Ini Gui, 2:Add, Edit, vSetup_eTcExe x23 y32 w260 h20 Gui, 2:Add, Edit, vSetup_eTcIni x23 y62 w260 h20 Gui, 2:Font, bold Gui, 2:Add, Text, gSetup_OnBrowseClick vSetup_bExe x286 y35 w13 h14, >> Gui, 2:Add, Text, gSetup_OnBrowseClick x286 y65 w13 h14, >> Gui, 2:Font, norm Gui, 2:Add, Text, x133 y94 w41 h17, Hotkey Gui, 2:Add, Hotkey, vSetup_Hotkey x103 y112 w100 h30, !w Gui, 2:Add, GroupBox, x16 y172 w270 h70, Display menu at Gui, 2:Add, Radio, vSetup_rTcPos x26 y192 w60 h40, mouse position Gui, 2:Add, Radio, Checked x106 y192 w70 h40, cursor position Gui, 2:Add, Radio, x176 y192 w100 h40, center of active window Gui, 2:Add, Button, gSetup_OnSaveClick x106 y262 w90 h25, &Save Gui, 2:Add, StatusBar setup_visible := true Gui, 2:Show, x487 y302 h320 w315, Setup } Setup_OnBrowseClick: if (A_GuiControl = "Setup_bExe") FileSelectFile, tmp, 3, , Select TotalCmd.exe, TotalCmd.exe else FileSelectFile, tmp, 3, , Select wincmd.ini, wincmd.ini if Errorlevel = 1 return if (A_GuiControl = "Setup_bExe") GuiControl, Text, Setup_eTcExe, %tmp% else GuiControl, Text, Setup_eTcIni, %tmp% return ;----------------------------------------------------------------------------------- Setup_Close() { global setup_visible Gui, 2:Destroy setup_visible := false } ;----------------------------------------------------------------------------------- Setup_OnSaveClick: msg = Gui 2:Submit, NoHide tcExe := Setup_eTcExe tcIni := Setup_eTcIni if ( !FileExist(tcExe) ) msg = EXE doesn't exist.`n if ( !FileExist(tcIni) ) msg = %msg% INI doesn't exist.`n if ( Setup_HotKey = "") msg = %msg% You must choose a hot key.`n if (msg != "") { MsgBox %msg% return } ;remove previous hotkey (it will not exist on first run, so use errorlevel to avoid error) Hotkey, %tcKey%,,UseErrorLevel Off tcKey := Setup_HotKey Hotkey %tcKey%, MenuHotKey, On ;everything is valid, save the data and quit the window tcPos := Setup_rTcPos SaveConfigData() Setup_Close() return ;----------------------------------------------------------------------------------- Setup_OnKeyDown(wparam, lparam) { if (wparam = "27") if ( ! GetConfigData() ) { MsgBox No configuration. Program will exit. ExitApp } else Setup_Close() } ;----------------------------------------------------------------------------------- Setup_OnShowWindow(wparam, lparam) { global if (! wparam) return ; change existing configuration if ( GetConfigData() ) { GuiControl, Text, Setup_eTcExe, %tcExe% GuiControl, Text, Setup_eTcIni, %tcIni% GuiControl, Text, Setup_HotKey, %tcKey% GuiControl, ,% "Button" . (tcPos+1), 1 SB_SetText("Change existing configuration") return } ;running for the first time ; no config -> try to find commander first if (! FindCommander() ) { SB_SetText("First run: Total Commander NOT found!") return } ; commander found, initialise controls with found data GuiControl, Text, Setup_eTcExe, %tcExe% GuiControl, Text, Setup_eTcIni, %tcIni% SB_SetText("First run: Total Commander found !") } ;----------------------------------------------------------------------------------- 2GuiClose: { Setup_Close() } ; ###################################################################### ; ########## END pasting of "GUI_Setup.ahk" ; ###################################################################### ; ###################################################################### ; ###################################################################### ; ## ExpandIncludes: 1. occurance of "msg_dispatch.ahk" ; -- #include msg_dispatch.ahk -- ; ###################################################################### ; ###################################################################### ; ########## BEGIN pasting of "msg_dispatch.ahk" ; ###################################################################### MessageMonitor(wparam, lparam, msg, hwnd) { h := DllCall("GetAncestor", "uint", hwnd, "uint", 2) WinGetTitle title, ahk_id %h% if title = Properties Properties_Monitor(wparam, lparam, msg) if (title = "Setup") || (title = "") Setup_Monitor(wparam, lparam, msg) } ;----------------------------------------------------------------------------------- Properties_Monitor(wparam, lparam, msg) { if (msg = 0x100) Properties_OnKeyDown(wparam, lparam) if (msg = 0x18) Properties_OnShowWindow(wparam, lparam) } ;----------------------------------------------------------------------------------- Setup_Monitor(wparam, lparam, msg) { if (msg = 0x100) Setup_OnKeyDown(wparam, lparam) if (msg = 0x18) Setup_OnShowWindow(wparam, lparam) } ; ###################################################################### ; ########## END pasting of "msg_dispatch.ahk" ; ###################################################################### ; ###################################################################### ; ###################################################################### ; ## ExpandIncludes: 1. occurance of "menuIcons.ahk" ; -- #include menuIcons.ahk -- ; ###################################################################### ; ###################################################################### ; ########## BEGIN pasting of "menuIcons.ahk" ; ###################################################################### /* p_menu = "MenuName" (e.g., Tray, etc.) p_item = 1, ... p_bm_unchecked, */ Menu_AssignBitmap( p_menu, p_item, p_bm_unchecked) { static h_menuDummy if h_menuDummy= { Menu, menuDummy, Add Menu, menuDummy, DeleteAll Gui, 99:Menu, menuDummy Gui, 99:Show, Hide, guiDummy old_DetectHiddenWindows := A_DetectHiddenWindows DetectHiddenWindows, on Process, Exist h_menuDummy := DllCall( "GetMenu", "uint", WinExist( "guiDummy ahk_class AutoHotkeyGUI ahk_pid " ErrorLevel ) ) if ReportError( ErrorLevel or h_menuDummy = 0, "Menu_AssignBitmap: GetMenu", "h_menuDummy = " h_menuDummy ) return, false DetectHiddenWindows, %old_DetectHiddenWindows% Gui, 99:Menu Gui, 99:Destroy } Menu, menuDummy, Add, :%p_menu% h_menu := DllCall( "GetSubMenu", "uint", h_menuDummy, "int", 0 ) if ReportError( ErrorLevel or h_menu = 0, "Menu_AssignBitmap: GetSubMenu", "h_menu = " h_menu ) return, false success := DllCall( "RemoveMenu", "uint", h_menuDummy, "uint", 0, "uint", 0x400 ) if ReportError( ErrorLevel or ! success, "Menu_AssignBitmap: RemoveMenu", "success = " success ) return, false Menu, menuDummy, Delete, :%p_menu% if ( p_bm_unchecked ) { hbm_unchecked := DllCall( "LoadImage" , "uint", 0 , "str", p_bm_unchecked , "uint", 2 ; IMAGE_ICON , "int", 0 , "int", 0 , "uint", 0x10 | 0x20 ) ; LR_LOADFROMFILE|LR_LOADTRANSPARENT if ReportError( ErrorLevel or ! hbm_unchecked, "Menu_AssignBitmap: LoadImage: unchecked", "hbm_unchecked = " hbm_unchecked ) return, false VarSetCapacity(sICONINFO, 20, 0) ;4 + 2*4+ 2*4 = 20 InsertInteger(1, sICONINFO, 0) res := DllCall( "GetIconInfo", "Uint", hbm_unchecked, "str", sICONINFO) if ReportError( ErrorLevel or ! res, "Menu_AssignBitmap: GetIconInfo: ", "res = " res ) return, false hbm_unchecked := ExtractInteger(sICONINFO, 16, true) } success := DllCall( "SetMenuItemBitmaps" , "uint", h_menu , "uint", p_item-1 , "uint", 0x400 ; MF_BYPOSITION , "uint", hbm_unchecked , "uint", 0 ) if ReportError( ErrorLevel or ! success, "Menu_AssignBitmap: SetMenuItemBitmaps", "success = " success ) return, false return, true } ReportError( p_condition, p_title, p_extra ) { if p_condition MsgBox, ( LTrim [Error] %p_title% EL = %ErrorLevel%, LE = %A_LastError% %p_extra% ) return, p_condition } ; ###################################################################### ; ########## END pasting of "menuIcons.ahk" ; ###################################################################### ; ###################################################################### ; ###################################################################### ; ## ExpandIncludes: 1. occurance of "structs.ahk" ; -- #include structs.ahk -- ; ###################################################################### ; ###################################################################### ; ########## BEGIN pasting of "structs.ahk" ; ###################################################################### ExtractInteger(ByRef pSource, pOffset = 0, pIsSigned = false, pSize = 4) { Loop %pSize% ; Build the integer by adding up its bytes. result += *(&pSource + pOffset + A_Index-1) << 8*(A_Index-1) if (!pIsSigned OR pSize > 4 OR result < 0x80000000) return result ; Signed vs. unsigned doesn't matter in these cases. ; Otherwise, convert the value (now known to be 32-bit) to its signed counterpart: return -(0xFFFFFFFF - result + 1) } InsertInteger(pInteger, ByRef pDest, pOffset = 0, pSize = 4) { Loop %pSize% ; Copy each byte in the integer into the structure as raw binary data. DllCall("RtlFillMemory", "UInt", &pDest + pOffset + A_Index-1, "UInt", 1, "UChar", pInteger >> 8*(A_Index-1) & 0xFF) } ; ###################################################################### ; ########## END pasting of "structs.ahk" ; ###################################################################### ; ###################################################################### ; ###################################################################### ; ## ExpandIncludes: 1. occurance of "dialogs.ahk" ; -- #include dialogs.ahk -- ; ###################################################################### ; ###################################################################### ; ########## BEGIN pasting of "dialogs.ahk" ; ###################################################################### DialogWindowActive() { WinGet, active_hwnd, ID, A { if ( IsDialog( active_hwnd ) ) return 1 else return 0 } return 0 } ;------------------------------------------------------------------------------------------------ IsDialog(dlg) { global d_input toolbar := FindWindowExID(dlg, "ToolbarWindow32", "0x440") ;windows XP if (toolbar = "0") toolbar := FindWindowExID(dlg, "ToolbarWindow32", "0x001") ;windows 2k combo := FindWindowExID(dlg, "ComboBoxEx32", "0x47C") ; comboboxex field button := FindWindowExID(dlg, "Button", "0x001") ; second button edit := FindWindowExID(dlg, "Edit", "0x480") ; edit field d_input := combo + edit if (toolbar && (combo || edit) && button) return 1 return 0 } ;------------------------------------------------------------------------------------------------ ; Iterate through controls with the same class, find the one with ctrlID and return its handle ; Used for finding a specific control on a dialog FindWindowExID(dlg, className, ctrlId) { local ctrl, id ctrl = 0 Loop { ctrl := DllCall("FindWindowEx", "uint", dlg, "uint", ctrl, "str", className, "uint", 0 ) if (ctrlId = "0") { return ctrl } if (ctrl != "0") { id := DllCall( "GetDlgCtrlID", "uint", ctrl ) if (id = ctrlId) return ctrl } else return 0 } } ;-------------------------------------------------------------------------- SetDialogPath(path) { global d_input ControlGetText d_text, ,ahk_id %d_input% Sleep 100 ControlFocus, , ahk_id %d_input% Sleep 100 SendRaw %path% Send {ENTER} Sleep 300 ControlSetText, ,%d_text%, ahk_id %d_input% } ; ###################################################################### ; ########## END pasting of "dialogs.ahk" ; ###################################################################### ; ###################################################################### ; ###################################################################### ; ## ExpandIncludes: 1. occurance of "pseudo.ahk" ; -- #include pseudo.ahk -- ; ###################################################################### ; ###################################################################### ; ########## BEGIN pasting of "pseudo.ahk" ; ###################################################################### ConvertPseudoPath(ppath) { StringGetPos idx, ppath, `%\ if (idx != -1) { StringMid part1, ppath, 3, idx-2 StringMid part2, ppath, % idx + 2, 256 } else StringMid part1, ppath, 3, % StrLen(ppath) - 3 return % GetCommonPath(part1) . part2 } ;----------------------------------------------------------------------------------- GetCommonPath( csidl ) { CSIDL_APPDATA=0x001A ; Application Data, new for NT4 CSIDL_COMMON_APPDATA=0x0023 ; All Users\Application Data CSIDL_COMMON_DOCUMENTS=0x002e ; All Users\Documents CSIDL_DESKTOP=0x0010 ; C:\Documents and Settings\username\Desktop CSIDL_FONTS=0x0014 ; C:\Windows\Fonts CSIDL_LOCAL_APPDATA=0x001C ; non roaming, user\Local Settings\Application Data CSIDL_MYMUSIC=0x000d ; "My Music" folder CSIDL_MYPICTURES=0x0027 ; My Pictures, new for Win2K CSIDL_PERSONAL=0x0005 ; My Documents CSIDL_PROGRAM_FILES_COMMON=0x002b ; C:\Program Files\Common CSIDL_PROGRAM_FILES=0x0026 ; C:\Program Files CSIDL_PROGRAMS=0x0002 ; C:\Documents and Settings\username\Start Menu\Programs CSIDL_RESOURCES=0x0038 ; %windir%\Resources\, For theme and other windows resources. CSIDL_STARTMENU=0x000b ; C:\Documents and Settings\username\Start Menu CSIDL_STARTUP=0x0007 ; C:\Documents and Settings\username\Start Menu\Programs\Startup. CSIDL_SYSTEM=0x0025 ; GetSystemDirectory() CSIDL_WINDOWS=0x0024 ; GetWindowsDirectory() ;================================================================================================ val = % CSIDL_%csidl% VarSetCapacity(fpath, 256) DllCall( "shell32\SHGetFolderPathA", "uint", 0, "int", val, "uint", 0, "int", 0, "str", fpath) return %fpath% } ;----------------------------------------------------------------------------------- IsPseudoVar( ppath ) { StringGetPos idx, ppath, `%$ if (idx != -1) return true else return false } ; ###################################################################### ; ########## END pasting of "pseudo.ahk" ; ###################################################################### ; ###################################################################### ; ###################################################################### ; ## ExpandIncludes: 1. occurance of "config.ahk" ; -- #include config.ahk -- ; ###################################################################### ; ###################################################################### ; ########## BEGIN pasting of "config.ahk" ; ###################################################################### SetTrayMenu() { Menu, tray, icon, shell32.dll, 44 Menu, tray, NoStandard Menu, tray, tip, TC Fav Menu Menu, tray, add, Setup, tray_Handler Menu, tray, add, Delete Config, tray_Handler Menu, tray, add, Disable, tray_Handler Menu, tray, add Menu, tray, add, About, tray_Handler Menu, tray, add, Reload, tray_Handler Menu, tray, add, Exit, tray_Handler } tray_Handler: if ( A_ThisMenuItem = "Disable" ) { HotKey, %tcKey%,,Off Menu, tray, Rename, Disable, Enable } if ( A_ThisMenuItem = "Enable" ) { HotKey, %tcKey%,,On Menu, tray, Rename, Enable, Disable } if ( A_ThisMenuItem = "Setup" ) && (!setup_visible) Setup_Create() if ( A_ThisMenuItem = "Reload" ) Reload if ( A_ThisMenuItem = "Delete Config" ) { DeleteConfigData() Reload } if ( A_ThisMenuItem = "About" ) { msg := msg := msg . g_title . "`n`n`n" msg := msg . "Created by:`t`t Miodrag Milic`n" msg := msg . "e-mail:`t`t miodrag.milic@gmail.com`n`n`n" msg := msg . "www.r-moth.com`n" msg := msg . "Jun 2006`n" MsgBox 48, About, %msg% } if ( A_ThisMenuItem = "Exit" ) ExitApp return FindCommander() { global tcIni, tcExe RegRead tcExe, HKEY_CURRENT_USER, Software\Ghisler\Total Commander, InstallDir RegRead tcIni, HKEY_CURRENT_USER, Software\Ghisler\Total Commander, IniFileName tcExe = %tcExe%\TotalCmd.exe if (FileExist(tcExe)) && (FileExist(tcIni)) return true EnvGet COMMANDER_PATH, COMMANDER_PATH if (COMMANDER_PATH != "") { tcExe = %COMMANDER_PATH%\TotalCmd.exe tcIni = %COMMANDER_PATH%\wincmd.ini if (FileExist(tcExe)) && (FileExist(tcIni)) return true } return false } ;----------------------------------------------------------------------------------- GetConfigData() { global RegRead tcExe, HKEY_CURRENT_USER, Software\Miodrag Milic\TcFavMenu, tcExe RegRead tcIni, HKEY_CURRENT_USER, Software\Miodrag Milic\TcFavMenu, tcIni RegRead tcKey, HKEY_CURRENT_USER, Software\Miodrag Milic\TcFavMenu, tcKey RegRead tcPos, HKEY_CURRENT_USER, Software\Miodrag Milic\TcFavMenu, tcPos if (tcExe = "") || (tcIni = "") || (tcKey = "") return false if (tcPos = "") tcPos := 3 Hotkey %tcKey%, MenuHotKey,On return true } ;----------------------------------------------------------------------------------- SaveConfigData() { global RegWrite REG_SZ, HKEY_CURRENT_USER, Software\Miodrag Milic\TcFavMenu, tcExe, %tcExe% RegWrite REG_SZ, HKEY_CURRENT_USER, Software\Miodrag Milic\TcFavMenu, tcIni, %tcIni% RegWrite REG_SZ, HKEY_CURRENT_USER, Software\Miodrag Milic\TcFavMenu, tcKey, %tcKey% RegWrite REG_SZ, HKEY_CURRENT_USER, Software\Miodrag Milic\TcFavMenu, tcPos, %tcPos% } ;----------------------------------------------------------------------------------- DeleteConfigData() { RegDelete HKEY_CURRENT_USER, Software\Miodrag Milic\TcFavMenu, tcExe RegDelete HKEY_CURRENT_USER, Software\Miodrag Milic\TcFavMenu, tcIni RegDelete HKEY_CURRENT_USER, Software\Miodrag Milic\TcFavMenu, tcKey RegDelete HKEY_CURRENT_USER, Software\Miodrag Milic\TcFavMenu, tcPos } CheckConfigData() { global if (! FileExist(tcExe) ) { MsgBox Total Commander not found.`nInvalid config deleted. reset := true } if (! FileExist(tcIni) ) { MsgBox INI not found.`nInvalid config deleted. reset := true } if (reset) { DeleteConfigData() Reload } } ; ###################################################################### ; ########## END pasting of "config.ahk" ; ###################################################################### ; ###################################################################### ; ###################################################################### ; ## ExpandIncludes: 1. occurance of "tc_functions.ahk" ; -- #include tc_functions.ahk -- ; ###################################################################### ; ###################################################################### ; ########## BEGIN pasting of "tc_functions.ahk" ; ###################################################################### OpenTc(keys) { global if not WinExist("ahk_class TTOTAL_CMD") { Run %tcExe% WinWait, ahk_class TTOTAL_CMD } WinActivate ahk_class TTOTAL_CMD SendTCCommand(cm_editpath) SendRaw, %keys% Send, {ENTER} } ;-------------------------------------------------------------------------- GetTCPanels( ByRef pLeft, ByRef pRight) { global local saveClip, tc_left ; do things with the clipboard saveClip := clipboardAll SendTCCommand(cm_CopySrcPathToClip) pLeft := clipboard SendTCCommand(cm_CopyTrgPathToClip) pRight := clipboard SendTCCommand(cm_FocusLeft) SendTCCommand(cm_CopySrcPathToClip) tc_left := clipboard clipboard := saveClip SaveClip = ; determine what is left what is right panel if (pLeft != tc_left) { SendTCCommand(cm_FocusRight) pRight := pLeft pLeft := tc_left } } ;--------------------------------------------------------------------------- AddTCPanels( ByRef pLeft, ByRef pRight) { cnt := 0 b_same := % pLeft = pRight ; add left panel dir to the menu StringGetPos idx, pLeft, \, R if (idx != -1) and (idx != 2) StringMid pLeft, pLeft, idx+2, 256 Menu sub1, add, &1 %pLeft% , FullMenuHandler cnt += 1 ; If they are not the same, add right panel if (! b_same) { StringGetPos idx, pRight, \, R if (idx != -1) and (idx != 2) StringMid pRight, pRight, idx+2, 256 Menu sub1, add, &2 %pRight% , FullMenuHandler cnt += 1 } ; add separator Menu sub1, add return cnt + 1 } ;--------------------------------------------------------------------------- SendTCCommand(cmd, wait=1) { if (wait) SendMessage 1075, cmd, 0, , ahk_class TTOTAL_CMD else PostMessage 1075, cmd, 0, , ahk_class TTOTAL_CMD } ; ###################################################################### ; ########## END pasting of "tc_functions.ahk" ; ###################################################################### ; ######################################################################