Scanner automatiquement depuis 2 scanners sur 1 ordi (VB.net + WIA)
Scanner automatiquement depuis 2 scanners sur 1 ordi (VB.net + WIA) - VB/VBA/VBS - Programmation
MarshPosté le 29-11-2012 à 05:45:16
Bonjour, Tout d'abord, puis-je vous demander d'etre indulgent vu qu'il s'agit ici de mon tout premier script VB. J'ai une experience (limitee cela dit) avec php et VBA, programmant des macros excel lorsque le besoin se fait sentir.
Pour un projet au travail, j'ai besoin d'un programme qui est capable de scanner [B]automatiquement [/B] ( a intervalles reguliers) a partir de plusieurs scanners connectes sur le meme ordinateur. n'ayant trouve aucune solution logicielle gratuite ou payant capable de faire cela, j'ai decide d'utiliser cela comme excuse pour apprendre un langage de programmation, a savoir VB.
Le programme a l'heure actuelle, consiste en un formulaire dans lequel l'utilisateur entre les differents parametres de scan (resolution, couleur, etc.) ainsi que les dossiers et noms de fichiers.
cliquer sur "start scanning" : - lance une premiere fois la fonction scannerloop (voir ci dessous) - demarre un timer qui appelle scannerlopp a chaque fois qu'il tick
A l'heure actuelle, le programme fonctionne parfaitement si un seul scanner est present.
Si plusieurs scanners son connectes en revanche, le premier scan se deroule sans soucis pour tous les scanners, mais lorsqu'il faut demarrer le second scan, rien ne se passe, les scanners se "bloquent" (si j'essaie d'y acceder j'ai le message : The WIA devide is busy" ) je dois alors le debrancher et le rebrancher.
Ai-je oublie quelque chose comme de "refermer une session" ou de "deconnecter" un scanner a la fin de la boucle ?
'Increment next file index and update in config file
Me.FileIndexBox.Value = Me.CurrFileIndex
SaveCfg()
End Sub
J'ai essaye d'autres choses, comme inclure la boucle qui passe en revue tous les device WIA detectes pour que cela scanne plusieurs fois independamment du reste du programme :
Code :
Dim DeviceManager1 = CreateObject("WIA.DeviceManager" ) 'wia device manager
For k = 1 To 3
Dim j As String = 1
For i = 1 To DeviceManager1.DeviceInfos.Count 'loop through all devices
[...]
Next i
Next k
DeviceManager1 = Nothing
Le premier tour de la boucle fonctionne, chaque scanner scanne une fois. Mais la encore, ca bloque au moment du deuxieme scan. J'ai essaye la meme chose en incluant la declaration du devicemanager et sa reinitialisation dans la boucle cette fois :
Code :
For k = 1 To 3
Dim DeviceManager1 = CreateObject("WIA.DeviceManager" ) 'wia device manager
Dim j As String = 1
For i = 1 To DeviceManager1.DeviceInfos.Count 'loop through all devices
[...]
Next i
DeviceManager1 = Nothing
Next k
Mais ca ne change absolument rien.
J'ai aussi essaye de logguer chaque etape dans un fichier texte pour voir ou cela bloque exactement :
Code :
Dim DeviceManager1 = CreateObject("WIA.DeviceManager" ) 'wia device manager
Dim j As String = 1
For i = 1 To DeviceManager1.DeviceInfos.Count 'loop through all devices
If DeviceManager1.DeviceInfos(i).Type = 1 Then 'Select only scanners, not webcams etc...
29/11/2012 9:25:08 AM | Scanner #1 | Img initialized
29/11/2012 9:25:08 AM | Scanner #1 | properties initialized
Il semble que cela bloque a cette etape:
Code :
Img = Scanner.Items(1).Transfer(fileformat) 'scans the image.
Il semble que WIA est content de passer du scanner #1 au scanner #2 mais refuse de revenir au scanner #1 ensuite. Aussi, chose surprenante, lors du deuxieme tour de la boucle, le scanner #1 est cense scanner a nouveau mais c'est le scanner #2 qui se met a clignoter et bloque. Est-il possible que WIA selectionne le dernier scanner utilise (scanner #2) comme scanner par defaut ? Si oui, est il possible de reinitialiser cela ? Aussi, pourquoi cela ne le fait-il pas pour passer du scanner #1 au scanner #2 ?
Marsh Posté le 29-11-2012 à 05:45:16
Bonjour,
Tout d'abord, puis-je vous demander d'etre indulgent vu qu'il s'agit ici de mon tout premier script VB. J'ai une experience (limitee cela dit) avec php et VBA, programmant des macros excel lorsque le besoin se fait sentir.
Pour un projet au travail, j'ai besoin d'un programme qui est capable de scanner [B]automatiquement [/B] ( a intervalles reguliers) a partir de plusieurs scanners connectes sur le meme ordinateur.
n'ayant trouve aucune solution logicielle gratuite ou payant capable de faire cela, j'ai decide d'utiliser cela comme excuse pour apprendre un langage de programmation, a savoir VB.
Le programme a l'heure actuelle, consiste en un formulaire dans lequel l'utilisateur entre les differents parametres de scan (resolution, couleur, etc.) ainsi que les dossiers et noms de fichiers.
cliquer sur "start scanning" :
- lance une premiere fois la fonction scannerloop (voir ci dessous)
- demarre un timer qui appelle scannerlopp a chaque fois qu'il tick
A l'heure actuelle, le programme fonctionne parfaitement si un seul scanner est present.
Si plusieurs scanners son connectes en revanche, le premier scan se deroule sans soucis pour tous les scanners, mais lorsqu'il faut demarrer le second scan, rien ne se passe, les scanners se "bloquent" (si j'essaie d'y acceder j'ai le message : The WIA devide is busy" )
je dois alors le debrancher et le rebrancher.
Ai-je oublie quelque chose comme de "refermer une session" ou de "deconnecter" un scanner a la fin de la boucle ?
voici la fonction scannerloop :
J'ai essaye d'autres choses, comme inclure la boucle qui passe en revue tous les device WIA detectes pour que cela scanne plusieurs fois independamment du reste du programme :
Le premier tour de la boucle fonctionne, chaque scanner scanne une fois. Mais la encore, ca bloque au moment du deuxieme scan.
J'ai essaye la meme chose en incluant la declaration du devicemanager et sa reinitialisation dans la boucle cette fois :
Mais ca ne change absolument rien.
J'ai aussi essaye de logguer chaque etape dans un fichier texte pour voir ou cela bloque exactement :
Et voici le fichier de log genere :
Il semble que cela bloque a cette etape:
Il semble que WIA est content de passer du scanner #1 au scanner #2 mais refuse de revenir au scanner #1 ensuite.
Aussi, chose surprenante, lors du deuxieme tour de la boucle, le scanner #1 est cense scanner a nouveau mais c'est le scanner #2 qui se met a clignoter et bloque.
Est-il possible que WIA selectionne le dernier scanner utilise (scanner #2) comme scanner par defaut ?
Si oui, est il possible de reinitialiser cela ? Aussi, pourquoi cela ne le fait-il pas pour passer du scanner #1 au scanner #2 ?
Merci d'avance pour votre aide.