PLUGIN/2.0/仕様書
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
*PLUGIN/2.0 [#qc60837c]
この文書は未だ開発者版です。予告なくごっそり変更される可...
*はじめに [#cfe1855b]
*設計思想 [#ya9cba74]
-手軽に本体やゴーストとやりとりできるよう改修し、SAORI群...
-プラグイン開発者から実行環境へ負担を移すほうが良いでしょ...
*影響評価 [#d70aa843]
**処理系作者 [#zaf37d9b]
処理系にいろいろ負担を移すことを前提としているので、覚悟...
**プラグイン作者 [#k1deb17e]
新たにコール用にrequestエクスポートを定義するので、PLUGIN...
スクリプトやイベント等のゴーストへの通知が非常に楽になる。
**ゴースト作者 [#t0a2ab9d]
特定のプラグインにたとえ対応していなくてもデフォルトスク...
どうしてもデフォルトスクリプトで雰囲気を壊されたくない場...
**利用者 [#q259082b]
ゴーストごとにちりぢりになった機能群をまとめて扱えるので...
*DLLエクスポート関数群 [#ia8c41b4]
''YAYA/KAWARI as PLUGIN利用者は読み飛ばして下さい''
-extern "C" __declspec(dllexport) BOOL __cdecl load(HGLOB...
-extern "C" __declspec(dllexport) BOOL __cdecl unload(voi...
-extern "C" __declspec(dllexport) HGLOBAL __cdecl request...
☆Borland系C/C++コンパイラでは_loadのように頭にアンダース...
**load [#r47e065c]
読み込み時にコールされます。HGLOBALにDLLの入るディレクト...
GlobalAlloc(GMEM_FIXED,xxx) されたものなのでそのままポイ...
また、必ずDLL側でGlobalFreeしてください。
***返り値 - 常にtrue [#af81f80e]
規定ではロード失敗時にfalseですが、falseを返しても何も処...
**unload [#g4a78ba1]
DLL開放直前(=SSP/CROW終了時+上書きインストール時、DLL_...
return - 常にtrue 規定では開放失敗時にfalseですが、false...
**request [#i9327bff]
ロード・アンロード以外の処理はすべてここで行われます。~
注意事項はloadと同じです。
***返り値 - 下記プロトコル説明のとおり [#xb77b084]
レスポンス用の返り値HGLOBALも、GlobalAlloc(GMEM_FIXED,xxx...
*リクエスト規定 [#e1925f35]
典型的なリクエスト例は以下のとおりです。
GET PLUGIN/2.0
ID: OnGhostChange
Charset: UTF-8
Reference0: 54
NOTIFY PLUGIN/2.0
ID: OnMenuExec
Charset: UTF-8
Sender: 晶子
Reference0: 17982
※改行コード=CR+LF
空行で終了。他のDLL仕様といっしょで、ゼロ終端とは限らない...
PLUGIN/2.0のフォーマットは基本的にSHIORI/3.0仕様に準じて...
イベント識別子のIDヘッダと、任意の数(8以降あり)の追加情報...
Referenceの内容はIDによって変わります。
Reference等の内容に改行等を含めたい場合、また含めなければ...
Senderの内容は、後述するゴースト側からの呼び出し仕様によ...
本体側からコールされた場合はSenderヘッダ自体が消滅するか...
SHIORIのように「本体の名前(SSPとかCROWとか)」が入るわけ...
NOTIFYの方で来た場合、ゴースト側にイベントを送ったりする...
EventヘッダやScriptヘッダを返しても無視されます。~
[NOTIFY]として特記されているもの以外は、GET/NOTIFYの双方...
**version [GET] [#a058879b]
Referenceなし
必ずロード直後に呼ばれ、プラグインの情報を要求してきてい...
Valueヘッダでプラグインのバージョン情報を返してください。~
(例:SwissArmyKnife/1.0)~
この時Charsetヘッダも同時に返すと、以降そのCharsetでリク...
versionリクエストのみレスポンス形式が特殊であることに注意...
これ以外は基本的に下で述べるレスポンス形式に従ってくださ...
**installedplugin [NOTIFY] [#i435e227]
Reference0以降:プラグイン名[\1]プラグインID
インストール済のプラグインを列挙します。
**ghostpathlist [NOTIFY] [#d1e09cbb]
**balloonpathlist [NOTIFY] [#zc68ba96]
**headlinepathlist [NOTIFY] [#rbb697e8]
**pluginpathlist [NOTIFY] [#vb295e7f]
Reference0以降:フォルダのフルパス
読み込み中のそれぞれ(ゴースト/バルーン/ヘッドライン/プラ...
複数フォルダに対応する処理系では、Reference1以降もある可...
**OnSecondChange:秒変化 [#oe49235f]
Referenceなし
**OnGhostBoot:ゴースト起動 [#c1fffcbd]
**OnGhostExit:ゴースト終了 [NOTIFY] [#cac4aeef]
**OnGhostInfoUpdate:シェル変化やHWND変更など、ゴースト情...
Reference0:sakura HWND[\1]kero HWND[\1]3 HWND[\1]4 HWND ...
Reference1:現在のゴースト名 ~
Reference2:現在のシェル名~
Reference3:ゴーストID (Authorized SSTP(Owned SSTP)で送ら...
Reference4:ゴーストのフルパス
リクエストされるHWND群は、まだ構築されていない場合0が渡さ...
Reference3のゴーストIDを識別子として、プラグイン内でゴー...
**OnMenuExec [#a8e3ddb4]
Reference群:上記のゴースト起動・状態変更イベントと同じ形...
プラグインメニュー等からそのプラグインが選択されたことを...
設定ダイアログ・メッセージボックス等を出す、スクリプトを...
**OnInstallComplete : インストール終了 [#nd74d738]
Reference0 : インストールタイプ(\1区切り)~
Reference1 : インストールされたものの名前(\1区切り)~
Reference2 : インストールされたフルパス(\1区切り)
**OnChoiceSelect(Ex)/OnAnchorSelect(Ex)/\qに指定したイ...
下のレスポンス規定を参照してください。
*レスポンス規定 [#e616585d]
レスポンスの例は以下のとおりです。
CRLF区切りはリクエストと同様ですので[CRLF]は省略していま...
PLUGIN/2.0 200 OK
Charset: Shift_JIS
Target: 54
Event: OnResourceLow
EventOption: notify
Reference0: 19
Reference1: 31
Reference2: 65
Script: すくりぷと~
ScriptOption: nobreak,notranslate
※複数起動対応の処理系のみ※
現在起動中のゴーストでTargetに該当するゴーストがいたらそ...
"__SYSTEM_ALL_GHOST__"が指定されている場合は、「起動中の...
該当しない場合、何も指定しない場合は処理系に応じて適当な...
また、後述のゴースト側からの呼び出し仕様で呼ばれた場合は...
※対応していない処理系ではそもそも1体しかありませんのでそ...
**Event/Reference [#mbf52a6b]
EventヘッダとReferenceヘッダはゴースト側に送るイベントで...
これにゴーストが反応しない場合、デフォルトスクリプトであ...
**ScriptOption [#jad1d28c]
ScriptOptionは、スクリプトヘッダ内容にのみ適用されるオプ...
:notranslate|ゴーストのトランスレートを介さない
:nobreak|現在喋っているトークを中断せず最後まで喋った後で...
**EventOption [#mdb80f53]
EventOptionは、Eventヘッダ内容にのみ適用されるオプション...
:notify|指定したイベントをゴーストにnotifyで通知する
Event,EventOption,Reference,Target,Script,ScriptOptionは...
例えばイベントだけ送りたい、デフォルトスクリプトは要らん...
※スクリプトだけ送りたい場合はその逆ですね。
*選択肢フック [#jabb6340]
プラグインのレスポンスでかえってきたスクリプト内、またはE...
(汚い仕様ですが、これがあると選択肢をバルーンに出して設...
*プラグインID [#je8326ae]
プラグインごとに一意につけられるIDです。~
ぶつかる可能性が「極端に低い」63バイトまでの1バイト文字列...
通常、GUID/UUIDと呼ばれるものを使います。
それなりに開発環境をそろえておられる方なら、guidgen.exeの...
ない人はこちら > http://ssp.shillest.net/docs/guid.zip~
処理系側は最低でも63バイトまで受け付ける必要がありますが...
descript.txtのIDエントリに、次のように書いてください。~
例:id,3491996A-B383-4890-B863-5CE258678093
ゴースト側からはプラグイン名以外にこのIDを使ってプラグイ...
意味的には、このIDが同じであるということは、たとえ名前が...
*descript.txt [#o7b7ffaa]
プラグイン特有のエントリのみ記述します。
**secondchangeinterval [#e562faf0]
OnSecondChangeを呼ぶ間隔を指定します。もちろん標準値は1で...
0にするとOnSecondChage自体を送信しません。
**disableAllNotifyCall [#sdd665af]
上記の全てのリクエストを一切停止します。
load/unloadのみでアプリケーションにフックをかけ、他は要ら...
*ゴースト側拡張 [#cc8b7a0a]
**スクリプト拡張 [#s038cc4b]
\![raiseplugin,プラグイン名,イベント,Reference0...]
\![raiseplugin,プラグインID,イベント,Reference0...]
指定したプラグインに指定したイベントを(GETで)送信します。
プラグイン側でTarget指定がない限り(system_any)、プラグイ...
**SHIORIイベント拡張 [#jc374320]
NOTIFY SHIORI/3.0
ID: installedplugin
Reference0以降:プラグイン名[\1]プラグインID
インストール済のプラグインを列挙します。バイト値1区切りで...
プラグインIDは必ず存在するものではありません。
*インストール [#h62cb9f6]
[[INSTALL/1.5>/SSP/仕様書/INSTALL-1.5]]を参照
終了行:
*PLUGIN/2.0 [#qc60837c]
この文書は未だ開発者版です。予告なくごっそり変更される可...
*はじめに [#cfe1855b]
*設計思想 [#ya9cba74]
-手軽に本体やゴーストとやりとりできるよう改修し、SAORI群...
-プラグイン開発者から実行環境へ負担を移すほうが良いでしょ...
*影響評価 [#d70aa843]
**処理系作者 [#zaf37d9b]
処理系にいろいろ負担を移すことを前提としているので、覚悟...
**プラグイン作者 [#k1deb17e]
新たにコール用にrequestエクスポートを定義するので、PLUGIN...
スクリプトやイベント等のゴーストへの通知が非常に楽になる。
**ゴースト作者 [#t0a2ab9d]
特定のプラグインにたとえ対応していなくてもデフォルトスク...
どうしてもデフォルトスクリプトで雰囲気を壊されたくない場...
**利用者 [#q259082b]
ゴーストごとにちりぢりになった機能群をまとめて扱えるので...
*DLLエクスポート関数群 [#ia8c41b4]
''YAYA/KAWARI as PLUGIN利用者は読み飛ばして下さい''
-extern "C" __declspec(dllexport) BOOL __cdecl load(HGLOB...
-extern "C" __declspec(dllexport) BOOL __cdecl unload(voi...
-extern "C" __declspec(dllexport) HGLOBAL __cdecl request...
☆Borland系C/C++コンパイラでは_loadのように頭にアンダース...
**load [#r47e065c]
読み込み時にコールされます。HGLOBALにDLLの入るディレクト...
GlobalAlloc(GMEM_FIXED,xxx) されたものなのでそのままポイ...
また、必ずDLL側でGlobalFreeしてください。
***返り値 - 常にtrue [#af81f80e]
規定ではロード失敗時にfalseですが、falseを返しても何も処...
**unload [#g4a78ba1]
DLL開放直前(=SSP/CROW終了時+上書きインストール時、DLL_...
return - 常にtrue 規定では開放失敗時にfalseですが、false...
**request [#i9327bff]
ロード・アンロード以外の処理はすべてここで行われます。~
注意事項はloadと同じです。
***返り値 - 下記プロトコル説明のとおり [#xb77b084]
レスポンス用の返り値HGLOBALも、GlobalAlloc(GMEM_FIXED,xxx...
*リクエスト規定 [#e1925f35]
典型的なリクエスト例は以下のとおりです。
GET PLUGIN/2.0
ID: OnGhostChange
Charset: UTF-8
Reference0: 54
NOTIFY PLUGIN/2.0
ID: OnMenuExec
Charset: UTF-8
Sender: 晶子
Reference0: 17982
※改行コード=CR+LF
空行で終了。他のDLL仕様といっしょで、ゼロ終端とは限らない...
PLUGIN/2.0のフォーマットは基本的にSHIORI/3.0仕様に準じて...
イベント識別子のIDヘッダと、任意の数(8以降あり)の追加情報...
Referenceの内容はIDによって変わります。
Reference等の内容に改行等を含めたい場合、また含めなければ...
Senderの内容は、後述するゴースト側からの呼び出し仕様によ...
本体側からコールされた場合はSenderヘッダ自体が消滅するか...
SHIORIのように「本体の名前(SSPとかCROWとか)」が入るわけ...
NOTIFYの方で来た場合、ゴースト側にイベントを送ったりする...
EventヘッダやScriptヘッダを返しても無視されます。~
[NOTIFY]として特記されているもの以外は、GET/NOTIFYの双方...
**version [GET] [#a058879b]
Referenceなし
必ずロード直後に呼ばれ、プラグインの情報を要求してきてい...
Valueヘッダでプラグインのバージョン情報を返してください。~
(例:SwissArmyKnife/1.0)~
この時Charsetヘッダも同時に返すと、以降そのCharsetでリク...
versionリクエストのみレスポンス形式が特殊であることに注意...
これ以外は基本的に下で述べるレスポンス形式に従ってくださ...
**installedplugin [NOTIFY] [#i435e227]
Reference0以降:プラグイン名[\1]プラグインID
インストール済のプラグインを列挙します。
**ghostpathlist [NOTIFY] [#d1e09cbb]
**balloonpathlist [NOTIFY] [#zc68ba96]
**headlinepathlist [NOTIFY] [#rbb697e8]
**pluginpathlist [NOTIFY] [#vb295e7f]
Reference0以降:フォルダのフルパス
読み込み中のそれぞれ(ゴースト/バルーン/ヘッドライン/プラ...
複数フォルダに対応する処理系では、Reference1以降もある可...
**OnSecondChange:秒変化 [#oe49235f]
Referenceなし
**OnGhostBoot:ゴースト起動 [#c1fffcbd]
**OnGhostExit:ゴースト終了 [NOTIFY] [#cac4aeef]
**OnGhostInfoUpdate:シェル変化やHWND変更など、ゴースト情...
Reference0:sakura HWND[\1]kero HWND[\1]3 HWND[\1]4 HWND ...
Reference1:現在のゴースト名 ~
Reference2:現在のシェル名~
Reference3:ゴーストID (Authorized SSTP(Owned SSTP)で送ら...
Reference4:ゴーストのフルパス
リクエストされるHWND群は、まだ構築されていない場合0が渡さ...
Reference3のゴーストIDを識別子として、プラグイン内でゴー...
**OnMenuExec [#a8e3ddb4]
Reference群:上記のゴースト起動・状態変更イベントと同じ形...
プラグインメニュー等からそのプラグインが選択されたことを...
設定ダイアログ・メッセージボックス等を出す、スクリプトを...
**OnInstallComplete : インストール終了 [#nd74d738]
Reference0 : インストールタイプ(\1区切り)~
Reference1 : インストールされたものの名前(\1区切り)~
Reference2 : インストールされたフルパス(\1区切り)
**OnChoiceSelect(Ex)/OnAnchorSelect(Ex)/\qに指定したイ...
下のレスポンス規定を参照してください。
*レスポンス規定 [#e616585d]
レスポンスの例は以下のとおりです。
CRLF区切りはリクエストと同様ですので[CRLF]は省略していま...
PLUGIN/2.0 200 OK
Charset: Shift_JIS
Target: 54
Event: OnResourceLow
EventOption: notify
Reference0: 19
Reference1: 31
Reference2: 65
Script: すくりぷと~
ScriptOption: nobreak,notranslate
※複数起動対応の処理系のみ※
現在起動中のゴーストでTargetに該当するゴーストがいたらそ...
"__SYSTEM_ALL_GHOST__"が指定されている場合は、「起動中の...
該当しない場合、何も指定しない場合は処理系に応じて適当な...
また、後述のゴースト側からの呼び出し仕様で呼ばれた場合は...
※対応していない処理系ではそもそも1体しかありませんのでそ...
**Event/Reference [#mbf52a6b]
EventヘッダとReferenceヘッダはゴースト側に送るイベントで...
これにゴーストが反応しない場合、デフォルトスクリプトであ...
**ScriptOption [#jad1d28c]
ScriptOptionは、スクリプトヘッダ内容にのみ適用されるオプ...
:notranslate|ゴーストのトランスレートを介さない
:nobreak|現在喋っているトークを中断せず最後まで喋った後で...
**EventOption [#mdb80f53]
EventOptionは、Eventヘッダ内容にのみ適用されるオプション...
:notify|指定したイベントをゴーストにnotifyで通知する
Event,EventOption,Reference,Target,Script,ScriptOptionは...
例えばイベントだけ送りたい、デフォルトスクリプトは要らん...
※スクリプトだけ送りたい場合はその逆ですね。
*選択肢フック [#jabb6340]
プラグインのレスポンスでかえってきたスクリプト内、またはE...
(汚い仕様ですが、これがあると選択肢をバルーンに出して設...
*プラグインID [#je8326ae]
プラグインごとに一意につけられるIDです。~
ぶつかる可能性が「極端に低い」63バイトまでの1バイト文字列...
通常、GUID/UUIDと呼ばれるものを使います。
それなりに開発環境をそろえておられる方なら、guidgen.exeの...
ない人はこちら > http://ssp.shillest.net/docs/guid.zip~
処理系側は最低でも63バイトまで受け付ける必要がありますが...
descript.txtのIDエントリに、次のように書いてください。~
例:id,3491996A-B383-4890-B863-5CE258678093
ゴースト側からはプラグイン名以外にこのIDを使ってプラグイ...
意味的には、このIDが同じであるということは、たとえ名前が...
*descript.txt [#o7b7ffaa]
プラグイン特有のエントリのみ記述します。
**secondchangeinterval [#e562faf0]
OnSecondChangeを呼ぶ間隔を指定します。もちろん標準値は1で...
0にするとOnSecondChage自体を送信しません。
**disableAllNotifyCall [#sdd665af]
上記の全てのリクエストを一切停止します。
load/unloadのみでアプリケーションにフックをかけ、他は要ら...
*ゴースト側拡張 [#cc8b7a0a]
**スクリプト拡張 [#s038cc4b]
\![raiseplugin,プラグイン名,イベント,Reference0...]
\![raiseplugin,プラグインID,イベント,Reference0...]
指定したプラグインに指定したイベントを(GETで)送信します。
プラグイン側でTarget指定がない限り(system_any)、プラグイ...
**SHIORIイベント拡張 [#jc374320]
NOTIFY SHIORI/3.0
ID: installedplugin
Reference0以降:プラグイン名[\1]プラグインID
インストール済のプラグインを列挙します。バイト値1区切りで...
プラグインIDは必ず存在するものではありません。
*インストール [#h62cb9f6]
[[INSTALL/1.5>/SSP/仕様書/INSTALL-1.5]]を参照
ページ名: