Страница 223 из 243

Добавлено: Вт мар 03, 2026 18:25
Mrak_Tlen
А только у меня закрывается тотал со скриптом нагскрин, если после запуска первым делом нажать на любой пункт меню или правой кнопкой на панель табуляторов(имя,тип,размер). Но если что то другое, то потом нормально работает и не падает. Например перейти на другую вкладку.

Добавлено: Ср мар 04, 2026 07:28
yozhik
При попытке удалить файл

Код: Выделить всё

FileDelete(COMMANDER_PATH & '\Profile\arc\7z64\temp1.txt')
получил отворот
Runtime error 216 at 06CC5EC0
Autorun 2.2.21.3, TC 11.56 x32, Windows 11 23H2.

Добавлено: Ср мар 04, 2026 11:04
Orion9
Mrak_Tlen писал(а):А только у меня закрывается тотал со скриптом нагскрин
Не только у вас. Варианты что делать предлагались. Если у вас стоит TWinKey, попробуйте отключить. Скорее всего, он вызывает эту проблему.
yozhik писал(а):Runtime error 216 at 06CC5EC0
Возможно, косяк Autorun, но для верности лучше посмотреть журнал приложений (сбойный модуль может оказаться другим). Реальный пример из моего журнала:

Код: Выделить всё

Имя сбойного приложения: TOTALCMD.EXE, версия: 11.55.0.0, метка времени: 0x2a425e19
Имя сбойного модуля: LineBreakInfo.wdx, версия: 0.3.0.0, метка времени: 0x6569ee66
Код исключения: 0xc0000005
Смещение ошибки: 0x0004a7c8
Сначала я тоже грешил на Autorun.

Добавлено: Ср мар 04, 2026 15:12
FallenAngel
Mrak_Tlen писал(а):А только у меня
Там много вариантов, не только пункт меню. Я не поборол и вернулся к autoclick.dll

Добавлено: Ср мар 04, 2026 15:44
AkulaBig
Mrak_Tlen писал(а):А только у меня закрывается тотал со скриптом нагскрин
Закрывается на моей сборке или на вашей? У меня все отлично работает. Возможно у вас стоит какая-нибудь программа, перехватывающая нажатия клавиш типа панто свитчера.

Добавлено: Ср мар 04, 2026 17:30
Orion9
yozhik писал(а):При попытке удалить файл
Дошли руки проверить. Проблема действительно есть.

Код: Выделить всё

Имя сбойного модуля: Autorun.wdx, версия: 2.2.21.3, метка времени: 0x68ef4c68

Как вариант (если очень нужно) можно использовать ShellExec, пока автор плагина не объявится

Код: Выделить всё

Local tmp1 = COMMANDER_PATH & '\Ini\Backup\temp1.txt'
ShellExec /SW_HIDE /WAIT:2000 %COMSPEC% "/c del /f /q ""%tmp1%"""
Или лучше сразу с FileExist

Код: Выделить всё

Local tmp1 = COMMANDER_PATH & '\Ini\Backup\temp1.txt'
If FileExist(tmp1) Then 
   ShellExec /SW_HIDE /WAIT:2000 %COMSPEC% "/c del /f /q ""%tmp1%"""
Endif   
FallenAngel писал(а):Я не поборол и вернулся к autoclick.dll
Так не понятно было с чем бороться. Вы попробовали на другом компьютере, сказали, что всё то же самое, но пробовать нужно на другой сборке, где проблемы изначально не было замечено. Если на другой сборке проблемы нет, хотя бы будет понятно, что причину нужно искать в настройках своего ТС, а скорее всего в каком-то плагине, типа TWinKey.

Добавлено: Ср мар 04, 2026 19:23
AkulaBig
Orion9 писал(а):Так не понятно было с чем бороться.
Появился еще один интересный результат тестирования. Я у себя время цикла на 1 с исправил. Но тем не менее периодически окно висит несколько секунд. Поймать этот момент не возможно, соответственно время вычислить не возможно. Но у меня и время операций зависит от занятости ЦПУ.

Добавлено: Ср мар 04, 2026 20:11
Mrak_Tlen
Закрыл пунтосвитчер. проблема пока ушла и не воспроизводится даже когда пунто запустил... может через время или после перезагрузки опять вернется.
Твинкей тоже есть. Долго искал, что тормозит, оказалось его автосортировка.Ссорь за оффтоп.

Добавлено: Ср мар 04, 2026 20:16
AkulaBig
Mrak_Tlen писал(а):Закрыл пунтосвитчер. проблема пока ушла
Я уже собаку съел на таких прожках :) У меня все плагины на хуках построены. И перехватывают нажатия клавиш. Уже столько человек на этом попались.
[cut]
Извиняюсь за офтоп, но вместо панто свитчера предлагаю попробовать прожку Mahou. Сам ей пользуюсь и очень доволен. А про панто свитчер очень плохие вещи пишут. Не знаю, может сейчас они устранены.
[/cut]

Добавлено: Ср мар 04, 2026 23:00
Orion9
AkulaBig писал(а):Появился еще один интересный результат тестирования
Ну, о своем тестировании я тоже писал. Проблему воспроизвести мне не удалось, да и вообще проблем не заметил. Возможно, нужно больше тестов, но без повторения проблемы (закрытия тотала) остается только гадать, что может к этому приводить.
Mrak_Tlen писал(а):Закрыл пунтосвитчер. проблема пока ушла

Твинкей тоже есть.
Не знаю на счет пунтосвитчера, но TWinKey, на мой взгляд, более опасен в плане конфликта. Он так же, как и Autorun, загружается в ТС в качестве псевдоконтентного плагина и перехвтывает нажатия клавиш.

Чтобы разобраться, что происходит, нужно для начала как-то локализировать проблему. Убедиться, что тотал не падает. А если падает, то какой плагин к этому приводит (посмотреть в журнале приложений). Проверить на других сборках. Проверить на чистом ТС. И так далее.

Ну а если не хочется этим заниматься, можно и к autoclick.dll вернуться )

Добавлено: Ср мар 04, 2026 23:21
AkulaBig
Orion9 писал(а):TWinKey, на мой взгляд, более опасен в плане конфликта
Но я его не использую. Соответственно если и моя сборка падает, значит панто свитчер или что-то подобное.

Добавлено: Сб мар 07, 2026 11:57
Orion9
Решение от AkulaBig рабочее, у меня этот код проблем не вызывает. Тем не менее, решил сделать альтернативный код, использующий другой алгоритм поиска кнопки.

Делал из интереса, поэтому некоторые моменты не учтены (например, работа с ключем в реестре), но разделение на блоки позволяет легко внести нужные изменения, если они потребуется.

Пример хорошо демонстрирует всю мощь и великолепие скриптового языка, которым стал современный Autorun. Тут вам и запуск в отдельном потоке, и чтение ключей из ini, и проверка существования файлов и каталогов, и раскрытие переменных окружения, и создание массивов, и выполнение операций в цикле, и работа со строками, и вызовы DllCall... Матерь божья! :lol: Чувак сделал целый скриптовый движок!

[cut]

Код: Выделить всё

LoadLibrary Plugins\Autorun_Tweaks.dll
LoadLibrary Plugins\Autorun_Sysinfo.dll
LoadLibrary Plugins\Autorun_Runtime.dll
LoadLibrary Plugins\Autorun_Process.dll
LoadLibrary Plugins\Autorun_RegExp.dll

RunThread("NagScreen")

Func NagScreen()
    Global gNagPush = 0, gNagCtrl = List()
    If WincmdKeyExist() Then Return    
    Local ewp = Callback("EnumChilProc", "hwnd;lparam"), dbg = 1
    Local hWnd, nTimeOut = 2000, nSleep = 0
    While nTimeOut > 0
        hWnd = WinFind(0, "TNASTYNAGSCREEN")
        If hWnd > 0 Then
           DllCall("EnumChildWindows", "hwnd", hWnd, "ptr", ewp.Ptr, "lparam", 0)       
           If gNagPush Then Break
        EndIf
        Sleep(50)
        nTimeOut -= 50
    Wend       
    If hWnd = 0 Then Return
    If nSleep > 0 Then Sleep(nSleep)    
    If dbg And IsPressed(0x11) Then ShowHint(gNagCtrl.Text)
    Free(gNagCtrl, ewp)
EndFunc 

Func WincmdKeyExist()
    Local lst = gNagCtrl
    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))    
    If FileExist("c:\totalcmd") Then lst.Add("c:\totalcmd")
    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

Func EnumChilProc(hwnd, lparam)
    Local Text = WinGetText(hwnd)
    gNagCtrl.Add(WinGetClass(hwnd) & " - " & Text)
    If StrLen(Text) = 1 Then 
       gNagPush = Text
       Return 1
    EndIf
    If StrLen(Text) = 2 Then     
       Text = StrReplace(Text, "&", "")
       If Text = gNagPush Then 
          SendMessage(hwnd, 245, 0, 0)
          Return 0
       EndIf
    EndIf   
    Return 1   
EndFunc
[/cut]
Что касается алгоритма, принцип примерно такой же. Каждые 50 миллисекунд после старта ТС происходит поиск окна триала. Если окно найдено, перечисляются все элементы управления через вызов EnumChildWindows. Далее сравнивается текст и класс каждого элемента, при совпадении посылается SendMessage.

Пример перечисления есть в справке (объект Callback), он был взят за основу.

Код можно вставить в любое место, но первый вызов "RunThread" должен обязательно идти после "LoadLibrary Plugins", поскольку используются дополнительные функции из модулей такие, как WinFind и ShowHint.

Если dbg = 1, то при запуске с удержанием CTRL отобразится отладочная информация в окне подсказки.

Возможно, запуск в отдельном потоке поможет избавится от конфликта с другими приложениями и плагинами, если таковой конфликт имелся.

Добавлено: Сб мар 07, 2026 17:02
AkulaBig
Orion9 писал(а):у меня этот код проблем не вызывает.
А вы установите Панто Свитчер :) С ним много проблем получите. А кстати, может потестите.
Orion9 писал(а):If FileExist(lst & "\tcmdkey.zip") Then Return 1 

Я-же так и забыл проверить архив. Спасибо что напомнили, надо добавить.

Добавлено: Сб мар 07, 2026 23:27
Orion9
AkulaBig писал(а):А вы установите Панто Свитчер
Зачем нам Панто Свитчер? Мы сделаем свой Панто Свитчер. Возможности Autorun не знают границ :lol:

Небольшой патч к функционалу
[cut]

Код: Выделить всё

Func NagScreen()
    Global gNagPush = 0, gNagCtrl = List()
    If WincmdKeyExist() Then Return    
    Local ewp = Callback("EnumChilProc", "hwnd;lparam"), dbg = 1
    Local hWnd, nTimeOut = 1500, nSleep = 0
    While nTimeOut > 0
        hWnd = WinFind(0, "TNASTYNAGSCREEN")
        If hWnd > 0 Then
           WinSetState(0, hWnd)
           DllCall("EnumChildWindows", "hwnd", hWnd, "ptr", ewp.Ptr, "lparam", 0)       
           If gNagPush Then Break
        EndIf
        Sleep(50)
        nTimeOut -= 50
    Wend       
    If hWnd = 0 Then Return
    If nSleep > 0 Then Sleep(nSleep)    
    If dbg And IsPressed(0x11) Then ShowHint(gNagCtrl.Text)
    Free(gNagCtrl, ewp)
    Sleep(500)
    If WinGetState(1, hWnd) Then WinSetState(1, hWnd)
EndFunc 
[/cut]
WinSetState(0, hWnd) сразу скрывает окно при появлении. Эффект гладкости, как от бритья с тройным лезвием :mrgreen:

Последние две строчки на всякий случай. Вдруг клик не сработает по какой-то причине, тогда окно снова нужно сделать видимым.

Добавлено: Сб мар 07, 2026 23:53
AkulaBig
Orion9 писал(а):WinSetState(0, hWnd) сразу скрывает окно при появлении.
Я против этого. Кстати, подозреваю что именно из-за этого глючат кликеры на некоторых видюхах, драйверах.