メッセージ

2007年03月16日の記事

2007/03/16(金)Ruby関係のPATHが滅茶苦茶

うちのPCにはRubyが3バージョン入っているため良く問題が起きる。

3バージョンとはApollo版とActiveScriptRubyのmswin32版とcygwin版なのだが、これの共存がどうも難しい。スクリプト言語はPATHに支配されるので別バージョンのライブラリを見にいったりしてしまう。

さて今回のトラブルは、諸事情あってmswin32版Rubyを1.8.5に入れ替えたため発生したようだ。入れ替え後、irbを動かそうとしたら、
c:\online\apollo\bin/readline.dll: 127: 指定されたプロシージャが見つかりません。

   - Init_readline (LoadError)

c:\online\apollo\bin/readline.dll       from c:/online/ruby/lib/ruby/1.8/irb/com

pletion.rb:10

        from c:/online/ruby/bin/irb.bat:18:in `require'

        from c:/online/ruby/bin/irb.bat:18
と怒られた。どうやら環境変数$RUBYLIBにapollo版のPATH、c:\online\apollo\binが書いてあるのが駄目らしい。しかし、奇怪なことに先にmswin版のPATH、c:\online\ruby\binを書いてやってもダメ(その場合はruby\binのreadline.dllでプロシージャが見つからないと言われる)。

つまり、環境変数$RUBYLIBに、
C:\ONLINE\RUBY\bin
c:\online\apollo\bin

c:\online\apollo\bin
の場合はダメで、

なら良いらしい。

ところが、RUBYLIBからapollo\binを外したところ、今度はApolloで作ったスクリプトがexerbで固めない限り動かなくなってしまう。

うーん、何も考えずに1.8.5を入れたのが迂闊だったか。

暫定でActiveScriptRubyを1.8.2に戻した。一応gemsも含めて動くようになったので解決。

今後mswin32版のVer Upは注意することにする。危ういバランスの環境はすぐに壊れるということだ。

2007/03/16(金)スキャナビボタンに任意のアプリケーションを割り付ける→失敗

2007/03/16 23:51 PC(全般)
EPSONのGT-8300UFを手に入れたことは以前に書いた。

このスキャナはスキャナビボタンという物が4つついている。スキャナ側からの操作で任意のアプリケーションを起動し、ボタンごとに設定を変えておいたり、勝手に取り込んだりできたら便利なのではないかと考えた。

結論から言うと失敗したので誰の役に立つという情報でもないのだが、一応作業メモを残しておく。

さてスキャナビボタンで起動できるのはStillImage対応として登録されたソフトに限られるようだ(ドライバの制約)。レジストリは以下の場所にある。
HKEY_LOCAL_MACHINE\SYSTEM\使っているコントロールセット\Control\StillImage\Events\STIProxyEvent
登録したいアプリにGUIDがあれば、それを使いキーを作成。なければ、VisualStudioなり、Rubyのuuidtoolsなりで適当にGUIDをでっちあげればいい。

キーの中身は以下のようになる。
[HKEY_LOCAL_MACHINE\SYSTEM\使っているコントロールセット\Control\StillImage\Events\STIProxyEvent\{アプリのGUID}]
"CmdLine"="アプリケーションのパス" /StiDevice:%1 /StiEvent:%2"
"Name"="名前"
"Desc"="名前でいいと思う"
"Icon"="sti.dll,0"

場合によっては反映に再起動の必要があるかも。

この方法でBTScanを登録してみた。すると確かにスキャナビボタンの起動アプリとしてBTScanが表示された。やったと思ったのだが、/StiDeviceって何? と、BTScanから怒られる。

得心。

/StiDeviceとか/StiEventってのはまさしくコマンドラインのオプション指定に過ぎない。要するにstillimageってのはMSがインターフェースだけ決めて、実装するかどうかはアプリ任せっていうことだ。

オブジェクトや、テンポラリファイルがわたせるのではないかというイメージがあったため、思わず突っ走ってしまったがまるで無駄だった。結局アプリ側でTWAINを立ち上げるとかいうことなんだなあ。

ただこの方法で特定のスキャナビボタンに任意のコマンドを割り付けることは出来そうだ。たとえばuwscのスクリプトや、特定のショートカットボタンを各スキャナビボタンに割り当てるということは出来るだろう(もちろんその場合は/Sti****は不要)。

でも結局TWAIN経由になるなら、スキャナビボタンにショートカットを割り当てたところで手順の簡略化にはつながらない気もする。キーボードをスキャナの所まで引っ張ってくるのがめんどくさいということであれば、ジョイパッド+JoyToKeyをつかうとか、マウスにショートカット割り当てるとかその程度でいいかな。
OK キャンセル 確認 その他