Orion9

|
Posted: Sat Oct 04, 2025 14:01 Post subject: |
|
|
Monarch-LFV
Если с плагином ничего не получится, можно попробовать извлечь данные через Autorun или WinScriptAdv. Алгоритм не должен быть сложный. В теории можно из любой консольной утилиты вытянуть что угодно, если заранее известен формат вывода.
Пример на Autorun:
 Hidden text Code: | Pragma AutorunPluginFields "GeoCity:::ExifGeoData" "GeoRegion:::ExifGeoData" "GeoCountryCode:::ExifGeoData""GeoCountry:::ExifGeoData" "GeoDistance:::ExifGeoData"
Global gExifDir = COMMANDER_PATH & "\Plugins\wlx\ExifToolView\"
Global gExifExe = gExifDir & "exiftool.exe", gExifParam = '-charset filename=Cyrillic -api geolocation "-geolocation city*" "-geolocation region*" "-geolocation country*" "-geolocation Distance*"'
Global gGeoOut = List(), gGeoData = List("", "", "", "", "")
Global gGeoList = List("Geolocation City", "Geolocation Region", "Geolocation Country Code", "Geolocation Country", "Geolocation Distance")
Func ExifGeoData(FileName, FieldIndex, UnitIndex)
Static lst, dat, idx
If StrPos(FileGetAttr(FileName), "D") Then Return
If FieldIndex = 1 Then
gGeoOut.Count = 0
gGeoOut.Text = ProcessExecGetOutput(FileName, gExifExe gExifDir)
For idx = 0 To gGeoData.Count - 1
gGeoData[idx] = ""
Next
For geo In gGeoOut
If StrPos(geo, ":") Then
lst = StrTrim(StrPart(geo, ":", 1))
dat = StrTrim(StrPart(geo, ":", 2))
idx = gGeoList.IndexOf(lst)
If idx <> -1 Then gGeoData[idx] = dat
EndIf
Next
Endif
Return gGeoData[FieldIndex-1]
EndFunc |
Пример больше концептуальный, его еще нужно на практике проверять и доводить до рабочего состояния. Единственное правда, что стоит отметить, если в Autorun уже есть созданные поля через директиву Pragma AutorunPluginFields, то новые поля нужно добавлять в начало. Если добавить в конец, то FieldIndex не будет равен 1. Тогда придется это учитывать и прибавлять значение в условии
Code: | If FieldIndex = 1+10 Then |
А в результате отбавлять
Code: | Return gGeoData[FieldIndex-1-10] |
если полей было, например 10. |
|