PNG opent in Paint maar moet in windows photo viewer openen

Status
Niet open voor verdere reacties.

Butskever

Gebruiker
Lid geworden
13 mrt 2014
Berichten
28
Op een formulier heb ik een link staan naar een foto.
Ik heb middels Visual Basic een code geplaatst dat als ik dubbelklik op de hyperlink de foto opent in een viewer.
Een JPG bestand opent in Windows Photo Viewer, maar een PNG bestand opent in Paint. Ik wil graag dat bij alle gebruikers van de database altijd de foto in de viewer geopend wordt. Hoe kan ik dat doen?

Code:
Code:
Private Sub txtPicture1_DblClick(Cancel As Integer)
Dim strPath As String
    
    strPath = CurrentProject.Path & "\Afbeeldingen\"
    Application.FollowHyperlink strPath & Me.txtPicture1
End Sub
 
Laatst bewerkt:
PNG bestand (extensie .png) koppelen aan Windows Photo Viewer. > Instellingen > Apps > Standaard-apps per bestandstype kiezen.
 
Laatst bewerkt:
Dat snap ik Senso, maar ik bedoel juist dat bij alle gebruikers van de database automatisch de foto's in de windows foto viewer app geopend wordt, zonder dat ik ze hoef te instrueren dat ze de extensie PNG moeten koppelen aan de viewer.
Is dat op te lossen door een stukje code toe te voegen?
 
Dat weet ik niet. Volgens mij ben ik onlangs ook op die manier aan de slag geweest en kon het niet voor elkaar krijgen. Toen ging het over url's in de gewenste browser openen. We wachten af.
 
@Butskever
Probeer dit eens

In een module

Code:
Option Compare Database
Option Explicit
Declare PtrSafe Function shellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

In een formulier

Code:
Private Sub Knop17_Click()
Dim filepath As String
filepath = "C:\Users\Pletter\Pictures\Camera Roll\20201118_104531.png"
Call shellExecute(0, "open", filepath, "", "", 1)
End Sub


Groetjes,
 
Laatst bewerkt:
Ik heb het nu zo:
Code:
Option Compare Database
Option Explicit
Declare PtrSafe Function shellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

en:
Code:
Private Sub txtPicture1_DblClick(Cancel As Integer)
Dim strPath As String
    
    strPath = CurrentProject.Path & "\Afbeeldingen\"
    Application.FollowHyperlink strPath & Me.txtPicture1
    Call shellExecute(0, "open", strPath, "", "", 1)
End Sub

Maar dan krijg ik de volgende foutmelding:
"Constanten, reeksen met een vaste lengte, matrices, door een gebruiker gedefinieerde typen en Declare instructies zijn niet toegestaan als openbare leden van objectmodules"
 
Je moet de regel
Code:
Declare PtrSafe Function shellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, _
     ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

In een aparte module zetten, anders doet-ie het niet. Dus niet op het formulier. Eventueel zo:

Public Declare PtrSafe Function shellExecute Lib ....
 
Overigens kan ik je probleem niet reproduceren; zelf gebruik ik Faststone Viewer (waarom zou je Windows Photo Viewer gebruiken? Waardeloos programma :)) wat bij mij dus prima opent.
En als ik switch tussen verschillende grafische programma's, (niet vergeten om het vinkje te activeren) dan kun je 'live' de verschillende programma's ook gewoon uitproberen.

Open Met....png
 
@accessguru Kun je het probleem ook niet reproduceren als je standaard in Windows instelt dat PNG bestanden geopend moeten worden met Paint of een ander programma?
Ik heb een aparte module gemaakt "Module1" waarin ik heb staan:
Code:
Option Compare Database
Option Explicit
Public Declare PtrSafe Function shellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Maar het werkt nog niet.

En de reden dat wij (ons bedrijf) de standaard windows viewer hanteren is om uniformiteit en geen wildgroei van apps te krijgen. Maar ik ben het helemaal met je eens dat ik liever een andere viewer gebruik :confused:
Als ik in windows invul dat de standaard app voor PNG paint is dan opent ook paint ondanks deze code toevoegingen. Moet ik de modulenaam veranderen in shellExecute? Dat hoeft toch niet, of wel?
 
Ik snap dat een bedrijf uniformiteit nastreeft, maar je kunt dat als bedrijf ook overdrijven door téveel dicht te timmeren. Ik heb net een testje gedaan met wat andere programma's zoals Paint en Paint3D, Photoshop, Lightroom.... ze werken allemaal prima. Ik hoef eigenlijk niks te doen vanuit het formulier, dat blijft gewoon open staan.
Ook dus met Paint, Paint3D, Photoshop, Lightroom... Alle programma's doen het. Ik hoef op het formulier ook niets te doen, dat blijft gewoon open staan. Zodra ik een andere verbinding heb gelegd in <Openen met...> werkt het al.

Ik vermoed dat het bedrijf de rechten op de Registry zodanig heeft dichtgetimmerd dat je daar zelf geen aanpassingen in kan maken als gebruiker. Dat is bij mij op het werk dus ook zo. En uiteindelijk worden dit soort instellingen natuurlijk allemaal opgeslagen in de Registry. Ik durf te wedden dat als je dit op je eigen computer thuis doet, het wél werkt. Met dezelfde database :).
 
Maar het werkt nog niet.
Dat is wel een beetje vage omschrijving... Kun je daar wat duidelijker over zijn? Krijg je een foutmelding? Gebeurt er helemaal niets? Wat gebeurt er als je in de functie txtPicture1_DblClick in de stapmodus door de code loopt?
 
Ook dus met Paint, Paint3D, Photoshop, Lightroom... Alle programma's doen het. Ik hoef op het formulier ook niets te doen, dat blijft gewoon open staan. Zodra ik een andere verbinding heb gelegd in <Openen met...> werkt het al.

Bedoel je hier dat vanuit het formulier alle programma's correct geopend worden? Want wat ik bedoel is dat dat juist niet wenselijk is. De afbeelding zou met een standaard viewer geopend moeten worden.

Dat is wel een beetje vage omschrijving... Kun je daar wat duidelijker over zijn? Krijg je een foutmelding? Gebeurt er helemaal niets? Wat gebeurt er als je in de functie txtPicture1_DblClick in de stapmodus door de code loopt?

Wat ik bedoel is dat als je vanuit het formulier dubbelklikt op de bestandsnaam (en pad) dat dan de afbeelding in de door windows als standaard bepaalde viewer wordt geopend en niet zoals ik zou willen altijd in de Windows Viewer.
 
Wat er nu gebeurd is overigens dat bij dubbelklikken op de naam in het formulier de foto opent in de prefered viewer (de viewer die je zelf als standaard viewer hebt aangewezen) en dat de Windows verkenner ook nog geopend wordt
 
Laatst bewerkt:
@Butskever

deze regel staat die nog in je code?

Application.FollowHyperlink strPath & Me.txtPicture1


Groetjes
 
@Butskever

Dat zal het probleem zijn, hij volgt namelijk die hyperlink.

Weg halen en het gehele pad in een strPath zetten.


Groetjes,
 
Ik heb een aparte module gemaakt "Module1" waarin ik heb staan:
Code:
Option Compare Database
Option Explicit
Public Declare PtrSafe Function shellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Maar het werkt nog niet.

Je code werkt prima, de shellExecute-functie opent bestanden namelijk in het programma waar het bestandstype in Windows mee is geassocieerd. Dus, als PNG-bestanden zijn geassocieerd met Paint worden ze middels de shellExecute-functie met Paint geopend. Heb je PNG-bestanden geassocieerd met Photoshop worden ze in Photoshop geopend.

Wil je in je programmacode een specifieke applicatie starten om daarmee je bestand te openen moet je volgens mij de Shell-functie gebruiken.
 
Laatst bewerkt:
Bedoel je hier dat vanuit het formulier alle programma's correct geopend worden? Want wat ik bedoel is dat dat juist niet wenselijk is. De afbeelding zou met een standaard viewer geopend moeten worden.
Lees je wel goed? Ik heb net in een aantal berichten uitgelegd dat ik de standaard viewer aanpas en dat Access dan keurig netjes de foto opent in de op dat moment actieve standaardviewer. En dat kan er natuurlijk logischerwijze maar één zijn. Maar die kan je dus probleemloos veranderen, en dan blijft het gewoon werken. Je geeft zélf aan dat het juist de bedoeling is dat dat foto's met de standaard viewer worden geopend.

Als je overigens mijn tip had opgevolgd, en de Stapmodus had uitgevoerd om de code te testen, dan had pletter zijn vraag niet hoeven te stellen, want dan was je probleem al gelijk naar boven gekomen. Overigens had dat vermoedelijk ook niks opgelost, omdat de ShellExecute functie precies hetzelfde doet: de ingestelde default viewer gebruiken. En ik denk dus, dat jij die helemaal niet mag veranderen door de bedrijfspolicies. Ik zou dan ook eerder naar de Shell optie kijken.
 
Misschien leg ik het wat omslachtig of dubbelzinnig uit of gebruik ik de verkeerde woordkeus. Maar ik wil juist dat ongeacht het programma die gebruikers persoonlijk als standaard ingesteld hebben (of dat nu Paint, Photoshop, of welke viewer dan ook is) dat er altijd de Windows Photo Viewer geopend wordt door de accessdatabase. En dus niet dat iedere gebruiker zijn standaard programma per extensie moeten veranderen.

Ik persoonlijk heb de standaard viewer voor diverse extensies al aangepast naar de Windows Photo Viewer. Dus voor mij persoonlijk is het probleem opgelost.

ik denk inderdaad dat de shell functie de oplossing kan bieden. Maar wij werken middels een virtual desktop op een remote server. Dus ik weet zo niet hoe ik kan aanwijzen waar de toepassing Windows Photo Viewer staat. Dus kan nu even niet verder. Maar hier kom ik zelf wel uit.

Wat betreft de uitvoering van de stapmodus: die heb ik uitgevoerd en ik kreeg geen foutmelding.

Bedankt voor jullie hulp
 
@Butskever

En wat doen de gebruikers met die foto's ?

Moeten zij die aanpassen of alleen inkijken?


Groetjes,
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan