Что нового

Открытие файла PDF

Alex1414

Новичок
Сообщения
2
Репутация
0
Добрый день !
Я новичок. Очень хотел спросить у опытных программистов совета.

Задача такая : открываю файл *.pdf с помощью команды ShellExecute.
Как известно-скрипт сам подбирает чем открыть файл. И на практике, если не находит Adobe reader- начинает мне открывать pdf файл через браузер.

Вопрос: Возможно ли создать список вариантов из которых скрипту разрешается выбрать чем открыть этот файл?

Например я хочу что бы он открывал только через Acrobat DC. При условии что путь- где лежит Acrobat DC мне не известен. Если это можно как то по другому сделать без "ShellExecute" - буду очень признателен за любую информацию.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
как вариант

Код:
Local $adobe = 'Reader\AcroRd32.exe', $chrome = 'chrome.exe'
Local $nA = 'Adobe Acrobat Reader DC - Russian'
Local $nCH = 'Google Chrome'
Local $File = @ScriptDir & '\test.pdf'

Local $aSoftwareInfo = _CGW()

For $str = 0 To UBound($aSoftwareInfo) - 1
	If Not StringCompare($aSoftwareInfo[$str][0], $nA) Then
		Run($aSoftwareInfo[$str][1] & '\' & $adobe & ' ' & $File)
		ExitLoop
	EndIf
;~ 	или для хрома
;~ 	If Not StringCompare($aSoftwareInfo[$str][0], $nCH) Then
;~ 		Run($aSoftwareInfo[$str][1] & '\' & $chrome & ' ' & $File)
;~ 		ExitLoop
;~ 	EndIf
Next

Func _CGW()
	Local $all_key[3]
	$all_key[0] = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
	$all_key[1] = "HKEY_LOCAL_MACHINE64\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
	$all_key[2] = 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall'
	Local $aSA[1][2], $AppKey_all, $n = 0, $X = 1, $rn, $il
	For $i = 0 To 2
		Local $a = 1
		While 1
			$AppKey_all = RegEnumKey($all_key[$i], $a)
			If Not $AppKey_all Then ExitLoop
			$rn = StringStripWS(StringReplace(RegRead($all_key[$i] & "\" & $AppKey_all, "DisplayName"), " (remove only)", ""), 3)
			$il = StringStripWS(RegRead($all_key[$i] & "\" & $AppKey_all, "InstallLocation"), 3)
			If $rn <> '' And $il <> '' Then
				ReDim $aSA[$X][2]
				$aSA[$n][0] = $rn
				If StringRight($il, 1) = '\' Then $il = StringTrimRight($il, 1)
				$aSA[$n][1] = StringReplace($il, '"', '')
				$n += 1
				$X += 1
			EndIf
			$a += 1
		WEnd
	Next
	Return $aSA
EndFunc   ;==>_CGW
 
Автор
A

Alex1414

Новичок
Сообщения
2
Репутация
0
joiner сказал(а):
как вариант

Код:
Local $adobe = 'Reader\AcroRd32.exe', $chrome = 'chrome.exe'
Local $nA = 'Adobe Acrobat Reader DC - Russian'
Local $nCH = 'Google Chrome'
Local $File = @ScriptDir & '\test.pdf'

Local $aSoftwareInfo = _CGW()

For $str = 0 To UBound($aSoftwareInfo) - 1

	If Not StringCompare($aSoftwareInfo[$str][0], $nA) Then
		Run($aSoftwareInfo[$str][1] & '\' & $adobe & ' ' & $File)
		ExitLoop
	EndIf
;~ 	или для хрома
;~ 	If Not StringCompare($aSoftwareInfo[$str][0], $nCH) Then
;~ 		Run($aSoftwareInfo[$str][1] & '\' & $chrome & ' ' & $File)
;~ 		ExitLoop
;~ 	EndIf
Next

Func _CGW()
	Local $all_key[3]
	$all_key[0] = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
	$all_key[1] = "HKEY_LOCAL_MACHINE64\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
	$all_key[2] = 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall'
	Local $aSA[1][2], $AppKey_all, $n = 0, $X = 1, $rn, $il
	For $i = 0 To 2
		Local $a = 1
		While 1
			$AppKey_all = RegEnumKey($all_key[$i], $a)
			If Not $AppKey_all Then ExitLoop
			$rn = StringStripWS(StringReplace(RegRead($all_key[$i] & "\" & $AppKey_all, "DisplayName"), " (remove only)", ""), 3)
			$il = StringStripWS(RegRead($all_key[$i] & "\" & $AppKey_all, "InstallLocation"), 3)
			If $rn <> '' And $il <> '' Then
				ReDim $aSA[$X][2]
				$aSA[$n][0] = $rn
				If StringRight($il, 1) = '\' Then $il = StringTrimRight($il, 1)
				$aSA[$n][1] = StringReplace($il, '"', '')
				$n += 1
				$X += 1
			EndIf
			$a += 1
		WEnd
	Next
	Return $aSA
EndFunc   ;==>_CGW


Спасибо. А вы не могли бы подсказать как этим пользоваться? - как совместить мой скрипт на открытие с ваши кодом ?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
лучше в стол заказов.
подробно объяснить задачу
 
Верх