VERIFICAR SE SHELLEXECUTE ABRIU O ARQUIVO

XXXANGELSXXX 05/06/2014 13:21:39
#438748
Senhores, boa tarde.. estou com uma duvida um quanto chatinha.. tenho que executar o shellexecute para abrir um arquivo qualquer com seu respectivo sistema padrao para o mesmo. ex ; abrir o arquivo teste.pdf com o shellexecute, até ai tudo ok, utilizo..

dim ret as long
ret = ShellExecute(Screen.ActiveForm.Hwnd, [Ô]Open[Ô],[Ô]c:    este.pdf[Ô][Ô], App.Path, 1)

o problema é... se nao tiver o pdf instalado na maquina, nao vai abrir o registro.. óbvio, entao eu quero testar se tem o arquivo que abre o pdf, se nao tiver passar a mensagem para o cara que nao tem programas associados ao arquivo.. desde ja agradeço a ajuda.
CRACKER 05/06/2014 13:33:44
#438750
Resposta escolhida
Além de se é útil saber ou não, você poderia provável verifique a seguinte chave do Registro:

HKEY_CLASSES_ROOT \ MIME \ Database Type \ Content \ application / pdf

Isto terá uma entrada CLSID , o que aponta para a identificação de classe do aplicativo padrão.

Se a chave do Registro ou o valor CLSID não estiver presente, então o tipo de MIME é desconhecida, ou não há aplicativo padrão para manipular os arquivos application / pdf no tipo MIME


Se no seu caso quiser apenas detetar o Adobe reader pode fazer assim:
Imports Microsoft.Win32
Imports System
Namespace MyApp
Class Program
Private Shared Sub Main(args As String())
Dim adobe As RegistryKey = Registry.LocalMachine.OpenSubKey([Ô]Software[Ô]).OpenSubKey([Ô]Adobe[Ô])
If adobe Is Nothing Then
Dim policies = Registry.LocalMachine.OpenSubKey([Ô]Software[Ô]).OpenSubKey([Ô]Policies[Ô])
If policies Is Nothing Then
Return
End If
adobe = policies.OpenSubKey([Ô]Adobe[Ô])
End If
If adobe IsNot Nothing Then
Dim acroRead As RegistryKey = adobe.OpenSubKey([Ô]Acrobat Reader[Ô])
If acroRead IsNot Nothing Then
Dim acroReadVersions As String() = acroRead.GetSubKeyNames()
Console.WriteLine([Ô]The following version(s) of Acrobat Reader are installed: [Ô])
For Each versionNumber As String In acroReadVersions
Console.WriteLine(versionNumber)
Next
End If
End If
End Sub
End Class
End Namespace

Tópico encerrado , respostas não são mais permitidas