Ouvrir un fichier quelconque [Résolu]

cs_jacques-antoine
Messages postés
79
Date d'inscription
mardi 7 octobre 2003
Dernière intervention
22 mai 2017
- 26 oct. 2013 à 17:04 - Dernière réponse : cs_jacques-antoine
Messages postés
79
Date d'inscription
mardi 7 octobre 2003
Dernière intervention
22 mai 2017
- 28 oct. 2013 à 08:44
Bonjour,

je me fais une petite appli d'archivage de données numérisées, en VB6 : photos, textes, documents, etc... J'obtiens donc une liste des documents archivés mais je ne vois pas comment provoquer leur affichage (style ouvrir avec). Est-ce qu'il existe une source qui traite cet aspect des choses?

Merci
Afficher la suite 

Votre réponse

22 réponses

Lyc@n
Messages postés
219
Date d'inscription
dimanche 24 octobre 2010
Dernière intervention
22 février 2014
- 26 oct. 2013 à 17:21
0
Merci
Ta question n'est pas très détaillé, tu veut ouvrir les fichiers dans ton programme ou avec le programme assigné par défaut à l'extention du fichier (je veux dire: Tu ouvre un .doc, ça l'ouvre avec LibreOffice...)? Si tu veut ouvrir le fichier avec son programme par défaut, tu peut essayer ça:
Shell("Chemin/vers/ton/fichier.extention")

Commenter la réponse de Lyc@n
cs_jacques-antoine
Messages postés
79
Date d'inscription
mardi 7 octobre 2003
Dernière intervention
22 mai 2017
- 26 oct. 2013 à 17:33
0
Merci
oui, c'est exactement ça : mes fichiers sont d'un type quelconque et je voudrais obtenir, de la part de mon appli, un comportement similaire à l'explorateur de fichiers Windows, c'est-à-dire une ouverture sur double clic.

L'astuce suggérée ne fonctionne pas
Commenter la réponse de cs_jacques-antoine
Lyc@n
Messages postés
219
Date d'inscription
dimanche 24 octobre 2010
Dernière intervention
22 février 2014
- 26 oct. 2013 à 17:36
0
Merci
Alors tente ça:
Process.Start("le chemin du fichier ici")

Commenter la réponse de Lyc@n
cs_jacques-antoine
Messages postés
79
Date d'inscription
mardi 7 octobre 2003
Dernière intervention
22 mai 2017
- 26 oct. 2013 à 18:49
0
Merci
Non, ça ne marche pas mieux...

Merci de ta patience!
Commenter la réponse de cs_jacques-antoine
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 26 oct. 2013 à 18:56
0
Merci
Bonjour,
"Non, ça ne marche pas mieux..."
ne nous dit rien ! Message d'erreur ? Lequel ?
Tu devrais en avoir un "joli", pourtant, si le code VB.Net (la présente section) que t'a donné Lyc@n a été appliqué à ... VB6 !
Tu développes sous quoi, exactement ? VB.Net ou VB6 ?
Commenter la réponse de ucfoutu
cs_jacques-antoine
Messages postés
79
Date d'inscription
mardi 7 octobre 2003
Dernière intervention
22 mai 2017
- 26 oct. 2013 à 19:00
0
Merci
Erreur 424, un objet test requis...
Commenter la réponse de cs_jacques-antoine
cs_jacques-antoine
Messages postés
79
Date d'inscription
mardi 7 octobre 2003
Dernière intervention
22 mai 2017
- 26 oct. 2013 à 19:01
0
Merci
un objet est requis
Commenter la réponse de cs_jacques-antoine
cs_jacques-antoine
Messages postés
79
Date d'inscription
mardi 7 octobre 2003
Dernière intervention
22 mai 2017
- 26 oct. 2013 à 19:04
0
Merci
j'oubliais : VB6
Commenter la réponse de cs_jacques-antoine
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 26 oct. 2013 à 19:10
0
Merci
Je déplace donc cette discussion.
Prends-en bonne note pour tes prochaines questions VB6. C'est IMPORTANT (tu le vois bien) car code totalement différent.
Commenter la réponse de ucfoutu
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- Modifié par ucfoutu le 26/10/2013 à 19:15
0
Merci
Bon ...
pour ouvrir tout type de fichier comme tu l'as dit : sous VB6 : utilisation de la fonction ShellExecute de l'Api de Windows.
Seule manière d'ouvrir un fichier avec son exécutable. Et a condition toutefois que cet exécutable ait été associé à l'extension (et çà, c'est depuis Windows, qu'on le fait, si pas déjà fait).

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Commenter la réponse de ucfoutu
cs_jacques-antoine
Messages postés
79
Date d'inscription
mardi 7 octobre 2003
Dernière intervention
22 mai 2017
- 27 oct. 2013 à 05:59
0
Merci
Ok ucfoutu, le problème de l'erreur d'aiguillage vient de ce qu'on ne peut pas différencier VB6 de VBNet... et que j'ai eu le tort de ne pas préciser le domaine sur lequel portait la question. Meaculpa, donc.

Bon, j'ai utilisé ShellExecute, le processus voulu (notepad et wordpad pour les tests effectués) se lance bien (vérifié via le gestionnaire des tâches), mais aucune fenêtre ne s'affiche... Voilà ma commande :

1 - la déclaration

Public Declare 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

2 - l'utilisation

Tab_rep(Rang_cat) est le chemin absolu
Liste_documents.Text est le nom du fichier à ouvrir

fichier = Tab_rep(Rang_cat) & "\" & Liste_documents.Text

retour = ShellExecute(Form_archivage.hwnd, "open", fichier , _
vbNullString, vbNullString, SW_SHOWNORMAL)
MsgBox ("Retour = " & retour)

et le code de retour est 42, donc sans erreur : il doit manquer quelque chose, mais quoi?
Commenter la réponse de cs_jacques-antoine
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 27 oct. 2013 à 08:02
0
Merci
je viens (ce n'était pas utile, mais bon ...) de faire chez moi ce test :

 Private Declare 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
Const SW_SHOWNORMAL = 1
Private Sub Form_Load()
ShellExecute Me.hwnd, vbNullString, "D:\toto.txt", vbNullString, "D:\", SW_SHOWNORMAL
End Sub

et mon fichier toto.txt a été ouvert.
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 27 oct. 2013 à 08:09
Je jurerais que tu n'as donné aucune valeur à la constante SW_SHOWNORMAL, que tu utilises pourtant ===>> et comme elle n'est pas initialisée, ma foi ===>> = 0 (et donc fenêtre non visible, hein ...)
Je jurerais également que tu n'utilises pas Option Explicit en haut de ton code. Si tu l'avais fait, VB6 aurait dénoncé cette absence.
Commenter la réponse de ucfoutu
cs_jacques-antoine
Messages postés
79
Date d'inscription
mardi 7 octobre 2003
Dernière intervention
22 mai 2017
- 27 oct. 2013 à 08:21
0
Merci
Gagné!!!! Je voyais bien qu'il manquait quelque chose, mais je ne voyais pas quoi, surtout que je voyais l'argument SW_SHOWNORMAL comme une constante VB, donc initialisée... Je l'ai donc déclarée en tant que telle et initialisée = 1 et toc, j'ai ce que je cherchais.

Merci infiniment. C'est réconfortant d'avoir affaire à des gens calés... et qui ne commencent pas par penser avoir en face des crétins, en prenant le temps de répondre gentiment, même un dimanche!
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 27 oct. 2013 à 19:13
Les fonctions de l'Api de Windows utilisent des valeurs.
Ces valeurs, pour des raisons pratiques et de visibilité, sont préférablement celles de constantes déclarées avec des noms plus "parlants".
Ces constantes ne sont pas des constantes VB et ne sont là que pour (comme dit) des raisons de meilleure lisibilité. Elles définissent des valeurs attendues et comprises par la fonction au sein de la librairie qui les abrite (une dll de l'Api de Windows).

PS : pour que tu comprennes mieux :
voilà les autres constantes/affichage de ShellExecute :
SW_HIDE = 0
SW_NORMAL = 1
SW_SHOWMINIMIZED = 2
SW_SHOWMAXIMIZED = 3
SW_SHOWNOACTIVATE = 4
SW_SHOW = 5
SW_MINIMIZE = 6
SW_SHOWMINNOACTIVE = 7
SW_SHOWNA = 8
SW_RESTORE = 9
SW_SHOWDEFAULT = 10
SW_SHOWNORMAL = 1
en n'initialisant pas SW_SHOWNORMAL, cette constante valait 0 (la valeur de SW_HIDE ===>> fenêtre cachée).
On peut utiliser le FSO c'est plus rapide et plus facile que les apis de windows:

Qu'est-ce que le FileSystemObject (FSO) et comment l'employer ?
http://faq.vb.free.fr/index.php?question=31



File System Object(FSO) Complete Ref.
http://www.xtremevbtalk.com/showthread.php?t=38162

traduction approximative fr par google:
http://translate.google.fr/translate?sl=en&tl=fr&prev=_t&hl=fr&ie=UTF-8&u=http://www.xtremevbtalk.com/showthread.php%3Ft%3D38162&act=url


Using the FSO (File System Object) in VB6
http://www.vb6.us/tutorials/using-fso-file-system-object-vb6

traduction approximative fr par google:
http://translate.google.fr/translate?sl=en&tl=fr&prev=_t&hl=fr&ie=UTF-8&u=http://www.vb6.us/tutorials/using-fso-file-system-object-vb6&act=url
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 27 oct. 2013 à 20:33
Allons donc, Ro20,
Je préfère ne pas commenter le reste.... Es-tu seulement certain d'avoir compris la demande ? Je ne crois pas ... !
Je vais de toutes manières m'arrêter à ceci :
FSO, dis-tu ? Ah bon ! Une appli l'utilisant ne marcherait pas sur les machines des plus prudents (dont TOUTES les miennes) ... Et pour cause : ils y auront inhibé purement et simplement VBS !!!!
Commenter la réponse de cs_jacques-antoine
cs_jacques-antoine
Messages postés
79
Date d'inscription
mardi 7 octobre 2003
Dernière intervention
22 mai 2017
- 27 oct. 2013 à 19:40
0
Merci
Merci encore, ufoutu. Question réglée et merci également pour les explications finales, bien que la logique soit un brin tordue et en contradiction flagrantes avec les principes VB6. En tous cas, c'est noté pour la prochaine fois, car il y en aura une...

ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 27 oct. 2013 à 20:36
Il faut que tu comprennes, cs_jacques-antoine, que lorsque tu utilises les fonctions de l'Api de Windows, ce n'est plus du VB6 (VB6 "passe la main"). Seule la manière de "passer la main " (les déclarations, entre autres) est du VB6. Le reste ne l'est plus.
Commenter la réponse de cs_jacques-antoine
cs_jacques-antoine
Messages postés
79
Date d'inscription
mardi 7 octobre 2003
Dernière intervention
22 mai 2017
- 28 oct. 2013 à 08:20
0
Merci
Pigé, ucfoutu... J'ai seulement tendance à être obnubilé par mon environnement (et les sujets qui m'occupent) et je perds souvent de vue celui dans lequel VB6 s'exécute. Mais bon, il n'y a pas d'âge pour apprendre ni pour changer sa façon de raisonner.

Quant à savoir si FSO ou pas FSO, c'est un débat qui me passe largement au-dessus de la tête : dans la mesure où VB6 rempli simplement les fonctions que je lui demande, je ne cherche pas plus loin. Pour ce qui concerne la rapidité d'exécution, avec les machines d'aujourd'hui (la mienne est cadencée à 3 MHz et des poussières), ce n'est pas un paramètre important pour moi, puisque je programme pour ma satisfaction personnelle et non pour gagner ma vie : je suis à la retraite et ça me permet de maintenir ma cervelle en état de marche. Encore que ce que je ponds peut très bien servir à des actifs, pour eux-mêmes ou dans leurs vies professionnelles. À eux de voir s'il faut accélérer l'exécution ou non : ils disposent des sources et de la liberté totale d'en faire ce qu'ils veulent.
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 28 oct. 2013 à 08:26
Ta démarche me plait.
Ne t'arrête surtout pas.
Tu gagneras par ailleurs beaucoup à en aider d'autres sur ce forum (c'est souvent la meilleure manière de s'entretenir soi-même, voire de découvrir).
Amitiés.

PS : et ne t'inquiète pas en ce qui concerne FSO. : Ro20 n'a tout simplement même pas compris l'objet de ta demande (que FSO, même si non inhibé) ne saurait résoudre !
Commenter la réponse de cs_jacques-antoine
cs_jacques-antoine
Messages postés
79
Date d'inscription
mardi 7 octobre 2003
Dernière intervention
22 mai 2017
- 28 oct. 2013 à 08:44
0
Merci
C'est ce que je fais, ucfoutu : ce que je mets à disposition est abondamment commenté (c'est un principe utile d'abord pour moi-même, quand je reviens dessus) et la programmation claire (en principe...), aérée et modulaire (pas toujours facile). Surtout, j'évite d'utiliser des usines à gaz quand les choses peuvent être faites plus simplement, ce que je fais ressemblant souvent à une usine à gaz... Ce n'est qu'une apparence, le principe étant que tous les cas sont envisagés et donc traités. Une manière de faire qui me permet de revenir dessus 10 ans après. J'ai eu à dépanner un gars (un enseignant) qui mettait la totalité de ses boucles et tests sur une seule ligne, quel que soit le nombre d'instructions du paquet ! Je n'ai pas réussi à le faire changer de façon de procéder (je crains pour ses élèves!)...

Amicalement
Commenter la réponse de cs_jacques-antoine

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.