Добавлено: Пн дек 16, 2024 00:41
А Авторан еще не научился вгрызаться в контекстное меню, чтобы там нагородить своих подменю?
Код: Выделить всё
SetHotkeyAction /K:A /H:F1 xxx
Func xxx()
Local ListSel= GetSelectedItems(3, 0)
Local Name = StrPart(ListSel, auCR, 2)
msgbox(Name)
msgbox(StrReplace(Name, auCR, 'aaa'))
EndFunc
Ну, такого еще, насколько мне известно, нетMrak_Tlen писал(а):А Авторан еще не научился вгрызаться в контекстное меню, чтобы там нагородить своих подменю?

Функция GetSelectedItems разделяет список символами auCRLF, поэтому правильнее будет:yahuu писал(а):Выберите два или более файлов, выполните следующий код, StrReplace не заменил auCR.
Код: Выделить всё
Local Name = StrPart(ListSel, auCRLF, 2)Код: Выделить всё
SetHotkeyAction /K:A /H:F1 xxx
Func xxx()
Local ListSel= GetSelectedItems(3, 0)
Local Name = StrPart(ListSel, auCR, 2)
msgbox(Name)
msgbox(StrReplace(Name, auLF, 'aaa'))
EndFunc
спасибоOrion9 писал(а): Функция GetSelectedItems разделяет список символами auCRLF
Код: Выделить всё
Func separateCompress()
Local Count = RequestInfo(11005)
If Count=0 Then SendCommand(2936,-1)
Local Count = RequestInfo(11005), ListSel = GetSelectedItems(3, 0)
For var = 1 To Count
Local Name = StrPart(ListSel, auCRLF, var)
Local FullName = RequestCopyDataInfo("SP") & Name
Local FullNoExtNewName = getFullNoExtName(RequestCopyDataInfo("SP"), Name) & ".7z"
Local sParam = 'a -t7z -mx=5 "' & FullNoExtNewName & '" "' & FullName & '"'
ShellExec %"s7zip" %"sParam"
Next
EndFunc
Func getFullNoExtName(sPath, fileName)
#Если имя папки содержит символ ., TotalCMD будет рассматривать содержимое после . как расширение, поэтому необходимо обрабатывать папки отдельно.
If StrPos(FileGetAttr(sPath & fileName), "D") Then
Return sPath & fileName
Else
If StrPos(fileName, '.') > 0 Then
Return sPath & StrLeft(fileName, StrPos(fileName, '.', -1)-1)
Else
Return sPath & fileName
EndIf
EndIf
EndFunc
Код: Выделить всё
# Get selected files in active panel and fill List object
SelectedFiles = List()
selectedList = GetSelectedItems(3,0)
selectedCount = RequestInfo(1004+RequestInfo(1000))
For i=1 To selectedCount
SelectedFiles.add(RequestCopyDataInfo("SP") & StrPart(selectedList, auCRLF, i))
Next
# Releases the List object
Free SelectedFiles
Можно использовать объект List, как уже написали выше. Сейчас, наверное, это самый простой и лучший способ, особенное если использовать его свойство Text:yahuu писал(а):В настоящее время я реализую это следующим образом. Или есть лучший способ?
Код: Выделить всё
SetHotkeyAction /K:A /H:F1 SelectedList
Func SelectedList()
Local aSel = List()
Local sPath = RequestCopyDataInfo("SP"), j, k = 0
aSel.Text = GetSelectedItems(3, 0)
OutputDebugString("Autorun: Selected=" & aSel.Count)
For j = 0 To aSel.Count - 1
OutputDebugString("Autorun: Item[" & j & "]=" & sPath & aSel[j])
If FileExist(sPath & aSel[j]) Then k += 1
Next
ShowHint("Selected: " & aSel.Count & auCRLF & "Processed: " & k)
Free(aSel)
EndFuncAkulaBig писал(а):Я в инете никого и ничего не боюсь. Тут все смелые
Код: Выделить всё
Global LANG_THREAD = 1
RegisterCommand 60008 "WatchLangSwitch"
SetHotkeyAction /K:A /H:F1 WatchLangSwitch 0
RunThread ThreadWatchLang
Func WatchLangSwitch(lParam)
If LANG_THREAD > 0 Then
LANG_THREAD = 0
Else
LANG_THREAD = 1
RunThread ThreadWatchLang
EndIf
EndFunc
Func ThreadWatchLang()
Local h = WinFind(AUTORUN_TCHANDLE, "TMyPanel", 5), txt, lng
Static c = 0
If c > 0 Then Return
c += 1
While LANG_THREAD > 0
txt = WinGetText(h)
If DetectLang(txt) <> lng Then ShowHint("Язык: " & DetectLang(txt))
OutputDebugString("Autorun: TMyPanel = " & txt)
lng = DetectLang(txt)
OutputDebugString("Autorun: Language = " & lng)
Sleep(1000)
Wend
c = 0
LANG_THREAD = 0
ShowHint("Поток остановлен")
EndFunc
Func DetectLang(Text)
Local Lang
If StrPos(Text, "файл") Then
Lang = "Русский"
ElseIf StrPos(Text, "file") Then
Lang = "English"
Else
Lang = "???"
EndIf
Return Lang
EndFuncПо кнопке или хоткею проблем нет сделать даже без Autorun. Хочется именно переключаться стандартным способом.sa писал(а):AkulaBig
Вот здесь и далее не совсем то обсуждалось, но может, пригодится?
Собственно чудес не бывает. Понятно, что все идет через таймер. Но ведь таже оконная процедура тоже CALLBACK. Да многие функции через таймер. Вроде лишнего не грузят. Вот и хочется проверить, стоит-ли игра свеч.Orion9 писал(а):ресурсы жрать нехилые и мешать нормальной работе ТС![]()
Что и ожидается. Спасибо большое. Мне главное принцип понять, а дальше придумаю, что надо.Orion9 писал(а): Что касается ресурсов, то у меня сейчас, включая этот, четыре потока крутятся - загрузка ЦПУ от totalcmd.exe в пределах погрешности![]()