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: Wed Apr 23, 2025 13:35    Post subject: Reply with quote

AkulaBig
В дебри старого кода лезть не хочется, да и нет такой возможности. Наверное, лучше сделать отдельную кнопку и попробовать на ней для начала, как всё будет работать:
Code:
TOTALCMD#BAR#DATA
60020

%COMMANDER_EXE%
MediaInfoTest

1
-1

Code:
RegisterCommand 60020 "MediaInfoTest"

Func MediaInfoTest(lParam)
    Local file = RequestCopyDataInfo("SP") & RequestCopyDataInfo("SN")
    If Not FileExist(file) Then
       ShowHint("Файл не существует " & file)
       Return
    Endif   
    If StrPos(FileGetAttr(file), "D") Then
       ShowHint("Каталог" & file)
       Return
    Endif
    Static sLib = "MediaInfo" & (auX64 ? "" : "_i386") & ".dll", _
           hLib = DllCall("LoadLibrary", "wstr", COMMANDER_PATH & "\Ini\Tools\Libs\" & sLib, "ptr")
    If hLib = 0 Then
       ShowHint("Error LoadLibrary " & sLib)
       Return
    EndIf
    Local hMI = DllCall(sLib & '\MediaInfo_New', "Ptr")
    If hMI = 0 Then
       ShowHint("MediaInfo_New returned 0")
       Return
    Endif
    If DllCall(sLib & '\MediaInfo_Open', 'ptr', hMI, "wstr", file, "uint") <> 1 Then
       DllCall(sLib & '\MediaInfo_Delete', "Ptr", hMI)       
       Return ShowHint("MediaInfo_Open failed to open file " &  file)
    EndIf
    If IsPressed(0x11) Then
       DllCall(sLib & '\MediaInfo_Option', 'ptr', hMI, "wstr", "Complete", "wstr", "1", "wstr")
    EndIf
    Local sMI = DllCall(sLib & '\MediaInfo_Inform', 'ptr', hMI, "uint", 0, "wstr")
    DllCall(sLib & '\MediaInfo_Delete', "Ptr", hMI)   
    ShowHint(sMI)
EndFunc

Наспех сделанный и плохо протестированный код, но, кажется, он работает. Вызов с CTRL показывает все данные MediaInfo файла под курсором.

Фича с подсказкой при наведении на файлы мне очень нравится, регулярно ей пользуюсь. Но, насколько я понимаю, вы юзаете x64, а там с этим есть определенные проблемы. И всё же, если будете делать, то лучше, наверное, делать вызов функций по адресам, как это сделано в ahk-скрипте:
Code:
;get dll handle
this.dll := DllCall("LoadLibrary", "Str", dll_location, "Ptr")

;get pointers to make functions cleaner
this.MediaInfo_New := DllCall("GetProcAddress", "Ptr", this.dll, "AStr", "MediaInfo_New", "Ptr")
this.MediaInfo_Open := DllCall("GetProcAddress", "Ptr", this.dll, "AStr", "MediaInfo_Open", "Ptr")
this.MediaInfo_Inform := DllCall("GetProcAddress", "Ptr", this.dll, "AStr", "MediaInfo_Inform", "Ptr")
this.MediaInfo_Option := DllCall("GetProcAddress", "Ptr", this.dll, "AStr", "MediaInfo_Option", "Ptr")
this.MediaInfo_Close := DllCall("GetProcAddress", "Ptr", this.dll, "AStr", "MediaInfo_Close", "Ptr")
this.MediaInfo_Delete := DllCall("GetProcAddress", "Ptr", this.dll, "AStr", "MediaInfo_Delete", "Ptr")

;use this.handle during subsequent dll calls
this.handle := DllCall(this.MediaInfo_New, "Ptr")

;set some defaults
this.Option("Inform","TXT")

А саму библиотеку загружать только один раз при старте ТС или при первом вызове функции BigHint.
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group