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 :
1 2 3 4 5 6 7 8 9
|
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 :
1 2 3 4 5 6 7 8 9
|
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 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| 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...
'startpoint to calculate how long it is to scan
Dim ScanStart = DateAndTime.Second(Now) + (DateAndTime.Minute(Now) * 60) + (DateAndTime.Hour(Now) * 3600)
'Directory + file
Dim targetdir = Me.ProjectFolderBox.Text & "\scans\Scanner" & j & "\S" & j & "_" & Me.FilePrefix.Text & Me.CurrFileIndex & "." & Me.FileExt.SelectedItem
Form2.CurrentActionLabel.Text = "Scanning from scanner #" & j
Dim Scanner As WIA.Device = DeviceManager1.DeviceInfos(i).connect
If IsNothing(Scanner) Then
Log(Me.logfilename, Now & " | Scanner #" & j & " not found")
Else
Try
Dim Img As WIA.ImageFile
'log
Log(Me.logfilename, Now & " | Scanner #" & j & " | Img initialized")
With Scanner.Items(1)
.Properties("6146").Value = colorcode '4 is Black-white,gray is 2, color 1 (Color Intent)
.Properties("6147").Value = dpi 'dots per inch/horizontal
.Properties("6148").Value = dpi 'dots per inch/vertical
.Properties("6149").Value = 0 'x point where to start scan
.Properties("6150").Value = 0 'y-point where to start scan
'Following is A4 paper size. (Not 100% accurate because real A4 Ht errors)
.Properties("6151").Value = horizextent 'horizontal exent DPI x inches wide
.Properties("6152").Value = vertextent 'vertical extent DPI x inches tall
' .Properties("4104").Value = 8 'bits per pixel
End With
'log
Log(Me.logfilename, Now & " | Scanner #" & j & " | properties initialized")
'transfer image
Img = Scanner.Items(1).Transfer(fileformat) 'scans the image.
'log
Log(Me.logfilename, Now & " | Scanner #" & j & " |Transfer done")
'kill previous file if exists to avoid errors
If System.IO.File.Exists(targetdir) = True Then
Kill(targetdir)
'log
Log(Me.logfilename, Now & " | Scanner #" & j & " | deleted existing " & targetdir)
End If
Img.SaveFile(targetdir)
'log
Log(Me.logfilename, Now & " | Scanner #" & j & " | saved " & targetdir)
'last scan
Form2.LastFileLabel.Text = "\Scanner" & j & "\S" & j & "_" & Me.FilePrefix.Text & Me.CurrFileIndex & "." & Me.FileExt.SelectedItem
Form2.LastScanLabel.Text = Now
Catch ex As Exception
MsgBox(ex.Message)
Finally
Scanner = Nothing
End Try
End If
'End time for the scan
Dim ScanEnd = DateAndTime.Second(Now) + (DateAndTime.Minute(Now) * 60) + (DateAndTime.Hour(Now) * 3600)
'log
Log(Me.logfilename, Now & " | Scanner #" & j & " | Scanned " & targetdir & " | duration: " & (ScanEnd - ScanStart))
j = j + 1
End If
Next i |
Et voici le fichier de log genere :
1 2 3 4 5 6 7 8 9 10 11 12 13
| Scan starts 29/11/2012 9:24:31 AM | Interval :Start scanning with 5 min | Res:100 DPI |
29/11/2012 9:24:31 AM | Scanner #1 | Img initialized
29/11/2012 9:24:31 AM | Scanner #1 | properties initialized
29/11/2012 9:24:49 AM | Scanner #1 |Transfer done
29/11/2012 9:24:49 AM | Scanner #1 | saved C:\__2\scans\Scanner1\S1_img_1.TIF
29/11/2012 9:24:49 AM | Scanner #1 | Scanned C:\__2\scans\Scanner1\S1_img_1.TIF | duration: 18
29/11/2012 9:24:49 AM | Scanner #2 | Img initialized
29/11/2012 9:24:49 AM | Scanner #2 | properties initialized
29/11/2012 9:25:08 AM | Scanner #2 |Transfer done
29/11/2012 9:25:08 AM | Scanner #2 | saved C:\__2\scans\Scanner2\S2_img_1.TIF
29/11/2012 9:25:08 AM | Scanner #2 | Scanned C:\__2\scans\Scanner2\S2_img_1.TIF | duration: 19
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:
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 ?
Merci d'avance pour votre aide.
Partager