AutoHotkey: From FileSync open another TC instance with selected files: Difference between revisions

From TotalcmdWiki
Jump to navigation Jump to search
m (changed standard to safe mode without using TC Lister)
(updated for TC 7.50 (tested up to RC1) + added RunAsAdmin option)
Line 24: Line 24:
boCdToFolderOnly    := 1 ; set to 0 to have cursor placed on selected files; uses Lister, experimental
boCdToFolderOnly    := 1 ; set to 0 to have cursor placed on selected files; uses Lister, experimental
iListerTimeOutSecs  := 1 ; if using Lister: timeout after n seconds of not appearing Lister
iListerTimeOutSecs  := 1 ; if using Lister: timeout after n seconds of not appearing Lister
TCSync2nd_RunAsAdmin := 0 ; set to 1 to start 2nd TC with Administrator rights
; static pidTC2
; static pidTC2
;
;
Line 42: Line 43:
SendMessage, %LB_GETTEXT%, %LB_CursorPosition%, &LB_String, %Panel_id%
SendMessage, %LB_GETTEXT%, %LB_CursorPosition%, &LB_String, %Panel_id%
}
}
; LB_SubDir := LB_String ; moved down
ControlGetText, sLPath, TEdit2, ahk_class TCmpForm ; TC <= 7.04a
ControlGetText, sRPath, TEdit1, ahk_class TCmpForm
boTC75 := 0 ; TC <= 7.04a
if (sLPath . sRPath = "")
{
ControlGetText, sLPath, TAltEdit2, ahk_class TCmpForm ; TC >= 7.50 rc1
ControlGetText, sRPath, TAltEdit1, ahk_class TCmpForm
if (sLPath . sRPath != "")
boTC75 := 1 ; TC >= TC 7.50 rc1
}
if (boTC75) ; TC >= TC 7.50 rc1
{
if (SubStr(LB_String, 1, 7) = "DIR EQ ")
LB_String := SubStr(LB_String, 8)
if (SubStr(LB_String, 1, 8) = "DIR DEL ")
LB_String := SubStr(LB_String, 9)
if (SubStr(LB_String, 1, 11) = "DIR L to R ")
LB_String := SubStr(LB_String, 12)
if (SubStr(LB_String, 1, 11) = "DIR R to L ")
LB_String := SubStr(LB_String, 12)
}
;
LB_SubDir := LB_String
LB_SubDir := LB_String
ControlGetText, sLPath, TEdit2, ahk_class TCmpForm
ControlGetText, sRPath, TEdit1, ahk_class TCmpForm
;
;
sLDirName := "" ; get left path name
sLDirName := "" ; get left path name
Line 55: Line 77:
If (sLDirName = "")
If (sLDirName = "")
sLDirName := sLPath . LB_SubDir
sLDirName := sLPath . LB_SubDir
;
; ---
sRDirName := ""
sRDirName := ""
if (not boCdToFolderOnly)
if (not boCdToFolderOnly)
Line 65: Line 87:
If (sRDirName = "")
If (sRDirName = "")
sRDirName := sRPath . LB_SubDir
sRDirName := sRPath . LB_SubDir
;
; ---
If boAlwaysOpenNewTask
If boAlwaysOpenNewTask
or (not WinExist("ahk_pid " . pidTC2))
or (not WinExist("ahk_pid " . pidTC2))
Line 83: Line 105:
Return
Return
if (pidTC2 = "")
if (pidTC2 = "")
{
if (TCSync2nd_RunAsAdmin > "0")
{
; -- run as admin: also workaround for TC "As Administrator" bug up to TC 7.50 pubbeta 2
sRunUser := ""
sRunPw := ""
InputBox, sRunUser, TC RunAs: Enter Administrator user name, Logon user name (Administrator):,,, 120,,,,, Administrator
if ErrorLevel
sRunUser := ""
if (sRunUser != "")
InputBox, sRunPw  , TC RunAs: Enter Administrator password,  Logon password for "%sRunUser%":,,, 120
if ErrorLevel
sRunUser := ""
if (sRunUser != "")
RunAs, %sRunUser%, %sRunPw%
if ErrorLevel
sRunUser := ""
}
;
Run, %sRunStr%,,, pidTC2
Run, %sRunStr%,,, pidTC2
RunAs
}
else
else
Run, %sRunStr%
Run, %sRunStr%

Revision as of 15:57, 26 August 2009

		; ////////////////////////////////////////////////////////////////////////////
		; // TC_Sync_OpenFolderInSecondTC.ahk  V0.13a  (W) StatusQuo 2008
		; // http://ghisler.ch/board/viewtopic.php?t=19713
		; // 
		; // open another TC instance
		; // with the folders of the currently selected file in cm_FileSync
		; // via hotkey: Ctrl+Win+T
		; ////////////////////////////////////////////////////////////////////////////

#SingleInstance, Force
Return

#IfWinActive, ahk_class TCmpForm
; F4::
^#t::	; hotkey =  Ctrl+Win+T
		; please adjust path here; %COMMANDER_PATH% is not available outside of TC
	sTCExe := "C:\totalcmd\TOTALCMD.EXE"
	boAlwaysOpenNewTask := 0	; set to 1 to not re-use TC target window (always open a new one)
	boCdToFolderOnly    := 1	; set to 0 to have cursor placed on selected files; uses Lister, experimental
	iListerTimeOutSecs  := 1	; if using Lister: timeout after n seconds of not appearing Lister
	TCSync2nd_RunAsAdmin := 0	; set to 1 to start 2nd TC with Administrator rights
	; static pidTC2
	;
	LB_GETCARETINDEX := 0x019F
	LB_GETTEXT := 0x0189
	ControlGetFocus, Panel_id
	SendMessage, %LB_GETCARETINDEX%, 0, 0, %Panel_id%
	LB_CursorPosition := ErrorLevel
	VarSetCapacity(LB_String, 1024, 0)
	SendMessage, %LB_GETTEXT%, %LB_CursorPosition%, &LB_String, %Panel_id%
	LB_CursorLine := LB_String
	Loop	; find subdirectory
	{
		If (SubStr(LB_String, StrLen(LB_String)) = "\")
		or (LB_CursorPosition < 1)
			Break
		LB_CursorPosition -= 1
		SendMessage, %LB_GETTEXT%, %LB_CursorPosition%, &LB_String, %Panel_id%
	}
	; LB_SubDir := LB_String	; moved down
	ControlGetText, sLPath, TEdit2, ahk_class TCmpForm	; TC <= 7.04a
	ControlGetText, sRPath, TEdit1, ahk_class TCmpForm
	boTC75 := 0	; TC <= 7.04a
	if (sLPath . sRPath = "")
	{
		ControlGetText, sLPath, TAltEdit2, ahk_class TCmpForm	; TC >= 7.50 rc1
		ControlGetText, sRPath, TAltEdit1, ahk_class TCmpForm
		if (sLPath . sRPath != "")
			boTC75 := 1	; TC >= TC 7.50 rc1
	}
	if (boTC75)	; TC >= TC 7.50 rc1
	{
		if (SubStr(LB_String, 1, 7) = "DIR EQ ")
			LB_String := SubStr(LB_String, 8)
		if (SubStr(LB_String, 1, 8) = "DIR DEL ")
			LB_String := SubStr(LB_String, 9)
		if (SubStr(LB_String, 1, 11) = "DIR L to R ")
			LB_String := SubStr(LB_String, 12)
		if (SubStr(LB_String, 1, 11) = "DIR R to L ")
			LB_String := SubStr(LB_String, 12)
	}
	;
	LB_SubDir := LB_String
	;
	sLDirName := ""	; get left path name
	if (not boCdToFolderOnly)
	and (SubStr(LB_CursorLine, StrLen(LB_CursorLine), 1) != "\")
	{
		Send, {F3}
		sLDirName := GetActiveTCListerPath()
	}
	If (sLDirName = "")
		sLDirName := sLPath . LB_SubDir
	; ---
	sRDirName := ""
	if (not boCdToFolderOnly)
	and (SubStr(LB_CursorLine, StrLen(LB_CursorLine), 1) != "\")
	{
		Send, +{F3}
		sRDirName := GetActiveTCListerPath()
	}
	If (sRDirName = "")
		sRDirName := sRPath . LB_SubDir
	; ---
	If boAlwaysOpenNewTask
	or (not WinExist("ahk_pid " . pidTC2))
		pidTC2 := ""
	if not (pidTC2 = "")
	{
		WinActivate, ahk_pid %pidTC2%
		sTCExe = %sTCExe% /O
	}
	;
	sRunStr := sTCExe
	if (sLDirName != "")
		sRunStr = %sRunStr% /L="%sLDirName%"
	if (sRDirName != "")
		sRunStr = %sRunStr% /R="%sRDirName%"
	if (sRunStr = sTCExe)
		Return
	if (pidTC2 = "")
	{
		if (TCSync2nd_RunAsAdmin > "0")
		{
				; -- run as admin: also workaround for TC "As Administrator" bug up to TC 7.50 pubbeta 2
			sRunUser := ""
			sRunPw := ""
			InputBox, sRunUser, TC RunAs: Enter Administrator user name, Logon user name (Administrator):,,, 120,,,,, Administrator
			if ErrorLevel
				sRunUser := ""
			if (sRunUser != "")
				InputBox, sRunPw  , TC RunAs: Enter Administrator password,  Logon password for "%sRunUser%":,,, 120
			if ErrorLevel
				sRunUser := ""
			if (sRunUser != "")
				RunAs, %sRunUser%, %sRunPw%
			if ErrorLevel
				sRunUser := ""
		}
		;
		Run, %sRunStr%,,, pidTC2
		RunAs
	}
	else
		Run, %sRunStr%
	;
	Return

#IfWinActive

GetActiveTCListerPath()
{
	global boCdToFolderOnly, iListerTimeOutSecs
	WinWaitNotActive, ahk_class TCmpForm,, %iListerTimeOutSecs%	; wait for starting lister, timeout in seconds
	IfWinActive, ahk_class TCmpForm	; Lister hasn't started - no file on this panel side?
		Return
	SetTitleMatchMode, 1
	IfWinActive, Lister
	{
		WinGetActiveTitle, sWinTitle
		WinClose, %sWinTitle%
	}
	iNamePos := (InStr(sWinTitle, "[", false, 0) + 1)
	If (boCdToFolderOnly)	; folder only
		Return, % SubStr(sWinTitle, iNamePos, (InStr(sWinTitle, "\", false, 0) + 1) - iNamePos)
	else	; folder + file name
		Return, % SubStr(sWinTitle, iNamePos, StrLen(sWinTitle) - iNamePos)
}

;

Back to AutoHotkey