Orion9

|
Posted: Sun Nov 30, 2025 14:04 Post subject: |
|
|
Сразу всего не охватишь, поэтому дополню чуть-чуть с вашего позволения.
Loopback
Поменял местами и всё заработало:
 Hidden text | Code: | If gBindDiskWnd Then
Global gDiskWP = Callback("DiskWndProc", "hwnd;uint;wparam;lparam")
hDiskWnd = WinFind(AUTORUN_TCHANDLE, _
AUTORUN_TCARCH = 32 ? "TMyPanel" : "Window", AUTORUN_TCARCH = 32 ? 6 : 10)
If hDiskWnd > 0 Then
gDiskWndProc = DllCall("SetWindowLong" & (auX64 ? "PtrW" : "W"), _
"hwnd", hDiskWnd, "int", -4, "long_ptr", gDiskWP.Ptr, "ptr")
EndIf
EndIf
ControlSetMouseAction /R 15 DrivesMenu
ControlSetMouseAction /K:S /R 15 DrivesMenu
ControlSetMouseAction /K:C /R 15 DrivesMenu |
Т.е ControlSetMouseAction выполняется теперь после SetWindowLong. Похоже, ТС х64 именно это не нравилось.
| Loopback wrote: | | Создаёт с указанным размером, 256. Размер 255 просто чтобы записанная строка гарантированно завершалось нулем. |
Т.е. Wstr:256 создает буфер размером в 256 юникодных символов, что = 512 байт, так следует понимать? В общем, не стал загоняться и сделал как у вас.
 Hidden text | Code: | DllCall("GetVolumeInformationW", _
"wstr", sDrive, "wstr:256", @sName, "dword", 255, "ptr", 0, "ptr", 0, "ptr", 0, "wstr:256", @sFS, "dword", 255)
If bBuffer Then
Static nam = Buffer(512), fs = Buffer(512)
nam.Zero()
fs.Zero()
DllCall("GetVolumeInformationW", _
"wstr", sDrive, "ptr", nam.ptr, "dword", 255, "ptr", 0, "ptr", 0, "ptr", 0, "ptr", fs.ptr, "dword", 255)
sName = nam.GetStr()
sFS = fs.GetStr()
EndIf |
| Loopback wrote: | | Вот и хорошо, и не нужно обвес для статистики городить. |
Да, функционал мне понравился. Точнее сказать, он меня пока устраивает. В последнее время часто приходилось выделять новые диапазоны команд для модулей и хотелась сразу видеть все RegisterCommand. Но и SetHotkeyAction теперь можно быстро посмотреть вместе с ControlSetMouseAction. Правда я не сразу заметил, что ошибся в регулярном выражении. Дожно быть | Code: | RegExp("(.)(" & cmd & ".*?)\r", text) | а не | Code: | RegExp("(.)(" & cmd & ".*?)\r\n", text) | иначе команды расположенные вместе пропускаются.
Такую же мелкую оплошность допустил в модуле MediaInfo. Там должно быть
 Hidden text | Code: | ms = DllCall(pGet, "Ptr", hMI, "Int", 0, "Int", 0, _
"Wstr", "Duration", "Int", 1, "Int", 0, "Wstr")
vc = DllCall(pGet, "Ptr", hMI, "Int", 0, "Int", 0, _
"Wstr", "VideoCount", "Int", 1, "Int", 0, "Wstr")
ac = DllCall(pGet, "Ptr", hMI, "Int", 0, "Int", 0, _
"Wstr", "AudioCount", "Int", 1, "Int", 0, "Wstr")
If ms > 0 And vc = "" And ac = "" Then
DurationLogString("Duration.Warning:" & aFiles[i])
Continue
EndIf |
вместо
 Hidden text | Code: | vc = DllCall(pGet, "Ptr", hMI, "Int", 0, "Int", 0, _
"Wstr", "VideoCount", "Int", 1, "Int", 0, "Wstr")
ac = DllCall(pGet, "Ptr", hMI, "Int", 0, "Int", 0, _
"Wstr", "AudioCount", "Int", 1, "Int", 0, "Wstr")
If vc = "" And ac = "" Then
DurationLogString("Duration.Warning:" & aFiles[i])
Continue
EndIf
ms = DllCall(pGet, "Ptr", hMI, "Int", 0, "Int", 0, _
"Wstr", "Duration", "Int", 1, "Int", 0, "Wstr") |
иначе вместо Duration.Empty всегда будет Duration.Warning на немедиа файлах.
| Loopback wrote: | | Без кастомной отрисовки нет. |
А если через прозрачную иконку реализовать?
| Loopback wrote: | | По обрезке не знаю |
Текст обрезался. Именно поэтому в меню функции tip() я оставил комментарий, чтобы не забыть об этом сообщить | Code: | Func tipmnu()
Local txt
txt &= 'MENUITEM "Copy text", em_aucmd ' & (gTipText <> "" ? "" : "/D") & ' -1 tipcopy' & auCRLF
Return txt
EndFunc
Func tipcopy()
#ClipPut %"gTipText"
ClipPut(gTipText)
EndFunc | ведь tipcopy() это просто костыль, изначально было | Code: | txt &= 'MENUITEM "Copy text", em_aucmd ' & (gTipText <> "" ? "" : "/D") & ' -1 ClipPut %"gTipText"' & auCRLF | но текст в буфере резался.
Также для этой цели закомментировал | Code: | # Static INVALID_HANDLE_VALUE = auX64 ? 0xFFFFFFFFFFFFFFFF : 0xFFFFFFFF
Static INVALID_HANDLE_VALUE = auX64 ? 18446744073709551615 : 4294967295 | поскольку запись 0xFFFFFFFFFFFFFFFF не работала в TC x64.
Когда освободитесь, посмотрите, пожалуйста, в чем может быть дело. |
|