Automatize o recurso de verificação do Windows

Automatize o recurso de verificação do Windows

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. insira a descrição da imagem aqui

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 é. insira a descrição da imagem aqui

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).

insira a descrição da imagem aqui

Então as perguntas mais uma vez, se você estava com preguiça de ler aquela postagem longa:

  1. 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 .lnkarquivo?
  2. (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

  1. Salve-o como, por exemploD:\StartScan.ps1
  2. 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 = $wiaFormatJPEGpara $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 .jpgse você já alterou o formato da imagem

Recursos usados

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"

informação relacionada