Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Autorun 
Author Message
Orion9



PostPosted: Thu Oct 01, 2026 13:39    Post subject: Reply with quote

FallenAngel wrote:
Имя сбойного приложения: TOTALCMD64.EXE, версия: 11.58.0.0, метка времени: 0x00000000
Имя сбойного модуля: Autorun.wdx64, версия: 2.2.21.3, метка времени: 0x68ef4c72
Код исключения: 0xc0000005

К сожалению, это мало о чем говорит. Ошибка произошла в модуле Autorun, но что именно случилось, не понятно.

AkulaBig wrote:
Он работает медленно.

Не мудрено. У вас сейчас в этой функции 60 раз читается ini, 60 раз проверяется id процесса и 60 раз удаляется файл. И это для каждой подсказки.

AkulaBig wrote:
А если прописать FieldIndex, то получается фигня

FieldIndex = 1 как раз нужен, чтобы сделать иницилизацию только один раз, когда вызывается первое поле подсказки, у меня так и сделано
Code:
Func ExifHint(FileName, FieldIndex, UnitIndex)
    If FieldIndex > gHintLines Then Return
    If StrPos(FileGetAttr(FileName), "D") Then Return

    Local bCtrl = BitAND(DllCall("GetKeyState", "int", 0x14, "short"), 1)   
    If Not bCtrl then bCtrl = IsPressed (0x11)
    If gHintCaps And Not bCtrl Then Return
         
    If FieldIndex = 1 Then
       #ProcessExecGetOutput /C:65001 gHintPipe %gMediaExifX32% ' -G -S -lang ru "%FileName%"'     
       gHintPipe = GetExifInfo(FileName)
    Endif     
    #Return FixSpaces(StrPart(gHintPipe, auLF, FieldIndex))
    Return StrPart(gHintPipe, auLF, FieldIndex)   
EndFunc

Даже этот код можно попробовать оптимизировать, убрав все лишнее: т.е. убрать все, что выше If FieldIndex = 1, в само условие If FieldIndex = 1.

Объект BinaryFile должен быть в статике, чтобы он тоже не создавался 60 раз
Code:
Static obj = BinaryFile(gExifArgs, "a")

Free(obj) тогда не нужен.

AkulaBig wrote:
Ваш вариант летает как ракета

Работает он быстро, но не стабильно. Скорее всего файл не успевает удаляться, поэтому не всегда результат в подсказке корректен. Нужно делать дополнительню проверку удаления файла, чтобы гарантировать надежность, но, понятное дело, ценой потери в скорости. Как сказал болван
Quote:
Если один и тот же файл постоянно перезаписывается, никогда не доверяйте успешному возврату из DeleteFileW. Либо переименовывайте файл в случайное имя перед удалением (чтобы сразу освободить оригинальное имя), либо используйте цикл с GetFileAttributesW, чтобы дождаться реального исчезновения файла с диска.

И соответствующий код
 Hidden text

AkulaBig wrote:
Но кривой вывод

Вывод не кривой, а сырой (неформатированный). Я так и не понял, что хочу от этой подсказки, поэтому она осталась в недоделанном состоянии.
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group