Automatiser la fonctionnalité de numérisation Windows

3

J'ai un scanner Canon un peu plus ancien, le Pixma MP 110. Bien entendu, Canon ne fournit aucun pilote utile (leur site est vraiment désespéré, frustrant et inutile à tous égards) - le seul logiciel que j'ai trouvé est une version chinoise avec des points d'interrogation partout.

Toutefois, si je clique sur le scanner dans Gestionnaire des imprimantes et des périphériques sous Windows, je peux utiliser un gestionnaire de numérisation intégré à Windows qui est dans ma langue maternelle. Il a des fonctionnalités quelque peu limitées mais est toujours mieux qu'un tas de boutons pleins de points d'interrogation.

J'ai un peu cherché et découvert que la fonctionnalité dont je parle s'appelle WIA .

Voici l'approche, cependant en tchèque, qui peut vous sembler comme ces points d'interrogation me paraissent. entrez la description de l'image ici

Après avoir choisi Lancer l'analyse, une boîte de dialogue apparaît. Il explorer.exen'y a pas de changement pour savoir de quel programme il s'agit. entrez la description de l'image ici

Ce que je veux, c'est créer un raccourci sur le bureau qui lancerait automatiquement l'analyse sans que je ne clique sur " Démarrer l'analyse " et " Analyser ".

En outre, le scanner a un bouton pour lancer la numérisation et mon ordinateur reconnaît quand il est enfoncé. Lorsque j'appuie sur cette touche, Windows me demande quelle application doit exécuter pour le bouton. Cependant, aucun logiciel de numérisation ne fonctionnait ici et aucun n'apparaissait dans la sélection que Windows me donnait. Je me demandais si je pouvais pirater ceci pour exécuter n'importe quelle application pour ce bouton . (Ce serait utile si je obtenais jamais réponse à la question principale).

entrez la description de l'image ici

Donc, les questions une fois de plus, si vous étiez trop paresseux pour lire ce long post:

  1. Comment faire en sorte que Windows lance automatiquement la numérisation à partir d'un scanner installé à l'aide d'un script de traitement par lots ou d'une simple commande dans un .lnkfichier?
  2. (facultatif) Comment puis-je attribuer une application à la touche de mon scanner?
Tomáš Zato
la source

Réponses:

1

Solution PowerShell

Le script devrait fonctionner avec la plupart des scanners, qu'il s'agisse de Canon, d'Epson ou de tout autre logiciel, à condition qu'ils soient compatibles WIA et prennent en charge la transfer()commande. Le script commencera à numériser immédiatement. Toutes les options telles que le nom de fichier, le chemin d'accès ou le format d'image sont déjà définies via un script. Il vous suffit de démarrer le processus de numérisation avec un raccourci

  1. Enregistrez-le comme par exemple D:\StartScan.ps1
  2. Créez un nouveau raccourci et pointez-le sur

    %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -File "D:\StartScan.ps1"
    

StartScan.ps1

# Create object to access the scanner
$deviceManager = new-object -ComObject WIA.DeviceManager
$device = $deviceManager.DeviceInfos.Item(1).Connect()

# Create object to access the scanned image later
$imageProcess = new-object -ComObject WIA.ImageProcess

# Store file format GUID strings
$wiaFormatBMP  = "{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}"
$wiaFormatPNG  = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}"
$wiaFormatGIF  = "{B96B3CB0-0728-11D3-9D7B-0000F81EF32E}"
$wiaFormatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"
$wiaFormatTIFF = "{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}"

# Scan the image from scanner as BMP
foreach ($item in $device.Items) {
    $image = $item.Transfer() 
}

# set type to JPEG and quality/compression level
$imageProcess.Filters.Add($imageProcess.FilterInfos.Item("Convert").FilterID)
$imageProcess.Filters.Item(1).Properties.Item("FormatID").Value = $wiaFormatJPEG
$imageProcess.Filters.Item(1).Properties.Item("Quality").Value = 5
$image = $imageProcess.Apply($image)

# Build filepath from desktop path and filename 'Scan 0'
$filename = "$([Environment]::GetFolderPath("Desktop"))\Scan {0}.jpg"

# If a file named 'Scan 0' already exists, increment the index as long as needed
$index = 0
while (test-path ($filename -f $index)) {[void](++$index)}
$filename = $filename -f $index

# Save image to 'C:\Users\<username>\Desktop\Scan {x}'
$image.SaveFile($filename)

# Show image 
& $filename

Personnalisations

  • Passez Item("FormatID").Value = $wiaFormatJPEGà $wiaFormatPNG(ou au format TIFF, BMP, GIF) si vous avez besoin d'un autre format d'image.
  • Modifiez $([Environment]::GetFolderPath("Desktop"))\Scan {0}.jpg"si vous avez besoin d'un autre chemin de sortie. Changer l'extension .jpgsi vous aviez précédemment changé le format de l'image

Ressources utilisées

Nixda
la source
0

Cela pourrait être mieux servi à stackoverflow. rechercher le tag "WIA" et il y a des gens qui ont abordé l'automatisation. Niveau utilisateur expert.

Il est très facile de créer un vbscript pour lancer la boîte de dialogue, mais (autant que je sache, mes connaissances sont limitées) (a) WIA nécessite un hôte pour gérer l’image numérisée; (pas simplement lancer le dialogue) et; (b) Le dialogue WIA ne semble pas avoir un mode "sans surveillance".

Une ressource pour vous: WIA Automation

Et un script vbs pour lancer wia (créer un fichier texte nommé par exemple launchWia.vbs):

set oDlg = CreateObject("WIA.CommonDialog")
oDlg.ShowAcquireImage()

Peut être exécuté en utilisant un fichier de commandes:

cscript launchWia.vbs
pause

Qui peut être exécuté via un raccourci.

Encore une fois, cela ne vous apportera probablement rien car il ne gère pas l’image. Consultez la documentation MSDN pour des exemples traitant de la gestion des images.

horatio
la source
0

Le programme est Windows Fax and Scan. entrez la description de l'image ici

Lorsque vous cliquez sur New Scan, la fenêtre que vous avez affichée apparaît: entrez la description de l'image ici

utilisateur291737
la source
0

scan.vbs

Set CommonDialog = CreateObject("WIA.CommonDialog")
Set DeviceManager = CreateObject("WIA.DeviceManager")

' List all Available Devices by Name and DeviceID
' The following example shows how to list all available Deviceices by name and DeviceID. 
Dim i, n 'As Integer
n = DeviceManager.DeviceInfos.Count
WScript.Echo "Number of Deviceice found = " & n
For i = 1 to DeviceManager.DeviceInfos.Count
  WScript.Echo " Device " & i & ":" & vbTab & DeviceManager.DeviceInfos(i).Properties("Name").Value & vbTab & "(" & DeviceManager.DeviceInfos(i).DeviceID & ")"
Next

Set DevInfo = DeviceManager.DeviceInfos(1)
Set Device = DevInfo.Connect

Device.Items(1).Properties("6146").Value = 2 'colors
Device.Items(1).Properties("6147").Value = 600 'dots per inch/horizontal
Device.Items(1).Properties("6148").Value = 600 'dots per inch/vertical
Device.Items(1).Properties("6149").Value = 0 'x point where to start scan
Device.Items(1).Properties("6150").Value = 0 'y point where to start scan
Device.Items(1).Properties("6151").Value = 5100 'horizontal exent DPI x inches wide
Device.Items(1).Properties("6152").Value = 7002 'vertical extent DPI x inches tall
Device.Items(1).Properties("4104").Value = 8 'bits per pixel

'Device.Items(1).Properties("3098").Value = 1700 'page width
'Device.Items(1).Properties("3099").Value = 2196 'page height

Set img = CommonDialog.ShowTransfer(Device.Items(1), "{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}", true)

img.SaveFile "F:/image.bmp"

Courir "C:/Windows/System32/cscript.exe" //X "F:/scan.vbs"

Sergey L
la source