Orion9

|
Posted: Thu Oct 02, 2025 20:42 Post subject: |
|
|
Loopback
Ну что, покажем Гислеру, как надо цвет панелей менять?
 Hidden text Code: | RegisterCommand 70052 "BackColorSelect"
Func BackColorSelect(lParam)
Local bkg1, bkg2
IniRead /R bkg1 %COMMANDER_INI% "Colors" "BackColor" -1
IniRead /R bkg2 %COMMANDER_INI% "Colors" "BackColor2" -1
Local oCC = Callback("ColorChooseProc", "hwnd;uint;wparam;lparam")
Local cls = Buffer(64), buf = Buffer(auX64 ? 72 : 36)
cls.Zero()
cls.SetNum(0, "dword", 0x000000FF, _
"dword", 0x0000FF00, _
"dword", 0x00FF0000, _
"dword", 0x00FFFFFF, _
"dword", 0x00808080)
buf.Zero()
If auX64 Then
buf.SetNum(0, "dword", buf.size)
buf.SetNum(8, "hwnd", AUTORUN_TCHANDLE)
buf.SetNum(16, "hwnd", 0, _
"uint", bkg1)
buf.SetNum(32, "ptr", cls.ptr, _
"dword", 0x00000113)
buf.SetNum(48, "lparam", 0, _
"ptr", oCC.ptr)
Else
buf.SetNum(0, "dword", buf.size, _
"hwnd", AUTORUN_TCHANDLE, _
"hwnd", 0, _
"uint", bkg1, _
"ptr", cls.ptr, _
"dword", 0x00000113, _
"lparam", 0, _
"ptr", oCC.ptr)
EndIf
If Not DllCall("comdlg32.dll\ChooseColorW", "ptr", buf.ptr, "bool") Then
WriteBackground(bkg1, bkg2)
EndIf
Free(buf, cls, oCC)
EndFunc
Func ColorChooseProc(hWnd, uMsg, wParam, lParam)
Static IDOK = 1, IDCANCEL = 2, WM_COMMAND = 0x0111
Static r, g, b, c, max = 1*255 + 256*255 + 65536*255, last = -2
If uMsg = WM_COMMAND Then
If wParam = IDOK Or wParam = IDCANCEL Then Return 0
r = WinGetText(WinFind(hWnd, "Edit", 4))
g = WinGetText(WinFind(hWnd, "Edit", 5))
b = WinGetText(WinFind(hWnd, "Edit", 6))
If StrLen(r) = 0 Then r = 0
If StrLen(g) = 0 Then g = 0
If StrLen(b) = 0 Then b = 0
c = 1*r + 256*g + 65536*b
WinSetText("RGB: " & r & ", " & g & ", " & b, hWnd)
If Not IsInt(c) Then Return 0
If c = last Then Return 0
If c >= -1 And c <= max Then
WriteBackground(c, c)
last = c
Endif
EndIf
Return 0
EndFunc
Func WriteBackground(Color1, Color2)
IniWrite /R %COMMANDER_INI% "Colors" "BackColor" %Color1%
IniWrite /R %COMMANDER_INI% "Colors" "BackColor2" %Color2%
# обновление панелей
SendCommand 2957
SendCommand 2957
EndFunc |
 Hidden text TOTALCMD#BAR#DATA
70052
%COMMANDER_EXE%
Смена фона панелей
1
-1
Ну вот. А то всё диалоги да диалоги. Не по-швейцарски это. Или по-швейцарски?
A55555
Новая функция работает только с Everything, проверять условие не требуется. Т.е. вместо:
Code: | If bEverything Then CommandExec em_everything |
Можно просто посылать em_команду, например, после отображения прогресс-бара:
Code: | RunThread "WinFindTorrentData"
While g_FindTorrTask = 0
Sleep(50)
Wend
CommandExec em_everything |
А в конце выгружать Everything после подсчета времени операции:
Code: | T2 = Round(GetUptime() - T1, 0) / 1000
T3 = "Время поиска: " & StrFormat("%.3f", T2) & " sec"
CommandExec em_everything |
Старый поиск без Everything не может работать дольше прежнего, ничего вроде не менялось. Возможно, у вас диски другие добавились или буквы изменились. Для ускорения поиска на HDD тома NTFS должны индексироваться (эта галочка обычно стоит по умолчанию в Windows) и лучше исключить системный раздел из поиска, особенно если на нем не хранятся торрент-данные. Другие логические диски, где тоже ничего нет, лучше тоже исключить из поиска.
Для обратного поведения CapsLock нужно поставить "Not" после условия, т.е. заменить
Code: | # проверка CapsLock
If BitAND(DllCall("GetKeyState", "int", 0x14, "short"), 1) Then |
на Code: | # проверка CapsLock
If Not BitAND(DllCall("GetKeyState", "int", 0x14, "short"), 1) Then |
И вы были правы. В старой функции поиска была ошибка и CapsLock работал наоборот. В последней версии модуля я исправил эту оплошность:
Code: | IniRead gDriveInclude %COMMANDER_INI% "Autorun" "TorrentDrives" %"gDriveInclude"
If Not BitAND(DllCall("GetKeyState", "int", 0x14, "short"), 1) Then |
Code: | If BitAND(DllCall("GetKeyState", "int", 0x14, "short"), 1) Then
SetHintParam("ShowHint", "Font", 15, "Arial") |
Вам тоже нужно добавить "Not" во втором случае, а в первом его убрать.
Что касается недокаченных раздач, то термин изначально был выбран неправильно. Речь идет о частично закаченных раздачах, как вы верно определили. Соответственно, поиск по размеру не будет давать результата. Можно попробовать в клиенте поставить опцию, чтобы дисковое пространство распределялось сразу, но не уверен, что это поможет.
Да, если в торрент-файле много мелких файлов, то поиск может длиться долго, но не бесконечно. Чем больше мелких файлов, тем больше результатов возвращает Everything и тем медленне все делается. К сожалению, Blu-Ray диски этим грешат. Они содежат много мелких файлов, которые ко всему прочему совпадают по именам и структуре каталогов с другими Blu-Ray дисками. Алгоритм поиска нужно улучшать, чтобы принимать во внимание только большие файлы. Но можно в настройках Everything исключить ненужные диски из индексации. Это должно ускорить поиск. В принципе режим "Имя+размер" должен быстро работать по сравнению с другими режимами, и достоверности от него больше, если какие-то файлы были полностью закачены. |
|