NYghost
Messages postés26Date d'inscriptionmardi 31 octobre 2000StatutMembreDernière intervention23 janvier 2009
-
17 janv. 2009 à 18:50
NYghost
Messages postés26Date d'inscriptionmardi 31 octobre 2000StatutMembreDernière intervention23 janvier 2009
-
23 janv. 2009 à 08:44
Bonjour à tous,
Voila mon projet histoire de me simplifier un peu la vie.
But: imprimer toute une série de fichier présent dans un répertoire
Problème: il s'agit d'un vieux soft qui ne permet pas le "select all > click droit > print" :( !
Problème 2: ça fais un bail que j'ai plus programmé..
J'avais donc penser a faire un "soft" qui agirrait comme suit:
1.Lister les fichiers d'un dossier et les compter (registre X)
2.Modifier un des fichiers ini du programme pour que lorsqu'on fait "ouvrir" il arrive directement dans le bon répertoire (accessoirement, stocker l'ancienne valeur afin qu'on puisse la remettre après)
3.Ouvrir le soft en question
4.Placer le nom du 1er fichier dans le clipboard
5.Simuler un "Ctrl+L" (ouvrir)
6.Simuler un "Ctrl+V" (tout le monde sait ce que cela fait ;-))
7.Simuler un "Enter" [Le fichier est ouvert dans le soft]
8.Simuler un "Ctrl+P" (print)
9.Simuler un "Enter"
10.Décrémenter le registre X et placer le nom du 2éme fichier dans le clipboard
11.Repartir a l'étape 5 jusqu'a ce que X=0
12.Si x=0, restaurer la valeur du fichier ini à celle d'origine
Que pensez vous de mon "organigrame" ? Avez vous des sources qui pourraient m'aider ?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 17 janv. 2009 à 20:08
Salut
Oui, manque peut-être la refermeture de ton logiciel après impression, non ?
sinon les instances vont s'accumuler.
Alors encore quelques SendKeys (pour l'envoi de touches) de plus.
Faudra aussi prévoir une petite boucle/tempo entre l'ordre d'impression et la fermeture du soft.
Pour ton histoire de fichier INI, j'ai pas tout compris.
Tu peux éviter ça en incluant le répertoire au nom du fichier, je pense.
Pour réaliser tout ça, il te suffit de taper les mots clés associés à chacune des tâches dans la case Rechercher parmi les Codes en .Net seulement, pour découvrir comment faire.
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
NYghost
Messages postés26Date d'inscriptionmardi 31 octobre 2000StatutMembreDernière intervention23 janvier 2009 17 janv. 2009 à 21:02
Déjà merci pour ta réponse rapide jack.
Oui en effet, j'avais oublié la fermenter a la fin, ça peut être bien pratique.
Un simple timer fera l'affaire tu penses pour la durée d'impression?
En gros pour le INI, dans le repertoire du programme, il y a un fichier ini (config.ini si je me souviens bien, peu importe en faite), dont une ligne est le repertoire qu'ouvre le programme par défaut lors d'un "open" ou d'un "save". Je sais pas si c'est très clair comme explication :-) !
Mais si j'en suis tes conseils, en rentrant, par exemple, c:\dossier\fichier.xxx dans le champ "ouvrir", j'aurai le fichier en question qui s'ouvrira, c'est bien ça?
Derniere chose, je n'ai qu'une licence pour VB6, donc pas de .net, gros problème(s) en perspectives ?!
NYghost
Messages postés26Date d'inscriptionmardi 31 octobre 2000StatutMembreDernière intervention23 janvier 2009 17 janv. 2009 à 23:16
Re-bonjour..
Je glande pas, j'ai déjà fait beaucoup de recherche, pour l'instant, j'arrive à trouver (et compter) les fichiers d'un dossier dans une filelistbox, l'imprimer automatiquement et fermer le programme après (appelons cela procédure "print").
Par contre je trouve pas comment dire a ce gentil VB: tu prends le 1er fichier de la filelistbox, tu me fais la procédure "print", tu compares la valeur du registe X, si X pas égal à 0, tu prend le 2éme etc etc jusqu'a ce que X=0 ! J'imagine que ça doit être avec un "for i = .." mais je vois pas comment l'integrer ç une filelistbox!
Voici mon code actuel :
--------------------------------------------------------------------------------------------------------------------
Private Declare Function GetTickCount Lib "kernel32" () As Long 'var
Private Sub Form_Load()
Dir1.Path = txt_source.Text
End Sub
Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive
End Sub
Private Sub Dir1_change()
File1.Path = Dir1.Path
lbl_nbr_files.Caption = File1.ListCount
End Sub
Private Sub Pause(TempDePause As Variant)
Dim A As Variant
Dim B As Integer
Dim C As Variant
A = GetTickCount()
Do
B% = DoEvents()
C = GetTickCount()
Loop Until C - A >= TempDePause * 1000
End Sub
Private Sub Cmd_Click()
txt_nbr.Text = File1.ListCount
End Sub
Private Sub cmd_go_Click()
Clipboard.Clear
Clipboard.SetText (txt_root.Text)
txt_root.Text = Dir1.Path & "" & File1.FileName
End Sub
Private Sub File1_DblClick()
txt_root.Text = Dir1.Path & "" & File1.FileName
End Sub
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 18 janv. 2009 à 00:52
Re
Si tu fais du VB6, pourquoi poser ta question dans la catégorie .NET ?
Pour perdre inutilement du temps ?
Bref, catégorie modifiée.
Dans ton code d'attente :
DoEvents tout seul suffit, il n'est pas nécessaire de dimensioner une variable B.
Attention à ne pas utiliser de nom de variable ou de procédure qui puisse ressembler à des termes de programmation. "Pause" est un terme DOS, pas de souci, mais méfie toi, cela peut donner des erreurs difficile à résoudre.
Dans ton code cmd_print, tu fais des SendKeys.
Je te recommande d'utiliser tous les paramètres de cette instruction pour demander au code d'attendre l'exécution avant de continuer - voir l'aide de la fonction
Est-ce que ton logiciel accepte un chemin en plus du nom du fichier : Ca, il n'y a qu'en l'essayant que tu le sauras.
As-tu essayé de fournir le nom du fichier à ouvrir en même temps que l'ordre de lancement de ton logiciel ?
C'est à dire que, au lieu de faire un simple
Shell "C:\CheminExe\monExe", ...
de faire un
Shell "C:\CheminExe\monExe C:\CheminDoc\monDoc.truc", ...
Si cela ouvre le document, cela permet d'éviter les SendKeys
NB : Les parenthèses que tu as mises ne servent à rien.
NB : Si l'extension de tes fichiers à imprimer est associée à ton exécutable, voir l'API nommée "ShellExecute" longuement illustrée dans les Codes et questions forum du site - peut être pratique.
A propos des SendKeys, sache que cette instruction envoie un/des caractères vers la fenêtre qui a actuellement le focus. Alors méfiance : entre 2 SendKeys séparés par une tempo de 1 sec, ne va pas cliquer ailleurs !
Est-ce que ta sub cmd_print fonctionne ?
Ce serait déjà un point important à régler avant de commencer à tout compliquer avec une avalanche de fichiers.
Pour ta boucle, les fichiers étant dans une liste, il est facile de faire une boucle For-Next.
En plus, tu as déjà utilisé dans ton code les termes qui te fourniront les valeurs bornes : File1.ListCount
Seule chose à laquelle il faut faire attention, c'est que les index de ListBox commencent à 0 et pas à 1, donc, en commençant de 0, il faudra aller jusqu'à File1.ListCount - 1
Le code que tu as mis dans cmd_print, mets le dans une autre Sub, par exemple ImprimeUnFichier et tu lui déclares un paramètre (*) qui sera le nom du fichier à utiliser en lieu et place de "txt_root.text".
(*) comme tu l'as fait pour ta Sub Pause, mais cette variable sera de type String
Ensuite, dans cmd_print ainsi vidée, tu mets ta boucle de lecture de ta liste et tu lances des appels à ta Sub ImprimeUnFichier File1.List(tonIndexDeBoucleForNext)
Ne m'en veux pas, mais je n'aime pas donner du code tout fait.
Tu as les indices pour t'aider à chercher les solutions.
Ces solutions sont dans l'aide de VB6 et parmi les milliers de codes ou questions forum du site.
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Vous n’avez pas trouvé la réponse que vous recherchez ?
NYghost
Messages postés26Date d'inscriptionmardi 31 octobre 2000StatutMembreDernière intervention23 janvier 2009 18 janv. 2009 à 11:17
Hello,
Sorry j'ai du me tromper de cat (pas fait attention que j'étais en .net)
J'ai essayer en utilisant la syntaxe
Shell "C:\CheminExe\monExe C:\CheminDoc\monDoc.truc" mais cela ne fonctionne malheureusement pas.
J'ai quand même encore avancé et suivit tes conseils mais la je bloque vraiment au niveau de la déclaration du paramétre pour mon "printfile" ainsi que pour faire la boucle.