Orion9

|
Posted: Fri Oct 02, 2026 14:10 Post subject: |
|
|
AkulaBig
Если использовать функции для работы с exiftool через stdin/stdout, можно сделать так.
| Code: | If Not StartExifProcess() Then Return ShowHint("Операция прервана") |
Функция для обработки полей.
 Hidden text | Code: | Func ExifHint(FileName, FieldIndex, UnitIndex)
# первое поле подсказки C1
# инициализация новой подсказки
If FieldIndex = 1 Then
# объект является каталогом
If StrPos(FileGetAttr(FileName), "D") Then
gHintPipe = ""
Return
EndIf
# проверка CapsLock и Ctrl
Local bCtrl = BitAND(DllCall("GetKeyState", "int", 0x14, "short"), 1)
If Not bCtrl then bCtrl = IsPressed (0x11)
# обратное поведение Ctrl
If gHintCaps And Not bCtrl Then
gHintPipe = ""
Return
EndIf
# разделение панели на три области
Local x, y, w, sArgs
Local hWnd = RequestInfo(ItemAtCursor("panel"))
WinGetPos("", "", "w", "", hWnd)
If w > 0 Then
MouseGetPos("x","y")
Static buf = Buffer(8) # POINT
buf.Zero()
buf.SetNum(0, "long", x, "long", y)
DllCall("ScreenToClient", "hwnd", hWnd, "ptr", buf.ptr)
x = buf.GetNum(0)
Switch Round(x/w*100,0)
Case 0 To 9
sArgs = "-G" & auCRLF & "-S"
Case 10 To 90
sArgs = "-G0" & auCRLF & "-lang" & auCRLF & "ru"
Case 91 To 100
sArgs = "-g" & auCRLF & "-s2" & auCRLF & "-lang" & auCRLF & "ru"
EndSwitch
EndIf
# запись в stdin процесса
WriteLine(sArgs & auCRLF & Filename & auCRLF & "-execute" & auCRLF)
# получение ответа
gHintPipe = ReadResponse() & auCRLF
Endif
# разделение ответа на строки
# выполняется для всех полей подсказки C1-C60
If gHintPipe <> "" Then Return StrPart(gHintPipe, auCRLF, FieldIndex)
EndFunc
|
 Hidden text
Выхлопывает так, что треск стоит. |
|