AutoHotkey: Duplicate starter menu entry

From TotalcmdWiki
Revision as of 20:12, 26 August 2009 by StatusQuo (talk | contribs) (Update for TC 7.50 rc1)
Jump to navigation Jump to search
	; ////////////////////////////////////////////////////////////////////////////
	; // TC_StartMenu_DuplicateEntry.ahk V1.2
	; // (W) StatusQuo 2008-2009 for TC 7.02a (tested up to 7.04a and 7.50 rc1)
	; //
	; // Duplicates an entry in TC Start Menu or Directory Hotlist
	; ////////////////////////////////////////////////////////////////////////////

	; *** set window class names
sClassMainWin := "TUSERMENUCHANGE"
sClassDialog  := "TSTDTREEDLG"

	; *** wait for & activate window
WinWait       , ahk_class %sClassMainWin%, 
IfWinNotActive, ahk_class %sClassMainWin%,, WinActivate, ahk_class %sClassMainWin%, 
WinWaitActive , ahk_class %sClassMainWin%,	; main "Change Start Menu"

	; *** store source values
ControlGetText,    sText3,                 TEdit3, ahk_class %sClassMainWin%,	; main window	; TC 7.04a, command
ControlGetText,    sText2,                 TEdit2, ahk_class %sClassMainWin%,	; main window	; TC 7.04a, parameters
ControlGetText,    sText1,                 TEdit1, ahk_class %sClassMainWin%,	; main window	; TC 7.04a, start path
sEditName1 := "TEdit1"	; <= TC 7.04a
sEditName2 := "TEdit2"	; <= TC 7.04a
sEditName3 := "TEdit3"	; <= TC 7.04a
if (sText3 . sText2 . sText1 = "")
	{
	sEditName1 :=          "TAltEdit1"	; >= TC 7.50
	sEditName2 :=          "TAltEdit2"	; >= TC 7.50
	sEditName3 :=          "TAltEdit3"	; >= TC 7.50
	ControlGetText, sText3, TAltEdit3, ahk_class %sClassMainWin%,	; main window	; TC 7.50 , command
	ControlGetText, sText2, TAltEdit2, ahk_class %sClassMainWin%,	; main window	; TC 7.50 , parameters
	ControlGetText, sText1, TAltEdit1, ahk_class %sClassMainWin%,	; main window	; TC 7.50 , start path
	}

/*
	; --- TC7.04 uses TEdit1+2 for dir menu, TEdit3 is "command" in start menu and empty in dir menu
	; --- unusable in TC 7.50 (Beta 4): both dialogs use the same control names + window classes
	; *** Auto-detect dir <> starter menu
if (sText3 = "")	; "command" string empty => only usable up to TC 7.04a
{
	sDialogType := "dir"
} else {
	sDialogType := "start"
	ControlGet,     iCBox2, Checked,, TCheckBox2, ahk_class %sClassMainWin%,	; main window, as symbol
	ControlGet,     iCBox1, Checked,, TCheckBox1, ahk_class %sClassMainWin%,	; main window, fullscreen
}
*/

	; *** Auto-detect dir <> starter menu
If (WinActive("Startermenü ändern ahk_class TUSERMENUCHANGE") or WinActive("Change start menu ahk_class TUSERMENUCHANGE"))
{
	sDialogType := "start"
	ControlGet,     iCBox2, Checked,, TCheckBox2, ahk_class %sClassMainWin%,	; main window, as symbol
	ControlGet,     iCBox1, Checked,, TCheckBox1, ahk_class %sClassMainWin%,	; main window, fullscreen
} else {
	If (WinActive("Verzeichnismenü ändern ahk_class TUSERMENUCHANGE") or WinActive("Change directory menu ahk_class TUSERMENUCHANGE"))
	{
		sDialogType := "dir"
	}
}

If (sDialogType = "")	; autodetect failed
{
	MsgBox, 3,, Dialog auto-detection failed (unknown language or version).`n`nIs the dialog = directory hotlist?`n`tYes = directory hotlist`n`tNo  = starter menu
	IfMsgBox, Yes
		sDialogType := "dir"
	IfMsgBox, No
		sDialogType := "start"
	IfMsgBox, Cancel
		Return
}

	; *** get entry title
if (sDialogType = "dir")
{
	; ControlClick,   TButton4, ahk_class %sClassMainWin%,	; Button "Change Title"; DirMenu
	ControlSend,   TButton4, {Space}, ahk_class %sClassMainWin%,	; Button "Change Title"; DirMenu
} else {
	; ControlClick,   TButton5, ahk_class %sClassMainWin%,	; Button "Change Title"; StartMenu
	ControlSend,   TButton5, {Space}, ahk_class %sClassMainWin%,	; Button "Change Title"; StartMenu
}
WinWaitActive,                      ahk_class %sClassDialog%,	; dialog  "Change Title"
; ControlGetText, sMenuTitle, TEdit1, ahk_class %sClassDialog%	; get old title
ControlGetText, sMenuTitle, %sEditName1%, ahk_class %sClassDialog%	; get old title
; ControlClick,   TButton1,           ahk_class %sClassDialog%,	; Button Cancel, close "Change Title" dialog
ControlSend,   TButton1, {Space},   ahk_class %sClassDialog%,	; Button Cancel, close "Change Title" dialog
WinWaitActive,                      ahk_class %sClassMainWin%,	; main window

	; *** add new entry
if (sDialogType = "dir")
{
	; ControlClick,   TButton7, ahk_class %sClassMainWin%,	; Button "Add Menu Entry"
	ControlSend,   TButton7, {Space}, ahk_class %sClassMainWin%,	; Button "Add Menu Entry"
} else {
	; ControlClick,   TButton8, ahk_class %sClassMainWin%,	; Button "Add Menu Entry"
	ControlSend,   TButton8, {Space}, ahk_class %sClassMainWin%,	; Button "Add Menu Entry"
}
WinWaitActive,                               ahk_class %sClassDialog%,	; dialog  "Change Title"
; ControlSetText, TEdit1, %sMenuTitle% [copy], ahk_class %sClassDialog%	; Title
ControlSetText, %sEditName1%, %sMenuTitle% [copy], ahk_class %sClassDialog%	; Title (TC7.04a:TEdit1)
sOKButTit := "TButton3"   	; >= TC 7.50
if (sEditName1 = "TEdit1")	; <= TC 7.04a
	sOKButTit := "TButton2"
; ControlClick,   TButton2,                    ahk_class %sClassDialog%,	; Button OK, close "Title" dialog
; ControlClick,   %sOKButTit%,                 ahk_class %sClassDialog%,	; Button OK, close "Title" dialog
ControlSend,   %sOKButTit%, {Space},         ahk_class %sClassDialog%,	; Button OK, close "Title" dialog
WinWaitActive,                               ahk_class %sClassMainWin%,	; main window

	; *** fill stored values from source entry
; if (sDialogType = "start")	; only TC 7.04a uses just TEdit1+2 for dir menu
{
	; ControlSetText, TEdit3, %sText3%, ahk_class %sClassMainWin%,	; main window
	ControlSetText, %sEditName3%, %sText3%, ahk_class %sClassMainWin%,	; main window
}
ControlSetText, %sEditName2%, %sText2%, ahk_class %sClassMainWin%,	; main window
ControlSetText, %sEditName1%, %sText1%, ahk_class %sClassMainWin%,	; main window

if (sDialogType = "start")
{
	if iCBox2
		Control, Check,,   TCheckBox2, ahk_class %sClassMainWin%,	; main window
	else
		Control, UnCheck,, TCheckBox2, ahk_class %sClassMainWin%,	; main window
	if iCBox1
		Control, Check,,   TCheckBox1, ahk_class %sClassMainWin%,	; main window
	else
		Control, UnCheck,, TCheckBox1, ahk_class %sClassMainWin%,	; main window

	; *** set cursor to command value
; ControlFocus, TEdit3, ahk_class %sClassMainWin%,	; main window
ControlFocus, %sEditName3%, ahk_class %sClassMainWin%,	; main window
ControlSend,  %sEditName3%, {HOME}, 
}

Back to AutoHotkey