;Получить свойства PDF с помощью плагина xPDFSearch ; ; Путь к плагину указывается в 23й строке (Local $sPlugin = ""). Писать только xPDFSearch.wdx, ; можно с переменными окружения ; Разрядность AutoIt должна соответствовать разрядности плагина! Скрипт сам проверит и ; если х64, то попытается использовать "*.wdx64" ; ; Запуск: AutoIt3.exe script.au3 %P%N #NoTrayIcon Opt('WinWaitDelay', 100) Global Const $MAX_BUFFER_SIZE = 65534 Global Const $ft_string = 8 Global Const $ft_stringw = 11 Global Const $ft_nosuchfield = -1 Global Const $ft_fileerror = -2 Global Const $ft_fieldempty = -3 Global Const $tagContentDefaultParamStruct = "int;dword;dword;char[256]" Local $hPlugin, $sTitle, $sSub, $sAut, $sApp, $sProd, $sMsg, $iErr = 0 Local $sPlugin = "%COMMANDER_PATH%\Plugins\wdx\xPDFSearch\xPDFSearch.wdx" ;Проверяем параметры запуска If $CmdLine[0] <> 1 Then MsgBox(48 + 4096, @ScriptName, 'Проверьте параметры запуска!') Exit EndIf ;Ищем плагин xPDFSearch $sPlugin = _WinAPI_ExpandEnvironmentStrings($sPlugin) If @AutoItX64 Then $sPlugin = $sPlugin & '64' If Not FileExists($sPlugin) Then MsgBox(48 + 4096, @ScriptName, 'wdx-плагин xPDFSearch не найден, выходим.') Exit EndIf ;Получаем инфо $hPlugin = _PHWDXPluginOpen($sPlugin) $sTitle = __PHWDXGetFieldValue($hPlugin, $CmdLine[1], 0, 0) If @error Then $iErr += 1 $sSub = __PHWDXGetFieldValue($hPlugin, $CmdLine[1], 1, 0) If @error Then $iErr += 1 $sAut = __PHWDXGetFieldValue($hPlugin, $CmdLine[1], 3, 0) If @error Then $iErr += 1 $sApp = __PHWDXGetFieldValue($hPlugin, $CmdLine[1], 4, 0) If @error Then $iErr += 1 $sProd = __PHWDXGetFieldValue($hPlugin, $CmdLine[1], 5, 0) If @error Then $iErr += 1 _PHWDXPluginClose($hPlugin) If $iErr > 0 Then MsgBox(48 + 4096, @ScriptName, 'Ошибка получения значений полей wdx-плагина, выходим.') Else $sMsg = 'Заголовок: ' & $sTitle & @CRLF & _ 'Тема: ' & $sSub & @CRLF & _ 'Автор: ' & $sAut & @CRLF & _ 'Приложение: ' & $sApp & @CRLF & _ 'Производитель PDF: ' & $sProd & @CRLF & @CRLF & _ 'Скопировать в буфер обмена Приложение и Производитель PDF?' If MsgBox(4 + 256 + 4096, @ScriptName, $sMsg) = 6 Then ClipPut($sApp & @CRLF & $sProd) EndIf #Region ;UDF ;PluginHelpers.au3 (Loopback) Func _PHWDXPluginOpen($sPlugin) Local $hPlugin = DllOpen($sPlugin) If @error Then Return SetError(1, 0, "") Local $pDPS = DllStructCreate($tagContentDefaultParamStruct) DllStructSetData($pDPS, 1, 272) DllStructSetData($pDPS, 2, 10) DllStructSetData($pDPS, 3, 2) DllStructSetData($pDPS, 4, EnvGet("COMMANDER_PATH") & "\contplug.ini") DllCall($hPlugin, "none", "ContentSetDefaultParams", "ptr", DllStructGetPtr($pDPS)) Return $hPlugin EndFunc ;==>_PHWDXPluginOpen Func _PHWDXPluginClose($hPlugin) DllCall($hPlugin, "none", "ContentPluginUnloading") DllClose($hPlugin) EndFunc ;==>_PHWDXPluginClose Func __PHWDXGetFieldValue($vPlugin, $sFileName, $nFieldIdx, $nUnitIdx) Local $pBuffer = DllStructCreate("byte[" & $MAX_BUFFER_SIZE & "]") $aRet = DllCall($vPlugin, "int", "ContentGetValueW", "wstr", $sFileName, "int", $nFieldIdx, "int", $nUnitIdx, "ptr", DllStructGetPtr($pBuffer), "int", $MAX_BUFFER_SIZE, "int", 0) If @error = 3 Then $aRet = DllCall($vPlugin, "int", "ContentGetValue", "str", $sFileName, "int", $nFieldIdx, "int", $nUnitIdx, "ptr", DllStructGetPtr($pBuffer), "int", $MAX_BUFFER_SIZE, "int", 0) If @error Then Return SetError(1, 0, "") Switch $aRet[0] Case $ft_string $pValue = DllStructCreate("char[" & $MAX_BUFFER_SIZE & "]", DllStructGetPtr($pBuffer)) Case $ft_stringw $pValue = DllStructCreate("wchar[" & $MAX_BUFFER_SIZE / 2 & "]", DllStructGetPtr($pBuffer)) Case $ft_nosuchfield, $ft_fileerror, $ft_fieldempty Return SetError(2, 0, "") Case Else Return SetError(3, 0, "") EndSwitch Return DllStructGetData($pValue, 1) EndFunc ;==>__PHWDXGetFieldValue ;WinAPI.au3 Func _WinAPI_ExpandEnvironmentStrings($sString) Local $aResult = DllCall("kernel32.dll", "dword", "ExpandEnvironmentStringsW", "wstr", $sString, "wstr", "", "dword", 4096) If @error Then Return SetError(@error, @extended, "") Return $aResult[2] EndFunc ;==>_WinAPI_ExpandEnvironmentStrings #EndRegion ;UDF |