OCR機能付きペンスキャナーで商品チェックするぞ(3)
前回はOCRペンスキャナーをFileMakerで作ったアプリケーションで使用しようとしたら、うんともすんとも言わなかったで終わりましたが、今回は解決編です。
ちなみに解決方法の一つにPowerShellというWindows特有の機能を使いますのでWindows限定の解決方法になります。
今回とる解決手段は「ペンスキャナで読むときにFileMakerにフォーカスを当てない」です。
前回にも書いたように、FileMaker以外の例えば標準のテキストエディタとかだと普通にOCR読みした内容が流れてくるしクリップボードにも内容がコピーされるのを確認しているので、ペン型スキャナで読み込むときだけ別のウィンドウにフォーカスを当てればクリップボードに欲しい内容が残るので、その後FileMaker側でクリップボードの内容を取得すればOK的な処理を加えます。
まず、フォーカスを当てるべきウィンドウを何で作るかですが、今回はWindows7以降でOS標準搭載となっている「PowerShell」を使います。(私の使っているのはWindows10です)
またFileMaker側でクリップボードの内容を取得する際に、読み込みが終わった事を検出する必要があるのですが、どうやら外部のプログラムを起動してから終了するまで処理を待ってくれるオプションは無いようなので、PowerShell側からFileMakerに通知させるようにします。
これを可能にするのが「FMPプロトコル」です。とは言っても初めて使うのでちょっとドキドキですが実装してみましょう。
その前にクリップボードから内容を取得するスクリプトを作成します。名前は「clip_board」です。
クリップボードからitem_cdに内容を貼り付けし、前回作った品名を探すためのスクリプト「item_search」を実行します。
次にPowerShell呼び出しとFileMakerへの通知を行う部分です。
FileMakerで外部プログラムである「PowerShell」を使うには、スクリプトの「Eventを送信」を使い下記のように記述し、名前は「input_proc」とします。
何を書いているかというと
powershell -WindowStyle Hidden
でPowerShellを呼び出して、呼び出しオプションとしてPowerShellの画面は隠します。
add-type -AssemblyName "Microsoft.VisualBasic"
でVisualBasicの機能を使いますよとPowerShellに教えてあげます。
[Microsoft.VisualBasic.Intetaction]::InputBox('読み込んでください','OcrPen',''); -Wait
ではフォーカスの当たるインプットボックスを表示します。WaitオプションはInputBoxが閉じるまで次に処理が行かないように待たせます。
最後にFMPプロトコルでFileMakerアプリケーション内の「clip_board」スクリプトを呼び出します。
start 'fmp://$/OcrPen?script=clip_board';
startはPowerShell上では「Start-Process」のエイリアスです。
fmp://~の部分がFMPプロトコルです。今回のように起動するスクリプトを指定する場合は「?script=~」とクエリ文字で指定します。
そして最後に上記のスクリプトを編集ボックスの「OnObjectKeystroke」に貼り付けて終わりです。
ペンスキャナにはボタンが付いていて、このボタンを押すとEnterのキーが送信されるので、読み込み前はスキャナのボタンを押してから読み込みになるようになります。
(ちょっと雑とはおもいますが...)
さてでは動かしてみましょう。前回作成した「input」フォームを開き、「item_cd」編集ボックスにフォーカスを当ててからペン型スキャナのボタンを押します。
するとPoserShellのInputBoxが出てきて
前回登録した「ラスパイマガジン」の数字表記コードを読み込みます。
お
そしてもう一回ペン型スキャナのボタンを押すと
やっときたーーー!!
何とか成功しましたが、PowerShellの画面「Hidden」オプションつけたのに一瞬出ちゃうのね...
まぁ当初の目的「ペン型スキャナで商品の文字で書かれているコード読んだらFileMakerで作ったアプリケーションで商品名を表示する」は達成できました。
問題は色々ありましたが、FileMakerで意地になる必要あったのかな
ただこの状態では仕事で使うとなるとまだ問題はあると思います
例えば、途中まで同じ商品コードがあったら、どっちの商品なのかわからないとか
(A-1234という商品とA-12345という商品が存在するとか)
最低限コードの文字数は決まってないと不安ですね。
今回はまぁ、あくまで「技術検証」という事で(笑)
「OCR機能付きペンスキャナーで商品チェックシリーズ」はこれにて終わりです。
「僕の備忘録」的なブログですが、誰かの役にたてば幸いです。
これからもFileMakerに限らずいろいろやっていきますので、興味のある方は今後もよろしくお願いします。