Ouvrir un fichier quelconque

Résolu
cs_jacques-antoine Messages postés 79 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 22 mai 2017 - 26 oct. 2013 à 17:04
cs_jacques-antoine Messages postés 79 Date d'inscription mardi 7 octobre 2003 Statut Membre 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

16 réponses

Lyc@n Messages postés 219 Date d'inscription dimanche 24 octobre 2010 Statut Membre Dernière intervention 22 février 2014
26 oct. 2013 à 17:21
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")

0
cs_jacques-antoine Messages postés 79 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 22 mai 2017
26 oct. 2013 à 17:33
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
0
Lyc@n Messages postés 219 Date d'inscription dimanche 24 octobre 2010 Statut Membre Dernière intervention 22 février 2014
26 oct. 2013 à 17:36
Alors tente ça:
Process.Start("le chemin du fichier ici")

0
cs_jacques-antoine Messages postés 79 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 22 mai 2017
26 oct. 2013 à 18:49
Non, ça ne marche pas mieux...

Merci de ta patience!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 oct. 2013 à 18:56
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 ?
0
cs_jacques-antoine Messages postés 79 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 22 mai 2017
26 oct. 2013 à 19:00
Erreur 424, un objet test requis...
0
cs_jacques-antoine Messages postés 79 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 22 mai 2017
26 oct. 2013 à 19:01
un objet est requis
0
cs_jacques-antoine Messages postés 79 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 22 mai 2017
26 oct. 2013 à 19:04
j'oubliais : VB6
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 oct. 2013 à 19:10
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 26/10/2013 à 19:15
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
0
cs_jacques-antoine Messages postés 79 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 22 mai 2017
27 oct. 2013 à 05:59
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?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 oct. 2013 à 08:02
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 27/10/2013 à 08:15
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.
0
cs_jacques-antoine Messages postés 79 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 22 mai 2017
27 oct. 2013 à 08:21
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!
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 27/10/2013 à 19:29
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).
0
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 27/10/2013 à 20:34
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 !!!!
0
cs_jacques-antoine Messages postés 79 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 22 mai 2017
27 oct. 2013 à 19:40
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...

0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 27/10/2013 à 21:05
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.
0
cs_jacques-antoine Messages postés 79 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 22 mai 2017
28 oct. 2013 à 08:20
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 28/10/2013 à 08:36
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 !
0
cs_jacques-antoine Messages postés 79 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 22 mai 2017
28 oct. 2013 à 08:44
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
0
Rejoignez-nous