1.これは何をするものか
これはSAORI規格のDLLです。ゴーストの位置を様々なロジックに従い、特定のウィンドウの矩形と同期させる機能を持ちます。ゴーストをウィンドウに「座らせる」「貼り付ける」「ぶら下げる」といった事を目的として作成されました。
Osuwari.dllはversion1が過去に公開されており、これは機能強化したversion2となります。
Osuwari.dllはversion1が過去に公開されており、これは機能強化したversion2となります。
尚、本DLLはmateriaでは動作しません。SSPもしくはCROWで利用してください。
2.利用法概要
ゴーストの位置の制御を開始する、あるいは制御パラメータを変更するには、START構文を用います。START構文はゴーストの存在する間、何度呼んでも構いません。
ゴーストの位置の制御を開始する、あるいは制御パラメータを変更するには、START構文を用います。START構文はゴーストの存在する間、何度呼んでも構いません。
一般的には、HWNDイベントの際に呼ぶことを推奨します。一度呼べばその際の制御パラメータに従い、DLLがアンロードされるかSTOP構文が呼ばれるまで位置の制御を行うため、呼び出し続ける必要はありません。
お座りを停止させる場合にはSTOP構文を用いてください。一般的にはゴーストの終了と共にDLLがアンロードされるため、STOP構文を利用しなくても問題ないでしょう。
このDLLはオプションが多彩なため構文が少々複雑です。単純に利用する場合は4.記載例を先に見てください。
このDLLはオプションが多彩なため構文が少々複雑です。単純に利用する場合は「5.記載例」を先に見てください。
2.START構文
陥りやすい罠
- shell の descript.txt に seriko.alignmenttodesktop,free と記載するのを忘れないようにしてください。
3.START構文
(1)構文
START構文は以下のパラメータを記載してください。
(START等、この書体で記載されているものは、その通りの文字列を記載する事を示します)
(START等、この書体で記載されているものは、その通りの文字列を記載する事を示します)
(optional)とある項目は、指定しなくても構いません。その場合は前回指定時の値(初回実行時であればデフォルト値)になります。
Argument1 | 制御対象のHWND | 一般的にはHWNDイベントで渡されます。(4.記載例も見てください) |
Argument2 | 追尾対象 | 下記の何れかを記載してください。 ACTIVE:アクティブウィンドウを対象にします FIX:画面全体もしくはワークエリア(画面からタスクバー等の領域を除いた部分、つまり壁紙が見えている部分)を対象にします。 @文字列:ウィンドウタイトルに「文字列」を持つウィンドウを対象にします #数値:ウィンドウハンドルが「数値」のウィンドウを対象にします |
Argument3 | 位置原点 | Argument2で指定したウィンドウの、どこを原点とするかを、下記の何れかで指定してください。 TL:左上隅を原点とします。 TR:右上隅を原点とします。 BL:左下隅を原点とします。 BR:右下隅を原点とします。 |
|Argument4|x座標差分|原点からのx座標のずれを記載してください。
|Argument5|y座標差分|原点からのy座標のずれを記載してください。
Argument1 | 制御対象のHWND | 一般的にはHWNDイベントで渡されます。(5.記載例も見てください) |
Argument2 | 追尾対象 | 下記の何れかを記載してください。 ACTIVE:アクティブウィンドウを対象にします FIX:画面全体もしくはワークエリア(画面からタスクバー等の領域を除いた部分、つまり壁紙が見えている部分)を対象にします。 @文字列:ウィンドウタイトルに「文字列」を持つウィンドウを対象にします #数値:ウィンドウハンドルが「数値」のウィンドウを対象にします |
Argument3 | 位置原点 | Argument2で指定したウィンドウの、どこを原点とするかを、下記の何れかで指定してください。 TL:左上隅を原点とします。 TR:右上隅を原点とします。 BL:左下隅を原点とします。 BR:右下隅を原点とします。 |
Argument4 | x座標差分 | 原点からのx座標のずれを記載してください。 |
Argument5 | y座標差分 | 原点からのy座標のずれを記載してください。 |
Argument6 | 更新間隔 | 位置のチェック間隔をミリセコンドで記載してください*1 |
Argument7 (optional) | オプション | 下記のオプションをスペース区切りで指定してください。複数指定しても、まったく指定しなくてもかまいません。 XMOVE:横方向にゴーストを移動可能にします YMOVE:縦方向にゴーストを移動可能にします NOCLIP:見切れ判定を行いません |
Argument8 (optional) | 位置取得失敗時指定 | Argument2がFIXの場合、対象の矩形取得に失敗した場合、あるいは見切れが発生した場合の位置を指定します。①と②をそれぞれスペース区切りで指定して下さい。指定しなかった場合はDESKTOP CENTERと指定されたものとして扱います。 ①位置取得失敗時の対象 DESKTOP:デスクトップを対象とします。 WORKAREA:ワークエリアを対象とします。 ②位置取得失敗時の仮想矩形 CENTER:デスクトップ又はワークエリアのウィンドウをそのまま用います。 TOP:対象の矩形の上側に仮想ウィンドウを想定します。 LEFT:対象の矩形の左側に仮想ウィンドウを想定します。 RIGHT:対象の矩形の右側に仮想ウィンドウを想定します。BOTTOM:対象の矩形の下側に仮想ウィンドウを想定します。 |
Argument7 (optional) | オプション | 下記のオプションをスペース区切りで指定してください。複数指定しても、まったく指定しなくてもかまいません。 XMOVE:横方向にゴーストを移動可能にします YMOVE:縦方向にゴーストを移動可能にします NOCLIP:見切れ判定を行いません |
Argument8 (optional) | 位置取得失敗時指定 | Argument2がFIXの場合、対象の矩形取得に失敗した場合、あるいは見切れが発生した場合の位置を指定します。①と②をそれぞれスペース区切りで指定して下さい。指定しなかった場合はDESKTOP CENTERと指定されたものとして扱います。
①位置取得失敗時の対象 DESKTOP:デスクトップを対象とします。 WORKAREA:ワークエリアを対象とします。
②位置取得失敗時の仮想矩形 CENTER:デスクトップ又はワークエリアのウィンドウをそのまま用います。 TOP:対象の矩形の上側に仮想ウィンドウを想定します。 LEFT:対象の矩形の左側に仮想ウィンドウを想定します。 RIGHT:対象の矩形の右側に仮想ウィンドウを想定します。 BOTTOM:対象の矩形の下側に仮想ウィンドウを想定します。 |
Argument9 (optional) | 見切れマージン | NOCLIPが指定されていない場合はデスクトップ領域から外れると「見切れ」がおきますが、ここに数値を指定すると、見切れ判定にマージンを持たせることができます。 数値を4つ、空白またはアンダーバー(_)区切りで記載してください。*2 数値の順番は、「左端マージン、上端マージン、右端マージン、下端マージン」になります。 (例)0_50_0_100 と指定すると、上に50ピクセル、下に100ピクセルはみ出すまでは、「見切れ」がおきていないものとして扱います。 |
(2)位置指定について
位置の指定、原点、差分について、下図を参考にしてください。
黄色はx,y差分が両方0の場合の位置になります。(例:位置原点=TR、x差分=-100、y差分=-20とした場合)
[添付]
(3)位置取得失敗時・位置固定時の動作について
以下の場合にはデスクトップかワークエリアを追尾対象とし、Argument8の記載が有効になります。
- 追尾対象がFIXの場合
- 追尾対象が @文字列 あるいは #数値 で、対象のウィンドウが存在しなかった場合
- 追尾対象がACTIVEで、アクティブウィンドウを追尾対象と出来ない場合(原因は色々あります)
- オプションにNOCLIPが指定されておらず、「見切れ」(そのまま追尾すると位置が画面からはみ出すこと)が発生する場合
その際に「代用として」計算される位置と、位置取得失敗時指定の関係については下図を参考にしてください。
以下の点線の矩形を「仮想的な追尾対象ウィンドウ」として、(2)で示した位置計算を行います*3
&attachref(,nolink)
3.STOP構文
なお、デスクトップとは画面全体のこと、ワークエリアとは画面からタスクバー領域を除いたものだと思って大体間違いありません。
4.STOP構文
STOP構文を用いると、DLLの動作を停止できます。以下のパラメータを記載してください。
Argument1以降は記載しても無視されます。
Argument1以降は記載しても無視されます。
4.記載例
5.記載例
(1)HWND取得の記載例
本DLLを利用するためには、位置制御対象のHWNDを知る必要があります。一般的には\0もしくは\1のHWNDを指定することになると思います。\0、\1のHWNDは本体からHWNDイベントで通知されます。
以下に里々でのHWND取得コード例を記載します。このコードによりsakurahwnd変数に\0のHWNDが入ります。
*hwnd
$temp (split,(R0),(sprintf,%c,1))
$sakurahwnd (S0)
(2)「お座り」
ゴーストをウインドウの右上に「お座り」させるための構文例を記載します。
Argument2:ACTIVE(アクティブウィンドウに「お座り」させる)
Argument3:TR(ウィンドウの右上を原点とする)
Argument4:-20(ウィンドウの右上から20ピクセル左に寄った場所を初期位置とする)
Argument5:-90(ゴーストの「座高」が90ピクセルの場合)
Argument6:100(100[ms]毎に更新)
Argument7:XMOVE(横方向に移動可能、見切れあり)
Argument8:BOTTOM WORKAREA(「お座り」失敗時にはワークエリアの下端に座る)
※Argument2をFIXとすると、つねにワークエリア下端に「お座り」します。
(3)「ぶら下がり」
ゴーストをウインドウの左下に「ぶら下がり」させるための構文例を記載します。
Argument2:ACTIVE(アクティブウィンドウに「ぶら下がり」させる)
Argument3:BL(ウィンドウの左下を原点とする)
Argument4:30(ウィンドウの左下から30ピクセル右に寄った場所を初期位置とする)
Argument5:160(ゴーストの「手から下の高さ」が160ピクセルの場合)
Argument6:100(100[ms]毎に更新)
Argument7:(移動できない、見切れあり)
Argument8:TOP WORKAREA(「ぶら下がり」失敗時にはワークエリアの上端にぶら下がる)
※Argument2をFIXとすると、つねにワークエリア上端に「ぶら下がり」ます。
(4)総合例
5.注意事項・制限事項
以下に、里々でゴーストを「お座り」させる例を記載します。
メニューで「デスクトップに座る」「アクティブウィンドウに座る」「座らない」を選択可能とします。
【コア部分】
#spanend
#spanadd
@お座り
#spanend
#spanadd
(osuwari,(A0),(A1),(A2),TR,-50,-97,100,XMOVE,BOTTOM WORKAREA)
#spanend
#spanadd
#spanend
#spanadd
*hwnd
#spanend
#spanadd
$temp (split,(R0),(sprintf,%c,1))
#spanend
#spanadd
$sakurahwnd (S0)
#spanend
#spanadd
>お座り実行
#spanend
#spanadd
#spanend
#spanadd
*お座り実行
#spanend
#spanadd
(call,お座り,STOP,0,0)
#spanend
#spanadd
>タスクバーモード (お座りモード)==1
#spanend
#spanadd
>座らないモード (お座りモード)==2
#spanend
#spanadd
(call,お座り,START,(sakurahwnd),ACTIVE)
#spanend
#spanadd
#spanend
#spanadd
*タスクバーモード
#spanend
#spanadd
(call,お座り,START,(sakurahwnd),FIX)
#spanend
#spanadd
#spanend
#spanadd
*座らないモード
#spanend
#spanadd
#なにもしない
#spanend
#spanadd
【メニュー部分:メニューから各*が呼ばれるものとします】
#spanend
#spanadd
*ウインドウにも座って良いよ
#spanend
#spanadd
:\u\s[10]\h\s[6]はい…\w5…\w5分かりました…\w5…\w5
#spanend
#spanadd
$お座りモード 0
#spanend
#spanadd
>お座り実行
#spanend
#spanadd
#spanend
#spanadd
*タスクバーにだけ座ってて
#spanend
#spanadd
:\u\s[10]\h\s[6]はい…\w5…\w5分かりました…\w5…\w5
#spanend
#spanadd
$お座りモード 1
#spanend
#spanadd
>お座り実行
#spanend
#spanadd
#spanend
#spanadd
*どこに座ってもいいよ
#spanend
#spanadd
:\u\s[10]\h\s[6]はい…\w5…\w5分かりました…\w5…\w5
#spanend
#spanadd
$お座りモード 2
#spanend
#spanadd
>お座り実行
#spanend
#spanadd
【rキー等で里々のリロードを行う場合はその対応が必要になります】
#spanend
#spanadd
*OnSatoriLoad
#spanend
#spanadd
>辞書リロード後お座り (辞書リロードずみ)==1
#spanend
#spanadd
#spanend
#spanadd
*辞書リロード後お座り
#spanend
#spanadd
$辞書リロードずみ 0
#spanend
#spanadd
>お座り実行
#spanend
#spanadd
#spanend
#spanadd
*OnKeyPress
#spanend
#spanadd
>(R0)が押された
#spanend
#spanadd
#spanend
#spanadd
*rが押された
#spanend
#spanadd
$辞書リロードずみ 1
#spanend
#spanadd
$辞書リロード 実行
#spanend
#spanadd
:(5)リロード…\w5…\w5します…\w5…\w5
#spanend
#spanadd
6.注意事項・制限事項
- 本DLLを利用した事による一切の損害の責任を負いません。at your own riskでお願いします。
- osuwari.dllを利用したゴーストを複数同時起動した場合の動作は未定です。
- 現時点では制御対象とできるウィンドウは1つだけです。\0と\1を同時に制御できません*4。
- その他異常な動作をする事があるかもしれません。その際はどんな事でも報告頂けると有難いです*5。
6.更新履歴
- 2005/01/23 version2.0.0.0 初版作成
- 2006/02/15 version2.0.1.0 最前面に行くロジック変更
- (「りむ・えくすとり~む」でのちらつき対策。他に最前面のウィンドウがあると負けやすくなりましたが)
- 2006/02/23 version2.0.2.0 正しく終了できないことがあるバグを修正
7.謝辞
7.謝辞
開発にあたってはえびさわ様のgethwnd.dllソースを大いに参考にさせて頂き、また勝手ながらだいぶ流用させて頂いております。お礼申し上げます。
http://www33.tok2.com/home/ebi/index.shtml 「何かぬるめの...」byえびさわ様
osuwari.dllの動作確認その他について、黒羽龍矢様及びTJ様にご協力頂いております。お礼申し上げます。
http://kurobanetatuya.hp.infoseek.co.jp/genkan.htm 「龍屋」by黒羽龍矢様
http://seriko.nanika.jp/sstpviewer/ 「SSTP-viewer’s street」by TJ様
里々のコード例の元については殊海夕音様にご協力頂いております。お礼申し上げます。
http://yune-kotomi.tarenari.jp/ 「雨上がりの青空を探して。」by殊海夕音様
Chameleon Ponapalt様には作成に当たって様々な助言を頂きました。お礼申し上げます。
http://ssp.shillest.net/ 「SSP (en)BUGTRAQ」by Chameleon Ponapalt様