[ 新規 | 編集 | 差分 ] [ 検索 | 一覧 | FrontPage ] [ 履歴 (RSS) | 差分履歴 (RSS) ] [ ログイン ]
【PR】Amazon | SL-C3000 | SL-C1000(3/18発売!) | SL-C860 | SL-6000W | SL-6000L | SL-6000N

InputHelperApplet

編集

InputHelper Applet

編集

English

Qtopiaへの入力(mouse/keyboard/qcop)を補助するためのアプレットpluginです。
パイプまたはqcopメッセージを通して mouseイベントの発生、keyboardイベントの発生、qcopメッセージの送信を行う事が出来ます。
また、KeyHelper Appletのhook機能と連携して、マウスカーソルを表示/操作する事が可能になります。
キーボードマクロ機能も実装しました。
また、Version 1.0.0より Craig Grahamさんのパッチを取り込み、USBマウスが使用出来るようになりました。

Special Thanks

編集

更新履歴

編集

ダウンロード

編集

バイナリ

編集

本体メモリ以外へのインストールはサポートしていません。

ソース

編集

機能

編集

緊急停止機能

編集

タスクバーアプレットプラグインとして実装しているので、なんらかのバグがあるとQtopia毎落ちてしまうため、
ロード時に落ちてしまう状態になると無限リセットループに入ってしまう可能性があります。
そのため、

/tmp/disable-inputhelper
/mnt/card/disable-inputhelper
/mnt/cf/disable-inputhelper

のいずれかのファイルが存在した時にはプラグインのロードを行わない様な機能を追加しました。
無限リセットループに入ってしまっても、外部メディアに上記ファイルを用意すれば正常に起動する様になります。(ただしVer0.8.3以降を使用している場合のみ)
起動後にエラーの原因を取り除き、ファイルを削除して下さい。

qcop QPE/TaskBar 'reloadApplets()'

を実行する事でアプレットをリロードする事が可能です。
SLシリーズでは外部メディアは/mnt/cardまたは/mnt/cfですが、それ以外にも対応するために/tmp以下も見る様にしています。
あらかじめ /tmp/disable-inputhelper を任意のファイルへのシンボリックリンクとして作成しておくと
リンク先の任意ファイルの有無で判断する事が可能になります。

USB mouse support

編集

Version 1.0.0より Craig Grahamさんのパッチを取り込み、USBマウスが使用出来るようになりました。
IntelliMouseのホイールにも対応しており、Up,Downキーとして動作するようになっています。

USBマウス使用時は下記のqcopメッセージhandle()でカーソルの表示をしなくても、マウスを動かすだけでカーソルが表示されます(カーソルは数秒後に自動的に消えます)。

SL-C750+REX-CFU1で使用する場合には、下記のモジュールを読み込み、QCopメッセージstartMouse()でマウスデバイスを初期化する必要があります。

# insmod input
# insmod mousedev
# insmod usbmouse
$ qcop QPE/InputHelper 'openMouse()'

終了時にはQCopメッセージ closeMouse() でマウスデバイスを閉じ、モジュールをアンロードします。

$ qcop QPE/InputHelper 'closeMouse()'
# rmmod usbmouse
# rmmod mousedev
# rmmod input

マウスカーソル表示

編集

下記のQCopメッセージで、マウスハンドラの開始/停止を行います。

qcop QPE/InputHelper 'handle()'
qcop QPE/InputHelper 'handle(int)'

2つめの方は指定回数のクリック後に自動的にマウスモードを終了します。
KeyHelper Appletのフック機能を使用しますので KeyHelper Applet Version 1.1.3 以降が必要になります。
KeyHelpreのランチャー設定

H = @qcop[TAB]QPE/InputHelper handle()

の様な設定を記述しておくとボタンでハンドラの開始/停止が行えます。

マウスカーソルの操作

編集
カーソルキーポインタを上下左右に移動
スペースキーポインタのPress/Release

Shiftキー、Controlキーを併用すると移動幅を変更できます。

修飾キー移動
無し8ピクセルずつ移動
Shift32ピクセルずつ移動
Control2ピクセルずつ移動

Fnキーを押しながらスペースキーを押すと右クリック、Fn+Shiftを押しながらスペースキーを押すと中クリックになります。

修飾キークリック
無し左クリック
Fn右クリック
Fn+Shift中クリック

マウスカーソルの変更

編集
~/Settings/inputhelper.conf

の[Cursor]セクションでマウスカーソルの設定を変更できます。

[Cursor]
data = カーソルイメージ
hotX = クリックポイント(X座標)
hotY = クリックポイント(Y座標)
timeout = タイムアウト値(ミリ秒単位)

カーソルイメージはKeyHelperのメニューアイコン指定と同様

$QTDIR/pics

以下の相対ファイルパス(拡張子省略可)を指定します。
デフォルトのイメージは16x16のイメージを使用していますが、サイズに規定はありません。

クリックポイントはその画像内のどのポイントでクリックイベントを発生させるかを指定します。
指定をしないと(7,7)がクリックポイントに設定されます。

※注意
クリックポイントは必ずカーソル画像内の点(16x16のイメージであれば0〜15)を指定して下さい。
現バージョンではQtopia毎落ちてしまうので、無限リセットループに入ってしまいます。
次のバージョンで不正な値は指定できない様な対処を入れます。

タイムアウト値はマウスイベント発生機能でマウスイベントを発生させた時のカーソル表示時間を指定します。
デフォルトでは3000ミリ秒に指定されています。

例)

[Cursor]
data = zoom
hotX = 10
hotY = 10

マウスカーソル移動幅設定

編集
~/Settings/inputhelper.conf

の[Step]セクションでマウスカーソルの設定を変更できます。

[Step]
normal = 移動幅(通常)
small = 移動幅(小)
large = 移動幅(大)
accels = 加速しきい値(リスト)
wrap = ラップモード

移動幅設定

normal通常移動時の移動幅デフォルト8
smallControlを押しながら移動の場合の移動幅デフォルト2
largeShiftを押しながら移動の場合の移動幅デフォルト32

加速設定

加速までのリピート数をカンマ区切りのリストで指定します。
しきい値を超えると移動幅がベース設定の2倍、3倍、4倍と増えていきます。

accels = 10,20,30

例えば上記の様な設定で、ベースが8の場合だとリピートが10を超えたところで16、
20を超えると24、30を超えると32の様に加速していきます。

ラップモード設定

画面端の境界を無くすための設定です。
デフォルトは1でCtrlキーを押しながらカーソルを移動した時のみ、画面端を突き抜けて逆側にカーソルが現れます。

0ラップ動作無し
1Ctrlキー同時押し時のみラップ
2常にラップ

マウスカーソル位置取得

編集
qcop QPE/InputHelper 'position(QString)' ファイル名

を実行する事でマウスカーソルの現在座標をファイルに保存します。(追記)

qcop QPE/InputHelper 'position(QString)' ""

ファイル名として""空文字を指定するとクリップボードに座標を取得します。

マーカー表示

編集
qcop QPE/InputHelper 'where()'

を実行する事で一時的に別のカーソル画像を表示し、カーソル位置を知らせます。

[Marker]
data = カーソルイメージ
hotX = クリックポイント(X座標)
hotY = クリックポイント(Y座標)
timeout = タイムアウト値(ミリ秒単位)

変更したい場合は上記の設定をして下さい。
デフォルトでは500ミリ秒でタイムアウトします。

キーボードマクロ

編集

キーイベントの記録/再生を行う事が出来ます。

KeyHelper Appletのフック機能を使用しますので KeyHelper Applet Version 1.1.3 以降が必要になります。

記録開始/停止

編集
qcop QPE/InputHelper 'record()'

キーボードマクロを記録開始または記録停止します。

KeyHelperのランチャー設定

R = @qcop[TAB]QPE/InputHelper record()

の様な設定を記述しておくと、ボタンで記録開始/停止が行えます。

記録再生

編集
qcop QPE/InputHelper 'play()'

最後に記録したキーボードマクロを再生します。

KeyHelperのランチャー設定

P = @qcop[TAB]QPE/InputHelper play()

の様な設定を記述しておくと、ボタンでマクロの再生が行えます。

ファイルへ記録

編集
qcop QPE/InputHelper 'save(QString)' ファイル名

最後に記録したキーボードマクロをファイルに保存します。
ファイルの内容は1イベント1行で、キーイベント発生に使用するフォーマットで書き込まれます。

クリップボードへ記録

編集
qcop QPE/InputHelper 'save(QString)' ""

上記のファイルへ記録する際と同じメッセージですが、ファイル名に空文字を指定すると
クリップボードに記録されます。
KeyHelperのランチャー機能で使用する場合はVer1.1.5以降を使用して下さい。

ファイルから再生

編集
qcop QPE/InputHelper 'play(QString)' ファイル名

指定したファイルに記録されたキーボードマクロを再生します。

クリップボードから再生

編集
qcop QPE/InputHelper 'play(QString)' ""

上記のファイルから再生する際と同じメッセージですが、ファイル名に空文字を指定すると
クリップボードから再生されます。
KeyHelperのランチャー機能で使用する場合はVer1.1.5以降を使用して下さい。

wait機能

編集

キーイベント発生マウスイベント発生qcopメッセージ送信で共通して使用できる機能です。
操作と操作の間に適当な待ち時間を設けたい場合に使用できます。

wait [待ち時間]

待ち時間はミリ秒単位で指定します。

キーイベント発生

編集

キーイベント入力用PIPE

/var/spool/inputhelper/key

または

qcop QPE/InputHelper 'key(QString)'

にスペース区切りの下記のようなフォーマットの文字列を書き込む事でキーイベントを発生させます。

[キーアクション] [キー名称] [オートリピート] [ローレベルイベント]

または

[キーアクション] [ユニコード] [キーコード] [修飾キー状態] [オートリピート] [ローレベルイベント]

キーアクション

編集
pressキーを押したというイベント
releaseキーを離したというイベント
clickキーを押して離したというイベント

キー名称

編集

A,B,C,Return,Escape等のキー名称qnamespace.hを参照(Qt::Key_XXXのXXXの部分)
修飾キー指定はQAccel::stringToKey()が理解できる形式。処理できないキーが合ったので自前で実装しました。
修飾キー設定は上記と同じキー名称に下記の文字列を付加します。

指定する修飾キー付加する文字列
Shift+SHIFT
Control+CTRL
Alt+ALT

ユニコード

編集

16進数で0x????の様に指定。

キーコード

編集

16進数で0x????の様に指定。

修飾キー状態

編集

16進数で0x????の様に指定。

オートリピート

編集

省略可。省略時は通常。
オートリピートのキーイベントかどうかを指定。

通常0 / false
リピート1/ true / repeat

ローレベルイベント

編集

QWSServer::sendKeyEvent()でキーイベントを発生させるか、QWSServer::processKeyEvent()でキーイベントを発生させるかを決定します。

省略可。省略時はQWSServer::sendKeyEvent()。

QWSServer::sendKeyEvent()0 / false
QWSServer::processKeyEvent()1 / true / low

何が違うかというと、ローレベルイベント(processKeyEvent())として発生させると、
キーボードフィルタを通るのでインプットメソッドやKeyHelper等にキーを渡す事が出来ます。

マウスイベント発生

編集

マウスイベント入力用PIPE

/var/spool/inputhelper/mouse

または

qcop QPE/InputHelper 'mouse(QString)'

に下記のようなフォーマットの文字列を書き込む事でマウスイベントを発生させます。

[マウスアクション] [X座標] [Y座標] [マウスボタン] [修飾キー]

マウスアクション

編集
move移動
pressマウスボタンを押したというイベント
releaseマウスボタンを離したというイベント
clickマウスボタンを押して離したというイベント
toggleマウスボタンの状態を反転するイベント(押された状態の時は離す、離された状態の時は押す)

X座標/Y座標

編集

省略可。省略時は現在のマウスポインタ位置。

どちらかが+または-付きの場合には現在のポインタ位置からの相対位置。
両方とも数値のみの指定の場合は絶対位置。

+0 +0

でもカレント指定になります。

マウスボタン

編集

省略可。省略時は左ボタン。

left左ボタン
right右ボタン
middle中ボタン

修飾キー

編集

省略可。省略時は無し。

shift/ctrl/alt(大文字小文字区別無し)の文字列があるかで判断しているので、
文字列さえ入っていればどのようなフォーマットでも可です。

shift
ctrl
alt
shift+ctrl
shift+alt

の様に指定して下さい。

qcopメッセージ送信

編集

qcopメッセージ入力用PIPE

/var/spool/inputhelper/qcop

または

qcop QPE/InputHelper 'qcop(QString)'

にスペース区切りの下記の様なフォーマットの文字列を書き込む事でqcopメッセージを送信します。
qcopコマンドは実行に時間がかかるので、シェルスクリプト等から使用すると便利です。

[チャンネル名] [メッセージ名] [パラメータ...]

パラメータのデータ型は下記のものに対応しています。

QString文字列
int数値
bool真偽値(1/0もしくはtrue/false)
QStringListカンマ区切りの文字列のリスト

KeyHelperのqcopメッセージ送信機能は同じメッセージなら1アクションで複数送る事が出来るので、
InputHelperを経由する事で違うメッセージを1アクションで送出する事が可能になると思います。

クリップボードへの文字列読み込み

編集

クリップボードに任意の文字列を読み込みます。

qcop QPE/InputHelper 'clip(QString)' 任意文字列

既知の問題

編集

コメント

編集

ご意見、ご要望等はこちらにどうぞ。

Ver0.8.3

編集

Ver0.8.5

編集

Ver0.8.7

編集
press Shift
click Right+SHIFT
release Shift

Ver1.0.0

編集

15800