Windows 스캔 기능 자동화

Windows 스캔 기능 자동화

나는 다소 오래된 Canon 스캐너 Pixma MP 110을 가지고 있습니다. 물론 Canon은 유용한 드라이버를 제공하지 않습니다. (그들의 사이트는 정말 절박하고 실망스럽고 쓸모가 없습니다.) 제가 찾은 유일한 소프트웨어는 물음표가 있는 중국어 버전뿐이었습니다.

그러나 만약 내가 간다면장치 및 프린터Windows에서 관리자를 선택하고 스캐너를 마우스 오른쪽 버튼으로 클릭하면 내 모국어로 제공되는 Windows 통합 스캐닝 관리자를 사용할 수 있습니다. 기능이 다소 제한되어 있지만 물음표로 가득 찬 버튼보다 훨씬 낫습니다.

조금 검색해보니 제가 얘기하는 기능이위아.

그러나 체코어에서는 이 물음표가 나에게 들리는 것처럼 여러분에게도 들릴 수 있는 접근 방식이 있습니다. 여기에 이미지 설명을 입력하세요

선택 후스캔 시작대화 상자가 나타납니다. 에서 실행되므로 explorer.exe실제로 어떤 프로그램인지 알아내는 데에는 변화가 없습니다. 여기에 이미지 설명을 입력하세요

내가 원하는 것은 바탕 화면 바로 가기를 만드는 것입니다.자동으로 스캔을 시작합니다, 제가 ​​'를 클릭하지 않고도스캔 시작" 그리고 "주사".

또한 스캐너에는 스캔을 시작하는 버튼이 있으며 이 버튼을 누르면 내 컴퓨터가 이를 인식합니다. 이 버튼을 누르면 Windows에서 버튼에 대해 어떤 응용 프로그램을 실행해야 하는지 묻습니다. 하지만 여기서는 스캐너 소프트웨어가 작동하지 않았고 Windows에서 제공하는 선택 항목에도 아무 것도 나타나지 않았습니다. 이것을 해킹하여 실행할 수 있는지 궁금합니다.해당 버튼에 대한 응용 프로그램. (기본 질문에 대한 답변을 얻은 경우 유용할 것입니다).

여기에 이미지 설명을 입력하세요

긴 게시물을 읽기에 너무 게으르다면 다시 한 번 질문해 보세요.

  1. 배치 스크립트나 파일의 간단한 명령을 사용하여 Windows가 설치된 스캐너에서 자동으로 스캔을 시작하도록 하려면 어떻게 해야 합니까 .lnk?
  2. (선택 사항) 스캐너의 버튼 누름에 응용 프로그램을 어떻게 할당합니까?

답변1

파워셸 솔루션

스크립트는 WIA와 호환되고 명령을 지원하는 한 Canon, Epson 등 무엇이든 상관없이 대부분의 스캐너에서 작동해야 합니다 transfer(). 스크립트가 즉시 스캔을 시작합니다. 파일 이름, 경로 또는 이미지 형식과 같은 모든 옵션은 이미 스크립트를 통해 설정되어 있습니다. 바로가기를 사용하여 스캔 프로세스를 시작하면 됩니다.

  1. 예를 들어 저장하십시오.D:\StartScan.ps1
  2. 새 바로가기를 만들고 이를 가리킵니다.

    %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

사용자 정의

  • 다른 이미지 형식이 필요한 경우 (또는 TIFF, BMP, GIF) Item("FormatID").Value = $wiaFormatJPEG로 변경하세요 .$wiaFormatPNG
  • $([Environment]::GetFolderPath("Desktop"))\Scan {0}.jpg"다른 출력 경로가 필요한 경우 변경하십시오 . .jpg이전에 이미지 형식을 변경한 경우 확장자를 변경하세요.

사용된 자원

답변2

이것은 제가 사용하고 있는 ps 스크립트입니다. 이 스레드의 답변 중 하나에서 복사한 다음 유리 피더를 사용하지 않는 경우 다른 피더와 작동하도록 수정합니다. '소품 값'을 0으로 변경하여 피더를 수정할 수 있습니다. 1 2. 이 스크립트는 스캔 후 이미지를 표시하지 않고 저장만 합니다.

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

답변3

이것은 stackoverflow에서 더 잘 제공될 수 있습니다. "WIA"라는 태그를 검색하시면 자동화에 도전하신 분들이 계십니다. 전문가 수준.

대화 상자를 시작하기 위해 vbscript를 만드는 것은 매우 쉽지만 (내가 아는 한 제한된 지식으로) (a) WIA에서는 스캔된 이미지를 처리하기 위해 호스트가 필요하므로 수행하는 모든 작업에는 이미지를 수신하고 저장해야 합니다. (단순히 대화상자를 실행하는 것이 아님) 그리고; (b) WIA 대화 상자에 "무인" 모드가 없는 것 같습니다.

당신을 위한 자료:WIA 자동화

그리고 wia를 시작하는 vbs 스크립트(예: 이름의 텍스트 파일 만들기 launchWia.vbs):

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

배치 파일을 사용하여 실행할 수 있습니다.

cscript launchWia.vbs
pause

바로가기를 통해 실행할 수 있습니다.

다시 말하지만, 이는 이미지를 처리하지 않기 때문에 아마도 아무 것도 얻지 못할 것입니다. 이미지 처리를 다루는 샘플은 MSDN 문서를 참조하세요.

답변4

스캔.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"

달리다"C:/Windows/System32/cscript.exe" //X "F:/scan.vbs"

관련 정보