Eu tenho um scanner Canon Pixma MP 110 um pouco mais antigo. É claro que a Canon não fornece nenhum driver útil (o site deles é realmente desesperador, frustrante e inútil em todos os sentidos) - o único software que encontrei é uma versão chinesa com pontos de interrogação em todos os lugares.
No entanto, se eu for paraDispositivos e Impressorasgerenciador no Windows e clicar com o botão direito no scanner, posso usar o gerenciador de digitalização integrado ao Windows que está em meu idioma nativo. Possui recursos um tanto limitados, mas ainda é melhor do que um monte de botões cheios de pontos de interrogação.
Pesquisei um pouco e descobri que o recurso de que falo se chamaWIA.
Aqui está a abordagem, porém em tcheco, que pode soar para você como estes pontos de interrogação soam para mim.
Depois de escolherComece a digitalizaruma caixa de diálogo aparece. Ele é executado em explorer.exe
, portanto, não há nenhuma alteração em descobrir qual programa ele realmente é.
O que eu quero é criar um atalho na área de trabalho, queiniciar automaticamente a digitalização, sem que eu clique no botão "Comece a digitalizar" e "Varredura".
Além disso, o scanner possui um botão para iniciar a digitalização e meu computador reconhece quando ele é pressionado. Quando eu pressiono, o Windows me pergunta qual aplicativo deve ser executado para o botão - no entanto, nenhum software de scanner funcionou aqui, nem apareceu na seleção que o Windows me forneceu. Eu queria saber se eu poderia hackear isso para rodarqualquer aplicativo para esse botão. (isso seria útil se eu conseguisse resposta para a pergunta principal).
Então as perguntas mais uma vez, se você estava com preguiça de ler aquela postagem longa:
- Como faço para que o Windows inicie automaticamente a digitalização a partir do scanner instalado usando um script em lote ou um comando simples no
.lnk
arquivo? - (opcional) Como atribuo qualquer aplicativo ao pressionamento de botão do meu scanner?
Responder1
Solução PowerShell
O script deve funcionar com a maioria dos scanners, independentemente de ser Canon, Epson ou qualquer outro, desde que sejam compatíveis com WIA e suportem o transfer()
comando. O script começará a digitalizar imediatamente. Todas as opções como nome do arquivo, caminho ou formato da imagem já estão definidas via script. Você só precisa iniciar o processo de digitalização com um atalho
- Salve-o como, por exemplo
D:\StartScan.ps1
Crie um novo atalho e aponte-o para
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -File "D:\StartScan.ps1"
IniciarScan.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
Personalizações
- Mude
Item("FormatID").Value = $wiaFormatJPEG
para$wiaFormatPNG
(ou TIFF, BMP, GIF) se precisar de outro formato de imagem - Altere
$([Environment]::GetFolderPath("Desktop"))\Scan {0}.jpg"
se precisar de outro caminho de saída. Altere a extensão.jpg
se você já alterou o formato da imagem
Recursos usados
- http://www.da5is.com/2013/09/08/quick-powershell-to-scan-to-evernote/
- http://msdn.microsoft.com/en-us/library/ms630814(v=vs.85).aspx
- http://ardalis.com/powershell-control-over-nikon-d3000-camera
- http://msdn.microsoft.com/en-us/library/windows/desktop/ms630806(v=vs.85).aspx
- http://deletethis.net/dave/?uri=http%3A%2F%2Fcerealnumber.livejournal.com%2F47638.html
- https://msdn.microsoft.com/en-us/library/windows/desktop/ms630810(v=vs.85).aspx
- https://stackoverflow.com/a/28422467/935614
- https://msdn.microsoft.com/en-us/library/ms630819(v=vs.85).aspx#FilterSharedSample016
Responder2
este é o script ps que estou usando, copiei-o de uma das respostas neste tópico e modifiquei-o para funcionar com outro alimentador, caso você não esteja usando o alimentador de vidro, você pode modificar o alimentador alterando o 'valor prop' para 0 1 2. este script não exibirá a imagem após a digitalização, apenas a salvará.
# Create object to access the scanner
$deviceManager = new-object -ComObject WIA.DeviceManager
$device = $deviceManager.DeviceInfos.Item(1).Connect()
# Set the scanner source to the feeder
foreach ($prop in $device.Properties) {
if ($prop.Name -eq "Document Handling Select") {
$prop.Value = 1
}
}
# Create object to access the scanned image later
$imageProcess = new-object -ComObject WIA.ImageProcess
# Store file format GUID strings
$wiaFormatJPEG = "{B96B3CAE-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 C:\scan path and filename 'Scan 0'
$filename = "C:\scan\Scan {0}.pdf"
# 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:\scan\Scan {x}'
$image.SaveFile($filename)
Responder3
Isso pode ser melhor servido no stackoverflow. procure a tag "WIA" e há pessoas que abordaram a automação. Nível de usuário especialista.
É trivialmente fácil criar um vbscript para iniciar a caixa de diálogo, mas (até onde eu sei com meu conhecimento limitado) (a) o WIA requer um host para lidar com a imagem digitalizada, portanto, qualquer coisa que você fizer precisará receber e armazenar a imagem (não apenas iniciar a caixa de diálogo) e; (b) A caixa de diálogo WIA não parece ter um modo "autônomo".
Um recurso para você:Automação WIA
E um script vbs para iniciar o wia (crie um arquivo de texto chamado, por exemplo launchWia.vbs
):
set oDlg = CreateObject("WIA.CommonDialog")
oDlg.ShowAcquireImage()
Pode ser executado usando um arquivo em lote:
cscript launchWia.vbs
pause
Que pode ser executado através de um atalho.
Novamente, isso provavelmente não renderá nada porque não lida com a imagem. Consulte a documentação do MSDN para obter exemplos que tratam do tratamento de imagens.
Responder4
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"
Correr"C:/Windows/System32/cscript.exe" //X "F:/scan.vbs"