TTBaseのプラグインを書いてみませんか?

このエントリーをはてなブックマークに追加
11
ソフトウェア板のTTBaseスレでは、
TTBaseのプラグインを書いて提供してくれる方を探しています。

便利だからと常駐ソフトを沢山起動していると、
リソース不足やPCの起動時間が大幅にかかったりと、
いいことがありません。
そこで、考案されたのがTTBaseです。
プラグインインターフェイスを持っていて、
使うプラグインを制限することにより、
自分の欲しい機能だけを備えた
自分だけのオールインワンソフトができるのです。

作者K2のサイト
http://web.kyoto-inet.or.jp/people/koyabu/

TTBase本体・プラグイン置き場
http://web.kyoto-inet.or.jp/people/koyabu/TTBase.html

ソフトウェア板スレ
【常駐】TTBaseってどうよ【プラグイン】
http://pc3.2ch.net/test/read.cgi/software/1041375122/

以下にプラグイン仕様書の全文を載せます。
21:03/01/08 21:45
■はじめに
 TTBase は、起動するとタスクトレイに常駐するだけのプログラムです。
 このプログラムを使えるようにするためには、TTBase に読み込まれるプラグ
イン(DLL)が不可欠です。

 この仕様書をよく読んで、プラグインを開発してください。

■コンセプト
 ちょっとした常駐ツールを作りたいとき、通常なら一本アプリを書きますが、
そういうツールが多数に渡ると、起動しているプロセスが多い、リソース消費
量が多くなる、OS の起動が遅くなるなどのあんまりうれしくない現象が増えて
きます。

 そこで、一本だけ常駐アプリを作って、そいつが小物 DLL を呼び出したり、
自分のプロセスの中で常駐させたりするようにすれば、環境にやさしい常駐ア
プリが作れるのではないかというアイデアが TTBase の原点になっています。

 プラグイン SDK を使えば、小物ツールならあっという間に書くことができま
すし、タスクトレイに常駐させる作業や、ホットキーやメニューを与える作業
を簡略化できますので、自分で小物ツールを書くのにも適しています。

 グローバルフックも数種類標準で、プラグインに対して提供しています。面
倒な別 DLL や共有メモリ等を考慮しなくても、WH_SHELL のほぼ全機能と
WH_MOUSE の一部機能を使用することができます。
3IP記録実験:03/01/08 21:45
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。


41:03/01/08 21:46
■開発環境
 プラグインインターフェイスは、作成されたダイナミックリンクライブラリ
(DLL)に対しての動的ロードを使いますので、処理系を選びません。DLL を作
成できる処理系なら、どんなものでも使用できるはずです。

 現在、Delphi(5) 用と VC++(6.0),Borland C++ Free(5.5), C++Builder(5)
のテンプレートが付属されています。
>>1
板違いです。
プログラムの製作を依頼する板ではありません。
当スレの削除依頼をお願いします。
61:03/01/08 21:46
■プラグインの種類
・常駐型と一発起動型
 プラグイン情報構造体の PluginType に、ptAlwaysLoad を設定すると、
常駐型になります。TTBase が起動している間は常にプラグインがプロセス
にロードされます。マウスをフックしたりする場合は、こちらを使ってく
ださい。

 ptLoadAtUse を設定すると、一発起動型になります。ユーザーがコマン
ドを呼ぶか、タイマーによって起動された場合、その都度プラグインは ロー
ドされ、TTBPlugin_Init が呼ばれ、その後 TTBPlugin_Execute が呼ばれ、
最後に TTBPlugin_Unload が呼ばれてプロセスからアンロードされます。

 一発起動型の方が、起動時だけメモリにロードされますから、メモリの
節約になります。その代わり、コマンド実行が若干遅れます。大きなデー
タファイルを読まなければならないようなプラグインの場合は、常駐型に
するべきでしょう。

 TTBPlugin_WindowsHook を使用する場合は、必ず常駐型にする必要があ
ります。

 常駐型を作る場合は、できるだけ WindowsAPI だけを使ったコーディン
グを行い、ファイルサイズを小さくまとめてください。小さい常駐型と大
きい一発起動型の2つのプラグインが連携するように作るのも一つの方法
です。
71:03/01/08 21:47
・コマンドの呼ばれ方の種類
 TTBaseのコマンドの呼び方には、以下の4つがあります。

・ツールメニュー(タスクトレイアイコン左クリックまたは
ホットキー)
・システムメニュー(タスクトレイアイコン右クリックまたはホット
キー)
・ホットキー
・タイマー
・WindowsHook(現状WH_SHELLとWH_MOUSEの一部機能を提供)

 ツールメニュー・システムメニューに出すかどうかは、プラグインコマ
ンド情報構造体の DispMenu に適切な値を設定することで決定されます。
またホットキーの設定メニューの中にコマンドを出すかどうかも、DispMenu
の設定で左右されます。
 タイマーに関しては、PluginCommandInfo の IntervalTime に呼ばれる
時間間隔を設定することで機能するようになります。使わない場合は 0 を
設定します。
 WindowsHook は、面倒な Hook.dll を作成しなくても、TTBase が Hook
用の手続きを踏んで、Plugin 関数を呼んでくれます。現在のところ、
WH_SHELL の全機能と、WH_MOUSE の一部機能が使用できます。
81:03/01/08 21:47
■プラグインが本体に対してどうやって情報を伝えているのか
 TTBase は、起動時に実行フォルダ以下の DLL ファイルを検索し、いったん
ロードします。その後、DLL の TTBPlugin_InitPluginInfo イベントを呼んで、
プラグイン情報構造体(TPluginInfo or PLUGIN_INFO)をプラグインから取得
します。これによって、そのプラグインの名前・種類・コマンド情報をプラグ
インから得ます。その後、常駐型でない場合は、アンロードします。

 常駐型の場合は、Plugin_Init が呼ばれ、そのままプロセスにロードされ続
けます。

 なお、TTBase の起動を速くするため、インストール後、2回目の起動以降は、
TTBase.dat に保存されたプラグイン情報キャッシュを使ってプラグイン情報を
得るようになります。DLL のファイルタイムが更新された場合以外は、そのま
まその情報が使用され続けます。
91:03/01/08 21:48
■定数と構造体定義
 構造体のアライメントは、圧縮してください。

==== [C] =================================================================

/* プラグインのロードタイプ */
#defineptAlwaysLoad0
#defineptLoadAtUse1
#defineptSpecViolation0xFFFF

/* メニュー表示に関する定数 */
#define dmNone 0/* 何も出さない */
#define dmSystemMenu1/* システムメニュー*/
#define dmToolMenu2/* ツールメニュー*/
#define dmHotKeyMenu4/* ホットキー*/
#define dmMenuChecked8/* メニューのチェックマーク */

/* --------------------------------------------------------*/
/* 構造体定義 */
/* --------------------------------------------------------*/
101:03/01/08 21:48
/* コマンド情報構造体 */
typedef struct
{
char*Name;/*コマンドの名前(英名)*/
char*Caption;/*コマンドの説明(日本語)*/
intCommandID;/*コマンド番号*/
intAttr;/*アトリビュート(未使用)*/
intResID;/*リソース番号(未使用)*/
intDispMenu;/*メニューに出すかどうか。*/
/*SysMenu:1 ToolMenu:2 None: 0*/
DWORDTimerInterval;/* タイマー実行間隔[msec] 0: 使用しない*/
DWORDTimerCounter;/* システム内部で使用*/
} PLUGIN_COMMAND_INFO;

/* プラグイン情報構造体 */
typedef struct
{
WORDNeedVersion;/* プラグインI/F要求バージョン*/
char*Name;/* プラグインの説明(日本語)*/
char*Filename;/* プラグインのファイル名(相対パス)*/
WORDPluginType;/* プラグインのロードタイプ*/
DWORDVersionMS;/* バージョン*/
DWORDVersionLS;/* バージョン*/
DWORDCommandCount;/* コマンド個数*/
PLUGIN_COMMAND_INFO*Commands;
/* コマンド*/
/* 以下システムで、TTBase本体で使用する*/
DWORDLoadTime; /* ロードにかかった時間(msec)*/
} PLUGIN_INFO;

111:03/01/08 21:48
==== [Delphi] ===========================================================

// プラグインのロードタイプ
// TPluginInfo.PluginType
ptAlwaysLoad = 0;
ptLoadAtUse = 1;
ptSpecViolation = $FFFF;
// メニュー表示に関する定数
dmNone = 0; // 何も出さない
dmToolMenu = 2; // ツールメニュー
dmSystemMenu = 1; // システムメニュー
dmHotKeyMenu = 4; // ホットキー
dmUnChecked = 0; //
dmChecked = 8; // メニューがチェックされている
dmEnabled = 0; //
dmDisabled = 16; // メニューがグレイアウトされている
DISPMENU_MENU = dmToolMenu or dmSystemMenu;
DISPMENU_ENABLED = dmDisabled;
DISPMENU_CHECKED = dmChecked;
なかなかの糞スレ
131:03/01/08 21:48
// --------------------------------------------------------
// 構造体定義
// --------------------------------------------------------
// コマンド情報構造体
PPluginCommandInfo = ^TPluginCommandInfo;
TPluginCommandInfo = packed record
Name: PChar; // コマンドの名前(英名)
Caption: PChar; // コマンドの説明(日本語)
CommandID: integer; // コマンド番号
Attr: integer; // アトリビュート(未使用)
ResID: integer; // リソース番号(未使用)
DispMenu: integer; // メニューに出すかどうか。
TimerInterval: DWORD; // コマンド実行タイマー間隔[msec] 0で機能を使わない。
TimerCounter: DWORD; // システム内部で使用
end;
PPluginCommandInfoArray = ^TPluginCommandInfoArray;
TPluginCommandInfoArray = array[0..65535] of TPluginCommandInfo;

141:03/01/08 21:49
// プラグイン情報構造体
PPluginInfo = ^TPluginInfo;
TPluginInfo = packed record
NeedVersion: WORD; // プラグインI/F要求バージョン
Name: PChar; // プラグインの説明(日本語)
Filename: PChar; // プラグインのファイル名(相対パス)
PluginType: WORD; // プラグインのロードタイプ
VersionMS: DWORD; // バージョン
VersionLS: DWORD; // バージョン
CommandCount: DWORD; // コマンド個数
Commands: PPluginCommandInfoArray; // コマンド
// 以下システムで、TTBase本体で使用する
LoadTime: DWORD; // ロードにかかった時間(msec)
end;
PPluginInfoArray = ^TPluginInfoArray;
TPluginInfoArray = array[0..65535] of PPluginInfo;
151:03/01/08 21:49
==== [解説] ==============================================================
 使用する構造体は2つあります。
・PLUGIN_INFO(TPluginInfo)
 TTBase にプラグインのプロパティを教えるために、Plugin_SetPluginInfo
関数を使って、この構造体を渡します。一緒にコマンド情報
(PLUGIN_COMMAND_INFO)も渡します。

・WORD NeedVersion (WORD)
 必要とする TTBase プラグイン仕様のバージョンです。現時点では
0 を指定してください。

・char *Name (PChar)
 プラグインの名前です。2バイト文字が使えます。

・char *Filename (PChar)
 プラグインのファイル名を TTBase インストールフォルダからの相
対パスで格納します。

・WORD PluginType
 常駐型か、一発起動型かを指定します。
ptAlwaysLoad: 常駐型
ptLoadAtUse: 一発起動型
ptSpecViolation: 内部使用。この値はセットしてはいけません

 コマンド駆動の機能しか持たないプラグインは、できるだけ
ptLoadAtUse を指定してください。これによって、TTBase の使用メモ
リ量を抑制することができます。
161:03/01/08 21:49
・DWORD VersionMS, VersionLS (DWORD)
 プラグインのバージョンを格納します。
HIWORD(VersionMS): Major Version
LOWORD(VersionMS): Minor Version
HIWORD(VersionLS): Release Number
LOWORD(VersionLS): Build Number
これを推奨しますが、意味付けは強制はしません。

・DWORD CommandCount (DWORD)
 プラグインが持つコマンドの数です。
 コマンドの数は合計で256個以下である必要があります。

・PLUGIN_COMMAND_INFO **Commands
(Commands PPluginCommandInfoArray)
 プラグインコマンド情報構造体へのポインタの配列へのポインタで
す。ここに、必要なメモリを確保してポインタを指定してください。

・DWORD LoadTime (DWORD)
 このメンバーは、TTBase 内部で使用されるだけで、個別プラグイン
には関係ありません。
 そのプラグインの情報取得にかかった時間が msec で格納されます。
値は、QueryPerformanceTimer を使用して取得しますので、分解能は
msec 以下です。
171:03/01/08 21:50
・PLUGIN_COMMAND_INFO(TPluginCommandInfo)
 PLUGIN_INFO の Commands メンバに設定する構造体です。
 コマンドの情報を格納して TTBase に渡します。

・char *Name (PChar)
 コマンドの名前です。半角英数と _ を使用して記述してください。
・char *Caption (PChar)
 コマンドの説明です。メニューなどに表示されます。2バイト文字
も使用できます。
・int CommandID (Integer)
 コマンド番号。コマンド一つに付き一つ、ユニークな値を定義しま
す。
・int Attr (Integer)
 コマンドアトリビュート。現在未使用です。
・int ResID(Integer)
 リソース ID。現在未使用です。
181:03/01/08 21:50
・int DispMenu (Integer)
 TTBase のツール・システムメニューに、このコマンドを表示するか
どうかを指定します。システムメニューには設定系のメニューを、ツー
ルメニューには、そのプラグインの基本機能を割り当てるのが原則で
す。
 また、ホットキー設定ができるかどうかもここに設定します。
 2つ以上の設定を行うときは、和を使ってください。

dmNone: 表示しない
dmSystemMenu: システムメニューに表示
dmTooMenu: ツールメニューに表示
dmHotKeyMenu: ホットキー設定の選択可能コマンドに表示
dmMenuChecked: メニューにチェックマークが入るかどうか

・DWORD TimerInterval (DWORD)
 タイマーによる連続起動コマンド指定です。
 時間を [msec] で設定します。
 タイマー機能を使用しないときは 0 を設定します。

 TTBase 内部では、約 100msec ごとに Timer イベントが発生してい
ます。この分解能でコマンドを実行しますので、あまり細かい時間を
設定しても意味がありません。100msec 単位程度で指定しましょう。

・DWORD TimerCounter (DWORD)
 TTBase 内部で使用します。
191:03/01/08 21:51
■イベントハンドラ

 絶対に定義しなければならないイベントハンドラは、以下のものです。
 DLL で関数の名前をエクスポートしてください。
 エクスポートされていない場合は、その DLL をプラグインとは認識しません。

================================================================
TTBEvent_InitPluginInfo
================================================================
PLUGIN_INFO* WINAPI TTBEvent_InitPluginInfo(char *PluginFilename);
function TTBEvent_InitPluginInfo(PluginFilename: PChar): PPluginInfo; stdcall; export;

 プラグイン情報構造体のメモリを確保し、情報をセットして返します。
 コマンドを持つ場合は、コマンド情報構造体のメモリも確保し、渡します。

 PluginFilename には、そのプラグイン実行ファイル名が、の TTBase インス
トールフォルダからの相対パスとして格納されています。これは、プラグイン
の内部でも使用できますが、プラグイン情報構造体の Filename メンバにメモ
リを確保して、コピーして TTBase本体に返してください。


================================================================
TTBEvent_FreePluginInfo
================================================================
void WINAPI TTBEvent_FreePluginInfo(PLUGIN_INFO *PluginInfo);
procedure TTBEvent_FreePluginInfo(PluginInfo: PPluginInfo); stdcall; export;

 渡されたプラグイン情報構造体のメモリを解放します。
 コマンド個数を見て、コマンド情報構造体のメモリも正確に解放するように
してください。
 このコマンドで解放するのは、TTBEvent_InifPluginInfo 等プラグイン側で
確保されたメモリ領域です。
201:03/01/08 21:51
 以下、必要に応じて定義するイベントハンドラです。


================================================================
TTBEvent_Init
================================================================
BOOL WINAPI TTBEvent_Init(char *PluginFilename, DWORD hPlugin);
function TTBEvent_Init(PluginFilename: PChar; hPlugin: DWORD):
  BOOL; stdcall; export;

 プラグインの初期化関数です。ロードされた後、最初に呼ばれます。
 TTBase のプラグイン情報キャッシュ機構のため、TTBEvent_InitPluginInfo
が毎回呼ばれるわけではありません。そこで、PluginFilename を使って、DLL
は自分のファイル名を知ることができます。
 hPlugin は、TTBase がプラグインを識別するための識別コードです。一部の
API 関数で使用するので、グローバル変数等に保存するようにしてください。

 初期化が成功したら、TRUE を返します。

================================================================
TTBEvent_Unload
================================================================
void WINAPI TTBEvent_Unload(void);
procedure TTBEvent_Unload; stdcall; export;

 プラグインがアンロードされるときに呼ばれます。

211:03/01/08 21:51
================================================================
TTBEvent_Execute
================================================================
BOOL WINAPI TTBEvent_Execute(int CommandID, HWND hWnd);
function TTBEvent_Execute(CommandID: Integer; hWnd: THandle): BOOL; stdcall; export;

 コマンドが、何らかの形で呼ばれる場合、この関数が呼ばれます。

 プラグイン情報構造体で、CommandCount を 1 以上に設定した場合は、この
ハンドラは必ず必要です。

 CommandID には、そのコマンドの ID が入っています。
 hWnd には、TTBase が持っている NotifyWindow (表示はされませんが、メ
ッセージ処理をするために必要です)のウィンドウハンドルが格納されていま
す。

 正常に処理を終了したら TRUE を返すようにしてください。
 この関数が呼ばれるのは、以下の条件です。
・TTBaseのツールメニューかシステムメニューが選択された
・ユーザーが設定したホットキーからコマンドが呼ばれた
・タイマー型のコマンド(PluginInfo の IntervalTime が 1 以上に設定
されているコマンド)の場合、設定時間ごとに自動的に呼ばれる。
221:03/01/08 21:51
================================================================
TTBEvent_WindowsHook
================================================================
void WINAPI TTBEvent_WindowsHook(UINT Msg, DWORD wParam, DWORD lParam);
procedure TTBEvent_WindowsHook(Msg: Word; wParam: DWORD; lParam: DWORD); stdcall; export;

 TTBase本体が、Hook 用の DLL を持っています。これを使って、Hook で得ら
れるイベントを、プラグインでも使うことができます。

 現在サポートされているのは、ShellHook(WH_SHELL) と、MouseHook(WH_MOUSE)
の2つがあります。

[WH_SHELL]
 コールバック関数で得られる nCode ごとに、TTB_HSHELL_ で始まるユーザー
定義メッセージが定義されています。これはテンプレートの MessageDef.pas
を参照してください。
 このメッセージ番号が Msg に設定されます。またコールバック関数で得られ
る wParam と lParam も得ることができます。

[WH_MOUSE]
 コールバック関数で得られる nCode が HC_ACTION の場合だけ通知されます。
 MsgにTTB_HMOUSE_ACTIONが設定されます(MessageDef.pas参照)。
 wParam にマウスメッセージの種類、lParam にそのマウスイベントが起こっ
たウィンドウのハンドルが設定されます。実際の WH_MOUSE では、lParam に
MOUSEHOOKSTRUCT へのポインタが設定されますが、これをすべてプラグインで
受け取ることはできません。ウィンドウハンドルのみが提供されています。
231:03/01/08 21:53
■API 関数

================================================================
TTBPlugin_GetPluginInfo
================================================================
extern PLUGIN_INFO* (WINAPI *TTBPlugin_GetPluginInfo)(DWORD hPlugin);
TTTBPlugin_GetPluginInfo = function (hPlugin: DWORD): PPluginInfo; stdcall;

 hPlugin で指定したプラグインのプラグイン情報構造体を取得します。取得
時点で、TTBase が管理している情報が引き出せます。メニューのチェック状態
などを得るのに使います。

 この API 関数で取得した (PLUGIN_INFO *) 型のポインタは、
TTBPlugin_FreePluginInfo 関数で解放する必要があります。

================================================================
TTBPlugin_SetPluginInfo
================================================================
extern void (WINAPI *TTBPlugin_SetPluginInfo)(DWORD hPlugin,
PLUGIN_INFO *PluginInfo);
TTTBPlugin_SetPluginInfo = procedure (hPlugin: DWORD;
PluginInfo: PPluginInfo); stdcall;

241:03/01/08 21:53
 hPlugin で指定したプラグインのプラグイン情報構造体を再設定します。プ
ラグイン側から動的にプラグイン情報構造体の内容を変更したいときに使用し
ます。
 PluginInfo は、新たにメモリを確保して使用してください。
TTBPlugin_GetPluginInfo で取得したものを使用してはいけません。

(プラグインテンプレートには、ユーティリティルーチンとして、
CopyPluginInfo 関数が用意されているので、これで TTBPlugin_GetPluginInfo
関数で得たプラグイン情報構造体をコピーして使用するようにします。もちろ
ん TTBPlugin_GetPluginInfo を使用しないでプラグイン情報構造体を作成して
も構いません)

 この関数が使用されると、TTBase は、渡されたプラグイン構造体をコピーし
て、内部で使用するようになります。そのため、プラグイン側で確保した
PluginInfo は、プラグイン側で明示的に解放するようにしてください。
251:03/01/08 21:53
================================================================
TTBPlugin_FreePluginInfo
================================================================
extern void (WINAPI *TTBPlugin_FreePluginInfo)(PLUGIN_INFO *PluginInfo);
TTTBPlugin_FreePluginInfo = procedure (PluginInfo: PPluginInfo); stdcall;

 TTBase 側で確保された (PLUGIN_INFO *) 型のメモリを解放させます。
 TTBPlugin_GetPluginInfo で取得したメモリは、この API 関数を使って解放
してください。

================================================================
TTBPlugin_SetMenuProperty
================================================================
extern void (WINAPI *TTBPlugin_SetMenuChecked)(DWORD hPlugin,
int CommandID, DWORD ChagneFlag, DWORD Flag);
TTTBPlugin_SetMenuChecked = procedure (hPlugin: DWORD; CommandID: Integer;
ChangeFlag, Flag: DWORD); stdcall;

 hPlugin で指定したプラグインの、CommandID で示されるコマンドの、メニ
ュー関係の属性を変更します。
261:03/01/08 21:53
ChangeFlag: 変更する属性の種類を指定します。複数のフラグを和で指定する
こともできます。
DISPMENU_MENU:システムメニュー・ツールメニューの種類
変更します。
このフラグをセットした時に dmToolMenu、
dmSystemMenu の両方を指定しないと、メニ
ューに表示されません。
DISPMENU_ENABLED:メニューをグレーアウトするかどうか指定
できます。
DISPMENU_CHECKED:メニューにチェックを入れるかどうかを指
定できます

Flag:フラグには、以下の値の和として指定します。
dmNone = 0; // 何も出さない
dmToolMenu = 2; // ツールメニュー
dmSystemMenu = 1; // システムメニュー
dmUnChecked = 0; //
dmChecked = 8; // メニューがチェックされている
dmEnabled = 0; //
dmDisabled = 16; // メニューがグレイアウトされている

ChangeFlag との組み合わせで、効果を発揮するかどうかが決まり
ます。たとえば、DISPMENU_ENABLED だけを指定している時、
dmToolMenu などを Flag にセットしても、効果を発揮しません。
271:03/01/08 21:54
================================================================
TTBPlugin_GetAllPluginInfo
================================================================
extern PLUGIN_INFO** (WINAPI *TTBPlugin_GetAllPluginInfo)(void);
TPlugin_GetAllPluginInfo = function : PPluginInfoArray; stdcall;

 TTBase に読み込まれているすべてのプラグインのプラグイン情報構造体への
ポインタの配列へのポインタを返します。

 最後のプラグイン情報構造体へのポインタの次の配列要素には、NULL が格納
されていますので、これで最後を判定してください。

================================================================
TTBPlugin_FreePluginInfoArray
================================================================
extern void (WINAPI *TTBPlugin_FreePluginInfoArray)(PLUGIN_INFO **PluginInfoArray);
TPlugin_FreePluginInfoArray = procedure (PluginInfoArray: PPluginInfoArray); stdcall;

 TTBPlugin_GetAllPluginInfo で取得した、PLUGIN_INFO_ARRAY
(PPluginInfoArray) を解放します。

281:03/01/08 21:54
以上全文です。

誰か作っていただけないでしょうか。
291:03/01/08 22:02
ちなみに、今ソフトウェア板で出ている要望は、

メモリ掃除
ランチャー
「ぴたすちお」のプラグイン化(http://www8.plala.or.jp/ara3/pita/index.htm
デスクトップアイコンの整列
マウスジェスチャ

です。
301:03/01/08 22:04
・・・と、クリップボード拡張機能もありました。
>>405
またポリタンコですか
あいつどうしようもないですね。
>>638
そのキャップだけはいろんな意味で許せん。僕によこせ
33IP記録実験:03/01/09 02:31
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
>>44
師匠、お疲れ様です。
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 138720人 発行日:2003/1/9

年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。

そんなわけで、年末に予告したIP記録ですが実験を開始しています。

「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
↑同上
IP記録で今までのようにカキコできない香具師はいくじなし
fDUMwxQmガンガレ
>>162
掛かってたら内容教えて
まぁ無いだろうけど
「1月危機」
をコソーリ期待したのは漏れだけ?
>>443
アレだ、訴訟を増やそうとしてる工作員の仕業だ。



そうだと願いたい。



・・・。
>>926
YAHOOと2chは基本的に性格が違うだろ。
例え両方ともIP取ろうとしてもだ。

私見ですが、気になったところだけ。
>スレタイのありなしは・・・私は昔、住民さんの重複依頼を防ぐ為に入れてましたけどね。
まとめに含めるなら、改行したほうが見やすいでしょうね。
簡単に削除に頼らせない等といった依頼人のスキル向上を考えれば、
スレタイ無しでも良いような気はしますが。

>・圧縮やなんかでdat落ちした分を省いた=若干落ちてます。正解です。
規定値によるdat落ち(sportsなら600→500)で、大量に落ちた時でもなければ
まとめ直さなくても大丈夫かと。
どんなにまとめを理想型に近づけても、実際に削除人さんが見るまでには
時間差もあっていくつかdat落ちしてたりするものでしょうから。

>・まとめが好きで好きでたまらないまとめ大好きっ子だった=概ね同意です。
それを楽しめるようであればなによりだと思います。

>お指導をお待ちしております。m(_ _)m。
お母さんを大切にしてあげて下さいね。
やだねったらやだね
IPが理解不能な厨には効果ない罠。
逮捕されるようなしょうもないネタ振らなきゃいいだけの話だろ?
↑こいつは偽者。
一見まともなことを言って見てもアシはつくよ>yQzsmkAx
良かったらさんもマァヴさんも
おいらの立てたスレに遊びに来てね。

ある意味、さようなら2ch、、、懐かしき日々よ。
http://live2.2ch.net/test/read.cgi/news/1042196915/
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 139038人 発行日:2003/1/10

なにやら、連日メルマガだしてるひろゆきです。

そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。

重くなって落ちたりしてもご愛嬌ってことで。。。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
インカ皇帝ですか?
それ忘れてたなぁ。大丈夫だろうか?
めがびに移転すれば?
良かったらさんもマァヴさんも
おいらの立てたスレに遊びに来てね。

ある意味、さようなら2ch、、、懐かしき日々よ。
http://live2.2ch.net/test/read.cgi/news/1042196915/
qb鯖の中の人は大変だな。
↑こいつは偽者。
今日始めて1chtvってやつ見たけど2ちゃんねるのパクリじゃん。完全に。
あっ書けた。さっきはダメだったのに
特に犯罪絡みや名誉毀損な発言ではないけど
繰り返し自作自演でスレ荒らしてる人は
質の低い書き込みだと思うんだけど
それは問題なし?
IPアドレスは番号みたいなもの。
ホストは、住所みたいなもの。
IPは郵便番号みたいなもの。
両方ばれるとヤバイネ!!
実況で矢印やってたらアク禁にするぞとか脅された
IP記録されてるとただの煽りかどうか区別するのも難しいので卒業してしまった
フロアからの
「西村さんに何かあった時は、『2ちゃんねる』はどうなるのですか?」
との質問には
「今月10月分はもう支払いが済んでいますので大丈夫ですが、
もしも何かがあったなら、潰れてしまう」
とおっしゃっていました。
IPって、
抜かれる
もの?
ひろゆきが怒ってるのか?信じがたいな。
http://sports3.2ch.net/wres/ はスレが沢山あって
html化に難儀しております。

bbs.cgi もとめます。
66山崎渉:03/01/13 18:40
(^^)
5
68山崎渉:03/01/16 03:18
(^^)
69山崎渉:03/01/23 22:08
(^^)
やだねったらやだね
IP記録で今までのようにカキコできない香具師はいくじなし
72デフォルトの名無しさん:03/04/10 04:46
上げてみる。
73山崎渉:03/04/17 15:33
(^^)
74山崎渉:03/05/28 13:26
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
今日始めて1chtvってやつ見たけど2ちゃんねるのパクリじゃん。完全に。
76デフォルトの名無しさん:03/07/01 23:09
ボリュウムを変更でミュートしか出ないのはおいらだけですか?
>>76
iniファイルがないせいかと。

ダウンロードしたファイルの中に、ChVol.ini.sampleってのが
あると思うけど、こいつをChVol.iniにリネームすれば他のも出てくると思う。
78デフォルトの名無しさん:03/07/03 21:24
>77
それが、ini作ってもでない…
iniの中をいじくってもでない。
なんでだろ
>>78
とりあえず、TTBaseのバージョンと、ChVolのバージョン。
あとは、TTBase以下にどのようにプラグインを置いているかを
教えてもらえれば調査しますです。
8079:03/07/04 11:56
あ。iniファイルの中身もさらしてくれると嬉しい。
8176:03/07/04 15:57
>80
WinXp home 2600.xpsp2.030422-1633 : SP1
TTBase 1.0.14.18

アクティブウインドウを動かす1.22.0.10
ボリュームを変更1.12.0.4
RedirectWheel0.0.0.2

iniの中身

[Setting]
VolComponentType=4

[Command]
UpDown0=5
Set0=10
Set1=20
Set2=30
Set3=40
Set4=50
Set5=60
Set6=70
Set7=80
Set8=90
Set9=100

こんなとこです TClock2ch 03.05.31 併用が問題?
8279:03/07/04 16:32
>>81
TClock2ch使ってるなら、TClockもTTBase版を使えばいいのに。

まぁ、それはともかく。
こっちでは再現しないです。
ChVol.dllとChVol.iniが同じフォルダにないから、ってことはないですよね?



う〜む。わからん。。。
8376:03/07/04 17:38
>82
> ChVol.dllとChVol.iniが同じフォルダにないから、ってことはないですよね?
そんなことはないです。
で、あきらめてTTBase版Tclock2chを入れました。
84山崎 渉:03/07/15 10:13

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
85山崎 渉:03/08/02 02:54
(^^)
これイイ!
87山崎 渉:03/08/15 18:01
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
88デフォルトの名無しさん:03/11/25 20:40
あげぽっぽ〜
保守