hakeの日記

Windows環境でプログラミングの勉強をしています。

シェルスクリプトでのQTアプリの操作

automailでのメールの自動送受信のようにQCOPメッセージが判明している場合をその記述をすれば良いけれども、QCOPメッセージが判っていない操作や細かい操作が必要な場合はどうすればよいかというと、InputHelperの機能を利用してキー操作(あるいはペン操作)をそのまま順番に記載すればOK。


例えばMusicPlayerのリストの2曲目を演奏させるキー操作は、「↓」「Enter」だから

#!/bin/sh
export LD_LIBRARY_PATH=/home/QtPalmtop/lib
export QPEDIR=/home/QtPalmtop
export QPEGROUP=qpe
export QPEUSER=zaurus
export QTDIR=/home/QtPalmtop

QCOP=/home/QtPalmtop/bin/qcop


${QCOP} QPE/System 'execute(QString,QString)' musicplayer
# echo QPE/System 'execute(QString,QString)' musicplayer > /var/spool/inputhelper/qcop
sleep 20

$QCOP QPE/InputHelper 'key(QString)' "click Down"
$QCOP QPE/InputHelper 'key(QString)' "click Return"

と記述できる、この例ではMusicPlayerが高速起動に設定されていない場合を考慮して起動後20秒待ってからキー操作をするようにしている。またコメントアウトしているecho文でもMusicPlayerの起動が可能(こちらの方が動作が速いみたい)


ペン操作を使用する場合は下記のような記述となる。(X,Y)はクリックする座標

$QCOP QPE/InputHelper 'mouse(QString)' "click X Y"

別の例としてNetFrontオートクルーズをさせる場合、キー操作は「Menu」「→」×3「↓」×5「Enter」なので

#!/bin/sh
export LD_LIBRARY_PATH=/home/QtPalmtop/lib
export QPEDIR=/home/QtPalmtop
export QPEGROUP=qpe
export QPEUSER=zaurus
export QTDIR=/home/QtPalmtop

QCOP=/home/QtPalmtop/bin/qcop


${QPEDIR}/bin/qcop QPE/Network 'connectRequest()'
#echo QPE/Network 'connectRequest()' > /var/spool/inputhelper/qcop

sleep 1
${QPEDIR}/bin/qcop QPE/InputHelper 'key(QString)' "click Escape"

$QCOP QPE/InputHelper 'key(QString)' "click F11"
$QCOP QPE/InputHelper 'key(QString)' "click Right"
$QCOP QPE/InputHelper 'key(QString)' "click Right"
$QCOP QPE/InputHelper 'key(QString)' "click Right"
$QCOP QPE/InputHelper 'key(QString)' "click Down"
$QCOP QPE/InputHelper 'key(QString)' "click Down"
$QCOP QPE/InputHelper 'key(QString)' "click Down"
$QCOP QPE/InputHelper 'key(QString)' "click Down"
$QCOP QPE/InputHelper 'key(QString)' "click Down"
$QCOP QPE/InputHelper 'key(QString)' "click Return"

sleep 60

${QPEDIR}/bin/qcop QPE/Network 'stop()'
#echo QPE/Network 'stop()' > /var/spool/inputhelper/qcop

となる。
予め使用するネット接続手段の自動接続にチェックをいれておく必要がある。接続操作後のCancel(Escape)は「接続中」表示のダイアログを消すための操作。sleep 60はオートクルーズに必要な時間で登録してあるURLの数で調整する必要あり。



このようにキー(ペン)操作をそのまま記述することでいろいろと細かい操作が可能で、automailに登録することで指定時刻に実行させることも出来る。
なお、スクリプト最初の方のexport文はautomailに登録するのでなければ必要ないと思う。