| View previous topic :: View next topic |
| Author |
Message |
FallenAngel
Joined: 30 Dec 2025 Posts: 30
|
(Separately) Posted: Tue Mar 10, 2026 15:35 Post subject: |
|
|
Я поддержу идею, что нужно делать nSleep 1.
Без него "белый квадрат" при старте не очень смотрится.
Или есть возможно избежать появления НагСкрина вообще? |
|
| Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 506
|
(Separately) Posted: Tue Mar 10, 2026 17:40 Post subject: |
|
|
| FallenAngel wrote: |
Или есть возможно избежать появления НагСкрина вообще? |
Раз автокликеры научились полностью скрывать наг-скрин, скорей всего и здесь можно. Но боюсь как-раз это приведет к глюкам на определенных видюхах и драйверах, как у автокликеров. |
|
| Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 1037
|
(Separately) Posted: Tue Mar 10, 2026 20:10 Post subject: |
|
|
AkulaBig
А какие глюки у автокликеров на видюхах и драйверах ? Я просто не пользовался, не сталкивался с таким.
| FallenAngel wrote: | | Или есть возможно избежать появления НагСкрина вообще? |
Видимо, да, раз AkulaBig говорит. Да вы и сами пользовались автокликером - видели, наверное.
Вообще-то, было бы интересно узнать, что за техника используется. Возможно и получится сделать то же самое на Autorun при помощи Loopback, разумеется.
Кстати, как-то я не сразу сообразил, но раз уж вы пользуетесь AutoHotkey на постоянной основе, то можно через него провернуть Shift + ЛКМ по заголовку листера, как вы хотели. Правда придется em_ команду создать в usercmd.ini. Простая посылка кода 60045 не работает почему-то, хотя я думал, что будет работать.
| Code: | [em_alight_lister]
cmd=60045 |
 Hidden text | Code: | #Requires AutoHotkey v2.0
+LButton::
{
if WinGetClass("A") = "TLister"
CheckMouseTitleArea()
}
Esc::ExitApp()
CheckMouseTitleArea()
{
CoordMode("Mouse", "Screen")
MouseGetPos(&x, &y, &hwnd)
try {
result := SendMessage(0x84, 0, (x & 0xFFFF) | ((y & 0xFFFF) << 16),, "ahk_id " hwnd)
} catch {
result := 0
}
IsInTitle := (result = 2) ; 2 = HTCAPTION (Title Bar)
if IsInTitle
SendTCUserCommand("em_alight_lister")
;SendMessage(1075, 60045, 0, , "ahk_class TTOTAL_CMD")
}
SendTCUserCommand(userCommand) {
static EM := 19781, WM_COPYDATA := 0x4A
ansiBuf := Buffer(StrPut(userCommand, 'CP0'))
StrPut(userCommand, ansiBuf, 'CP0')
COPYDATASTRUCT := Buffer(A_PtrSize * 3)
NumPut('Ptr', EM, 'Ptr', ansiBuf.size, 'Ptr', ansiBuf.ptr, COPYDATASTRUCT)
SendMessage WM_COPYDATA,, COPYDATASTRUCT,, 'ahk_class TTOTAL_CMD'
} |
В .aucfg файле, соответственно, нужно зарегистрировать код 60045
| Code: | RegisterCommand 60045 "AlignListerWindow"
SetHotkeyAction /K:C /H:0 /DM "AlignListerWindow"
Func AlignListerWindow()
If IniRead("~/R", COMMANDER_INI, "Lister", "Maximized", 0) = 0 Then
WinGetPos("x", "y", "w", "h")
IniWrite("~/R", COMMANDER_INI, "Lister", "x", x)
IniWrite("~/R", COMMANDER_INI, "Lister", "y", y)
IniWrite("~/R", COMMANDER_INI, "Lister", "dx", w)
IniWrite("~/R", COMMANDER_INI, "Lister", "dy", h)
Local hWnd = WinFind(0, "TLister")
If hWnd = 0 Then Return ShowHint("Окно листера не найдено")
WinSetPos(x, y, w, h, "", hWnd)
WinSetState(23, hWnd)
EndIf
EndFunc |
Вроде работает. Болван электронный помог, кстати. Без него я бы долго в справке возился  |
|
| Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 506
|
(Separately) Posted: Tue Mar 10, 2026 20:17 Post subject: |
|
|
| Orion9 wrote: | | А какие глюки у автокликеров на видюхах и драйверах ? |
Лично я ловил глюк на встроенной видюхе. И до обновления драйвера до последней версии. Другие пару человек тоже примерно на таком-же железе. ТС 64 мелькает, как было у меня, когда я не проверял установленный язык, а на каждый тик менял его. При этом нажать на меню или еще на что невозможно. И так ведут себя все кликеры. И я практически уверен, что это из-за функции скрытия окна наг-скрина.
Добавлено спустя 2 часа 54 минуты:
Orion9
А вы знали, что надо писать вот так?
| Code: |
Func FieldET(FileName, FieldIndex, UnitIndex)
pipe = ProcessExecGetOutput(util_ET, '"' & FileName & '"')
EndFunc
|
Теперь надо проверять, только для ProcessExecGetOutput или вообще. |
|
| Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 1037
|
(Separately) Posted: Wed Mar 11, 2026 00:31 Post subject: |
|
|
Поставил StartupScreen=0 и понял о чем речь. Тут не то что Gillette с тройным лезвием, тут целая газонокосилка проходится
В общем, при таком раскладе, да - лучше запаузить немного - смотрится намного лучше. Может Loopback подскажет что, но сейчас от мелькания окна вряд ли получится избавиться. Autorun просто за ним не успевает. Наверное, если подключать алгоритм как отдельную dll, шансов отловить окно до повления гораздо больше (что, собственно, наверное и происходит с autoclick.dll, при условии, что там используется примерно такой же алгоритм)
| AkulaBig wrote: | | При этом нажать на меню или еще на что невозможно. |
Ну да. Очень похоже, что окно триала скрывается, но клик по кнопке не срабатывает. А поскольку это окно модальное, то и тотал со своим основным окном становится недоступным. Такого же эффекта можно добиться на Autorun. Правда сейчас там и стоит откат на случай подобного казуса.
| Code: | Sleep(500)
If WinGetState(1, hWnd) Then WinSetState(1, hWnd) |
| AkulaBig wrote: | | А вы знали, что надо писать вот так? |
Если вы о кавычках, то да - они, конечно, нужны. Я это как-то упустил.
FallenAngel
У вас случайно не используется что-то типа (сейчас об этом вспомнил)
https://forum.wincmd.ru/viewpost.php?p=139933
А то вдруг это и вызывает конфликт при правом клике по колонкам. |
|
| Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 506
|
(Separately) Posted: Wed Mar 11, 2026 08:24 Post subject: |
|
|
| Orion9 wrote: | | Если вы о кавычках, то да - они, конечно, нужны. Я это как-то упустил. |
Не мудрено. Я вообще не знал, что в этой записи нужны кавычки. Теперь с кавычками путаница. Где они нужны, а где не нужны. |
|
| Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 1037
|
(Separately) Posted: Wed Mar 11, 2026 11:45 Post subject: |
|
|
| AkulaBig wrote: | | Где они нужны, а где не нужны. |
Как я понял, в основном нужны, поскольку имя файла часто передается без кавычек. Лучше сразу проверять на путях с пробелами или смотреть через OutputDebugString в отладчике. Других вариантов вроде нет.
P.s. Всё, кина не будет Loopback не вернется. Хлебникова его забрала ) |
|
| Back to top |
|
 |
FallenAngel
Joined: 30 Dec 2025 Posts: 30
|
(Separately) Posted: Wed Mar 11, 2026 11:53 Post subject: |
|
|
| Orion9 wrote: | | можно через него провернуть Shift + ЛКМ по заголовку листера, как вы хотели. |
Спасибо, но останусь пока на Alt+[, т.к. предложенная связка будет избыточна. Буду ждать доработку от Loopback
| Orion9 wrote: | | А то вдруг это и вызывает конфликт при правом клике по колонкам. |
Нет, да и сейчас после #WinSetState(0, hWnd) проблема (я надеюсь) ушла. |
|
| Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 506
|
(Separately) Posted: Wed Mar 11, 2026 13:01 Post subject: |
|
|
| Orion9 wrote: | | Как я понял, в основном нужны, поскольку имя файла часто передается без кавычек. |
Я-же до этого только вывод из библиотек делал. Получается там кавычки подставляются. А с ProcessExecGetOutput голову сломал. Через командную запись все норм ProcessExecGetOutput pipe %util_ET% '"%FileName%"'. Но это плохой вариант. И только
| Orion9 wrote: | | смотреть через OutputDebugString в отладчике |
так увидел проблему. Но сломал голову, как поставить кавычки. Пробовал имя файла в кавычки взять. В общем нигде правильный вариант не нашел. Пришлось самому догадаться. Не люблю я так решать проблемы
| Orion9 wrote: | | Loopback не вернется |
Даже не заикайтесь об этом. Ведь известно, что часто слова воплощаются в реальность.
Добавлено спустя 7 минут:
| FallenAngel wrote: | | Нет, да и сейчас после #WinSetState(0, hWnd) проблема (я надеюсь) ушла. |
Это очень странно. В моем коде нет скрытия окна. Но он у вас глючит. Получается практически тот-же самый код у вас то глючит, то не глючит. Очень сомневаюсь, что на это может повлиять отдельный поток. Неужели способ нахождения окна влияет. У меня напрямую, у Orion9 через Enum.
Это мысли вслух. Вас ни к чему не обязывают. Просто я не верю в чудеса. |
|
| Back to top |
|
 |
Orion9

Joined: 01 Jan 2024 Posts: 1037
|
(Separately) Posted: Wed Mar 11, 2026 13:44 Post subject: |
|
|
| AkulaBig wrote: | | Но это плохой вариант. |
Почему? Вполне вариант, хотя сам Loopback рекомендовал постепенно переходить к функциональной записи, однако поддержка командной по-прежнему крепка и надежна. Вообще удивляет: пользуюсь плагином без каких-то нареканий уже полгода (а то и год), а он по-прежнему все в каких-то бетах вечных числится.
| AkulaBig wrote: | | Не люблю я так решать проблемы |
Сейчас многие проблемы электронный болван помогает решить. Сам кайфую от его приминения. Особенно нравится, как он фильмы влет по описанию находит, названия которых я забыл или вообще никогда не знал.
| AkulaBig wrote: | | часто слова воплощаются в реальность. |
Ну, если он у Хлебниковой, хотя бы кормят хорошо, а это главное... Хотя счастья на лице все-равно что-то не видно
Кстати, там, говорят, рубоард в вечный бан ушел, где ж вы теперь харчеваться то будете?
Предвкушая ваш ответ, отвечу: вечный опал не торт, совсем не торт  |
|
| Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 506
|
(Separately) Posted: Wed Mar 11, 2026 14:38 Post subject: |
|
|
| Orion9 wrote: | | говорят, рубоард в вечный бан ушел |
Есть методы заставить его работать. Но кто знает, надолго ли это. Я вообще руководство ру борды не понимаю. Зачем на техническом форуме разрешать срач. Из-за одной темы всему форуму капец.
Кстати, я сейчас периодически качаю архив этого форума. Он тоже на ниточке держится. Хоть и совсем по другой причине.
Добавлено спустя 35 минут:
FallenAngel
Все-же мне кажется, если у вас не стоит прожка, которая перехватывает хуки нажатия клавиш, то проблема в скорости выполнения кода. Сейчас я сделал вариант, при котором можно задать время поиска окна наг-скрина, а также работа продолжается только после нажатия клавиши. Если не трудно, прошу протестировать. У меня код работает при любых вариантах, поэтому я не могу локализовать проблему.
 Hidden text
| Code: |
# CloseNagScr.aucfg
# ================================ Описание ================================
# Нажимает кнопку на наг-скрине.
# ================================= Примеры ====================================
# Для использования скрипта в плагине Total Commander Autorun, необходимо
# включить NagScreen.aucfg в файл autorun.cfg:
# Pragma Include %COMMANDER_PATH%\Plugins\wdx\Autorun\NagScreen.aucfg
# ==============================================================================
# ============================== Description ================================
# Presses a button on the nagscreen.
# ================================= Example ====================================
# To use script in plugin Total Commander Autorun, it is possible enable
# NagScreen.aucfg:
# Pragma Include %COMMANDER_PATH%\Plugins\wdx\Autorun\NagScreen.aucfg
# ==============================================================================
# Если наг-скрин не успевает закрываться, необходимо добавить задержку в
# переменной nTimeOut. Например: nTimeOut = 1000 или nTimeOut = 3000
# If nagscreen does not have time to close, you need to add a delay in
# nTimeOut variable. For example: nTimeOut = 1000 or nTimeOut = 3000
Local hWnd, nTimeOut = 0
If WincmdKeyExist() Then Return
If nTimeOut <> 0 Then
While nTimeOut > 0
FindNagScreen()
Sleep(50)
nTimeOut -= 50
Wend
Else
FindNagScreen()
EndIf
Local hNagScreen = FindNagScreen()
If hNagScreen > 0 Then
# Определяем хэндлы кнопок для закрытия окна наг-скрина
# Define button handles for closing nagscreen window
hButton3 = DllCall("GetWindow", "hwnd", hNagScreen, "uint", 2, "hwnd")
hButton2 = DllCall("GetWindow", "hwnd", hButton3, "uint", 2, "hwnd")
hButton1 = DllCall("GetWindow", "hwnd", hButton2, "uint", 2, "hwnd")
# Имитация клика ЛКМ
# Simulate LMB click
BM_CLICK = 245
# Нажимаем кнопку для закрытия окна наг-скрина
# Press the button to close nagscreen window
Switch WinGetText(hNagScreen)
Case '3'
PostMessage(hButton3, BM_CLICK, 0, 0)
Case '2'
PostMessage(hButton2, BM_CLICK, 0, 0)
Case '1'
PostMessage(hButton1, BM_CLICK, 0, 0)
EndSwitch
EndIf
# ================================ Описание ================================
# Поиск окна наг-скрина.
# ================================= Примеры ================================
# Найти окно наг-скрина: FindNagScreen()
# ==============================================================================
# ============================== Description ===============================
# Finding nagscreen window.
# ================================= Example ================================
# Find nagscreen window: FindNagScreen()
# ==============================================================================
Func FindNagScreen()
Local hNagScreen = 0
# Находим окно наг-скрина
# Find the nagscreen window
hNagScreen = WinFind(WinFind(WinFind(WinFind(WinFind(0, 'TNASTYNAGSCREEN'), _
auX64 ? "Window" : "TNotebook"), _
auX64 ? "Window" : "TPage"), _
auX64 ? "Window" : "TPanel"), _
auX64 ? "Window" : "TPanel")
Return hNagScreen
EndFunc
# ================================ Описание ================================
# Проверка наличия ключа wincmd.key.
# При наличии ключа наг-скрин не появляется.
# ================================= Примеры ================================
# Проверка наличия ключа wincmd.key в реестре или по месту расположения:
# WincmdKeyExist()
# ==============================================================================
# ============================== Description ===============================
# Checking presence of key wincmd.key.
# If you have a key, nag screen does not appear.
# ================================= Example ================================
# Checking presence of wincmd.key key in registry or at its location:
# WincmdKeyExist()
# ==============================================================================
Func WincmdKeyExist()
Local lst = List()
Local sKeyPath = IniRead("~/R", COMMANDER_INI, "Configuration", "KeyPath")
If sKeyPath = "$" Then Return 1
If sKeyPath <> "" Then
sKeyPath = JoinPath(Set(sKeyPath))
If FileExist(sKeyPath) Then lst.Add(sKeyPath)
EndIf
lst.Add(COMMANDER_PATH)
lst.Add(FileGetDir(COMMANDER_INI))
For i = 0 To lst.Count - 1
If FileExist(lst[i] & "\wincmd.key") Then Return 1
If FileExist(lst[i] & "\tcmdkey.zip") Then Return 1
Next
Return 0
EndFunc
|
Last edited by AkulaBig on Wed Mar 11, 2026 15:58; edited 1 time in total |
|
| Back to top |
|
 |
jentoso

Joined: 20 Dec 2007 Posts: 435
|
(Separately) Posted: Wed Mar 11, 2026 15:18 Post subject: |
|
|
AkulaBig
Просто вопрос из интереса.
Почему здесь присутствует пустая строка?
| Code: | Switch WinGetText(hNagScreen)
Case '3'
PostMessage(hButton3, BM_CLICK, 0, 0)
Case '2'
PostMessage(hButton2, BM_CLICK, 0, 0)
Case '1'
PostMessage(hButton1, BM_CLICK, 0, 0)
EndSwitch
EndIf |
_________________ TC 11.56 combo, Windows 11 x64 |
|
| Back to top |
|
 |
AkulaBig
Joined: 03 Dec 2008 Posts: 506
|
(Separately) Posted: Wed Mar 11, 2026 16:05 Post subject: |
|
|
jentoso
Проверка внимательности пользователей
Раз заметили - исправил
Дополнение к коду:
У меня запуск модуля нажатия на кнопку стоял последним. То-есть перед ним запускался отдельный поток, куча кода. Что могло влиять на скорость выполнения. Сейчас я переименовал модуль в CloseNagScr.aucfg и поставил его первым. То-есть свел влияние другого кода к минимуму. |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|