人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

フォルダ内へGIFデータが保存されたら、勝手に印刷することは実現できますでしょうか?
100ぐらいのファイルが適宜保存されますが、
保存と同時にプリント出力を行いたいです。

よくプリンターについているホットフォルダのようなイメージです。
どうぞよろしくお願いいたします。

●質問者: ohtsu6
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● cx20
●1500ポイント ベストアンサー

フォルダ監視&印刷を行う VBScript を書いてみました。

印刷処理は、mspaint.exe(MSペイント)を「/p」オプションを付け実行することで実現しています。(印刷の出力先は、「通常使うプリンタ」に出力されます。)

以下の「監視対象フォルダ」「移動先フォルダ」を環境に合わせて変更の上、コマンドラインにて「CScript FileWatch.vbs」を実行お願いします。

処理を終了させる場合は [Ctrl]+[C] を押してください。

なお、印刷後、処理済みファイルを「移動先フォルダ」に移動(「上書き」コピーならびに削除)していますが、特段、エラー処理を行っていない為、場合によっては、ファイルが消える可能性がありますので、十分テストの上、実行お願いします。

' File : FileWatch.vbs
' Usage : CScript FileWatch.vbs
Option Explicit

Const g_strWatchFolder = "C:\home\edu\hatena\ohtsu6\1364222104\watch"  ' 監視対象フォルダ
Const g_strBackupFolder = "C:\home\edu\hatena\ohtsu6\1364222104\backup" ' 移動先フォルダ

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")

Call Main()

Sub Main()
 Dim strFolder
 Dim strWatchFileName
 Dim strComputer
 Dim objWMIService
 Dim colMonitoredEvents
 Dim objLatestEvent
 
 strFolder = Replace( g_strWatchFolder, "\", "\\\\" )
 strComputer = "." 
 Set objWMIService = GetObject("winmgmts:" _ 
 & "{impersonationLevel=impersonate}!\\" & _ 
 strComputer & "\root\cimv2") 
 Set colMonitoredEvents = objWMIService.ExecNotificationQuery _ 
 ("SELECT * FROM __InstanceCreationEvent WITHIN 3 WHERE " _ 
 & "Targetinstance ISA 'CIM_DirectoryContainsFile' and " _ 
 & "TargetInstance.GroupComponent= " _ 
 & "'Win32_Directory.Name=""" & strFolder & """'") 
 Do 
 Set objLatestEvent = colMonitoredEvents.NextEvent 
 strWatchFileName = objLatestEvent.TargetInstance.PartComponent 
 strWatchFileName = GetValue( strWatchFileName )
 strWatchFileName = Replace( strWatchFileName, "\\", "\" )
 PrintFile strWatchFileName
 MoveFile strWatchFileName, g_strBackupFolder
 Loop 
End Sub

Function GetValue( strKeyValue )
 Dim strResult
 Dim strArray
 strArray = Split(strKeyValue, "=") 
 strResult = strArray(1)
 GetValue = strResult
End Function 

Sub PrintFile( strFileName )
 Dim strCommand
 strCommand = "mspaint.exe " & strFileName & " /p"
 
 Dim objShell
 Set objShell = CreateObject("Wscript.Shell") 
 WScript.Echo "[" & strCommand & "] を実行しています。"
 objShell.Run strCommand, 1, True
End Sub

Sub MoveFile( strFileName, strBackupFolder )
  ' 二重引用符除去
 strFileName = Replace( strFileName, Chr(34), "" )
 
  ' フォルダの最後に「¥」を追加
 If Right(strBackupFolder, 1 ) <> "\" Then
 strBackupFolder = strBackupFolder + "\"
 End If
 
 WScript.Echo "[" & strFileName & "] を [" & strBackupFolder & "] に移動しています。"
 fso.CopyFile strFileName, strBackupFolder , True ' 上書きコピー
 fso.DeleteFile strFileName
End Sub

実行結果

C:\home\edu\hatena\ohtsu6\1364222104> CScript FileWatch.vbs
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

[mspaint.exe "C:\home\edu\hatena\ohtsu6\1364222104\watch\test.gif" /p] を実行しています。
[C:\home\edu\hatena\ohtsu6\1364222104\watch\test.gif] を [C:\home\edu\hatena\ohtsu6\1364222104\backup\] に移動しています。

参考情報

■ Hey, Scripting Guy! : フォルダにファイルが追加されたときに自動的にスクリプトを実行することはできますか
http://gallery.technet.microsoft.com/scriptcenter/fbc46ecd-04b3-40e1-85b6-905b3545fc74
■ Hey, Scripting Guy! フォルダに追加された新しいファイルを自動的に開く方法はありますか
http://gallery.technet.microsoft.com/scriptcenter/9726505e-b186-4f23-b7c3-a5d61c1efff1


ohtsu6さんのコメント
cx20さま ご回答ありがとうございます。 無事にできました。 ちなみに、「windows フォトビューアー」で開いて 印刷をするこもできますでしょうか? よろしくお願いいたします。

cx20さんのコメント
>> ちなみに、「windows フォトビューアー」で開いて 印刷をするこもできますでしょうか? << 一応、可能なようです。 プログラムの変更箇所は以下になります。 -PrintFile() … [変更] strCommand のパラメータを変更 -GetDefaultPrinter() … [追加] 通常使うプリンタ名を取得する。 以下、対応版です。 >|vb| ' File : FileWatch.vbs ' Usage : CScript FileWatch.vbs Option Explicit Const g_strWatchFolder = "C:\home\edu\hatena\ohtsu6\1364222104\watch" ' 監視対象フォルダ Const g_strBackupFolder = "C:\home\edu\hatena\ohtsu6\1364222104\backup" ' 移動先フォルダ Dim fso Set fso = CreateObject("Scripting.FileSystemObject") Call Main() Sub Main() Dim strFolder Dim strWatchFileName Dim strComputer Dim objWMIService Dim colMonitoredEvents Dim objLatestEvent strFolder = Replace( g_strWatchFolder, "\", "\\\\" ) strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & _ strComputer & "\root\cimv2") Set colMonitoredEvents = objWMIService.ExecNotificationQuery _ ("SELECT * FROM __InstanceCreationEvent WITHIN 3 WHERE " _ & "Targetinstance ISA 'CIM_DirectoryContainsFile' and " _ & "TargetInstance.GroupComponent= " _ & "'Win32_Directory.Name=""" & strFolder & """'") Do Set objLatestEvent = colMonitoredEvents.NextEvent strWatchFileName = objLatestEvent.TargetInstance.PartComponent strWatchFileName = GetValue( strWatchFileName ) strWatchFileName = Replace( strWatchFileName, "\\", "\" ) PrintFile strWatchFileName MoveFile strWatchFileName, g_strBackupFolder Loop End Sub Function GetValue( strKeyValue ) Dim strResult Dim strArray strArray = Split(strKeyValue, "=") strResult = strArray(1) GetValue = strResult End Function Sub PrintFile( strFileName ) Dim strCommand Dim strPrinter strPrinter = GetDefaultPrinter() ' 「MSペイント」にて印刷する場合 'strCommand = "mspaint.exe " & strFileName & " /p" ' 「Windows フォトビューア」で印刷する場合 strCommand = "rundll32.exe shimgvw.dll,ImageView_PrintTo /pt " & strFileName & " """ & strPrinter & """" Dim objShell Set objShell = CreateObject("Wscript.Shell") WScript.Echo "[" & strCommand & "] を実行しています。" objShell.Run strCommand, 1, True End Sub Sub MoveFile( strFileName, strBackupFolder ) ' 二重引用符除去 strFileName = Replace( strFileName, Chr(34), "" ) ' フォルダの最後に「¥」を追加 If Right(strBackupFolder, 1 ) <> "\" Then strBackupFolder = strBackupFolder + "\" End If WScript.Echo "[" & strFileName & "] を [" & strBackupFolder & "] に移動しています。" fso.CopyFile strFileName, strBackupFolder , True ' 上書きコピー fso.DeleteFile strFileName End Sub Function GetDefaultPrinter() Dim strResult Dim strComputer strComputer = "." Dim objWMIService Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Dim colPrinters Set colPrinters = objWMIService.ExecQuery("Select * From Win32_Printer Where Default = TRUE") Dim objPrinter For Each objPrinter in colPrinters strResult = objPrinter.ShareName Exit For Next GetDefaultPrinter = strResult End Function ||< 参考情報 >> ■ shimgvw.vbs - コマンドラインから「Windows画像とFaxビューア」で表示/印刷する http://www.vector.co.jp/soft/winnt/util/se393313.html ■ Hey, Scripting Guy! コンピュータが通常使うプリンタを調べる方法はありますか。 http://gallery.technet.microsoft.com/scriptcenter/79f41de2-6873-4a3d-82e7-8e411c3b2906 <<
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ