2011-08-11 3 views
2

私のプロジェクトでは、単純な要件があります。既存のxorgアプリのウィンドウの現在安定しているRuby用のxlibラッパー?

  1. グラブ内容を
    (やるいくつかのOCR)
  2. が(オーバーレイ)は、既存のアプリケーションのウィンドウの上に何かを描く

要件2はそれほど重要ではないので、ウィンドウを自分のものにコピーすることで解決できます。

私は限られており、日付のプロジェクトのうちで時間を無駄に午前中を過ごした:

hornet's eye (couldn't find how to reference an existing window) 
matju's RubyX11 (wanted ruby 1.7) 
moriq's ruby-xlib (unsigned int for int errors during compile) 
xlib-wrap (more type errors) 

だから、離れのXlibやXCBとCを使用してから、私は、高速のために使用することができますまとも現在、安定したライブラリや言語があります開発?どんな言語でもいいですが、私はルビーを好むでしょう。

+0

を私はホーネットの目ですぐに見えました。それはかなり有望なプロジェクトのように見えます。それ以外の方法で必要なことができれば、Ruby C APIを使ってウィンドウをつかむための簡単なRuby拡張をプログラムすることができます。それほど難しくはありません。残りの処理のために、ホーネットにそれを与えることができます。 – Casper

+1

FFIを使って調べることもできます。あなたが操作する必要がある関数/構造体がほんの少ししかない場合、バインディングを設定するのはすばやく簡単です。 – cam

+0

@キャスパー:私はグーグルで見つけて、http://www.rubyinside.com/how-to-create-a-ruby-extension-in-c-in-under-5-minutes-100.htmlを見つけました。時間私はこれを私が推測したことを学んだ。 – typist

答えて

1

subset of Xlibの周りにラッパーを書き始めました。私はかなり包み込んだ。あなたは、CコードとRubyの例を見て、これをハックして、あなたが望むことをすることができます。

+0

これは役に立ちました。ありがとう。 – typist

2

は最後に、私はqt4-qtrubyと一緒に行きました:私が使用

require 'Qt4' 
app = Qt::Application.new(ARGV) 
p = Qt::Pixmap.grabWindow(0x182183b) #param is xlib id from xwininfo 

ビルド・スクリプト:

sudo apt-get install qt-sdk libsmokeqt4-dev 
cmake \ 
-DRUBY_EXECUTABLE=`which ruby` \ 
-DRUBY_INCLUDE_PATH=$MY_RUBY_HOME \ 
&& make && make install 
+0

教師バッジ...残念ながら、grabWindowにはメモリリークがありました。私はxwd(とramdisk)でそれを周りました。 – typist

関連する問題