Triple-9 for Windows

Ｔｒｉｐｌｅ－９　ｆｏｒ　Ｗｉｎｄｏｗｓ

目　次

概要

動作環境、インストール

チュートリアル

タイミングの調整

高度な使い方

起動方法

操作手順

言語レファレンス

Triple-9ランチャー

トラブルシューティング

ユーザ登録について

サポートについて


概要

Ｔｒｉｐｌｅ－９　ｆｏｒ　Ｗｉｎｄｏｗｓ

アプリケーションの操作を自動化するツールで、次の特長があります。

■ ほとんどの操作(キーボード／マウス操作、メニュー選択、ボタン操作)をシミュレートできます。

■ Pascalに準じた強力なスクリプト言語を備えています。

■ スクリプトは自動で生成できます。対象アプリケーションを普通に操作するだけです。

■ エディットコントロールやチェックボックスなどの各コントロールの状態を調べたり、設定したりできます。

■ ActiveXに対応しています。OLEオートメーションに対応したExcelやWordが備えるVBAの機能をほとんどそのまま利用できるのはもちろん、OLEオートメーション非対応のActiveXも操作できます。

■ 画面イメージを保存したり比較したりできます。

■ 独自にDLLを作成して機能を拡張することができます。

■ DDEにより他のアプリケーションと通信できます。

■ コンパイルしてEXEファイルを生成できます。生成した実行ファイルは自由に配布できます。

アプリケーションの操作の指示は、実際の操作を記録することで簡単に作成できます。 それを元にPascalに準じた強力なスクリプト言語で編集することにより、極めて柔軟性の高い記述ができます。 単に自動実行するだけでなく、アプリケーションの状態を確認しながらきめこまかく制御できます。 たとえば、エディットコントロールのテキストを取得したり、ラジオボタンの状態を調べ、その内容によってその後の処理を変える、 警告メッセージを出す、ログファイルに書き込むなどといったことができます。 これらの機能を利用して、アプリケーションの定型的な操作やテストを自動化する強力なツールとして利用できます。


動作環境、インストール

動作環境
Windows95/98/Me/NT4.0/2000/XP/Vista(※)

※ Windows Vista で動作させる場合は制限があります。
■ Vistaでアプリケーションの操作を記録する場合は、ユーザーアカウント制御(User Account Control)を無効にする必要があります。
さもなければ、「アクセスが拒否されました」というエラーになります。
これは、Vistaでは、Triple-9のようなUIを自動操作するアプリケーションには署名が必要なのですが、そのための認証を個人で取得するのは困難なためです。
申し訳ありませんが、Vistaでアプリケーションの操作を記録したい場合は、一時的にUACをOFFにし、終わったらまた元に戻すようにしてご対応ください。
■ 管理者権限で動作しているアプリケーションを再生させる場合は、Triple-9も管理者権限で起動する必要があります。さもないと一部の再生が無視されます。
これは、Vistaでは権限の低いプロセスから高いプロセスへのSendMessageが無視されるためです。
■ Vistaで記録開始すると、マウスのクリックやキーボード入力ができなくなる場合があることが確認されています。詳しくは、トラブルシューティングを参照してください。

インストール
このHelpファイルを読まれているということは、既にインストール済みと思われますが、念のため以下にインストール手順を記します。

■ インストール
ダウンロードしたTriple9.exeを実行するとインストーラが起動します。後は、インストーラの指示にしたがってください。

■ アンインストール
ダウンロードしたTriple9.exe をもう一度実行してください。もし保存していなかった場合は、再度ダウンロードして実行してください。


アプリケーションの操作を記録する(その1)

まず最初のステップとして、アプリケーションを実行しその操作を記録しましょう。 Triple-9を起動し、 [image] ボタンを押してください。すると次の画面が現れます。

[高水準記録]がチェックされていることを確認してください。 その上で、[アプリ起動]にチェックを入れた後、[開始]ボタンを押してください。 [ファイルを開く]ダイアログボックスで、実行したいアプリケーションを選択すると、そのアプリケーションが起動された上で、操作の記録が開始されます。 記録が開始されると同時に、画面右上隅に画面

が現れます。 記録を終了するには、右側の停止ボタン [image] を押してください。 記録が停止すると、下記のような記録データが表示されます。これは、次の操作を行った例です。
1) ワードパッドを起動する。
2) テキスト「ABC」を入力する。
3) メニューの[ヘルプ - バージョン情報]を選択する。
4) バージョン情報ダイアログボックスで[OK]ボタンを押す。
5) メニューの[ファイル - ワードパッドの終了]を選択する。
6)「文書は変更されています。保存しますか」の問いに対し、ボタン[はい]を押す。
7) [ファイル名をつけて保存]ダイアログボックスで、[保存]ボタンを押す。

この後、 [image] ボタンを押すと、同じ操作を再現させることができます。

var h0, h1, h2, h3, h4: Integer;
begin
    Execute('C:\Program Files\Accessories\Wordpad.exe', 30000);
    h0 := FindWindow('WordPadClass', '文書 - ワードパッド', 5000);
    SetFGWindow(h0);
    h1 := Window[h0].RICHEDIT[0];
    SetFocus(h1);
    SendKeys('ABC漢字{ENTER}');
    ClickMenu(h0, 'ヘルプ(&H),バージョン情報(&A)...');
    h2 := FindPopup('WordPadのバージョン情報', 5000);
    PushButton(h2, 'OK');
    ClickMenu(h0, 'ファイル(&F), ワードパッドの終了(&X)');
    h3 := FindPopup('WordPad', 5000);
    PushButton(h3, 'はい(&Y)');
    h4 := FindPopup('ファイル名を付けて保存', 5000);
    PushButton(h4, '保存(&S)');
end;


メニューを選択する、ボタンを押す

サンプルスクリプト：MenuBtn.sc9

次の例として、アプリケーションのメニューを実行する、ボタンを押すという基本操作をプログラミングしてみましょう。 始める前にエクスプローラを起動しておいてください。

まずTriple-9を起動してください。最初に現れた画面でボタン [image] を押すと、スクリプト編集用の空の領域が現れます。

スクリプト編集領域に次のコードを入力してください。 ただし、各行 // 以降はコメントですので、必ずしも入力しなくても構いません。
var W, H: Integer;　// 変数を定義
begin
    // エクスプローラというタイトルを持つウィンドウを捜す
    W := FindWindow('', 'エクスプローラ');
    // 見つかったウィンドウを前面に持ってきてアクティブにする
    SetFGWindow(W);
    // メニュー「ヘルプ(H)」、サブメニュー「バージョン情報(A)...」を実行する
    ClickMenu(W, 'ヘルプ(&H),バージョン情報(&A)...');
end;
入力したら、次にボタン [image] を押してください。 上記のコードが実行され、エクスプローラのバージョン情報のダイアログボックスが現れるはずです。 OKボタンを押して、ダイログボックスを閉じてください。

次に行を追加し、以下のようなコードにしてください。
var W, H: Integer;
begin
    W := FindWindow('', 'エクスプローラ');
    SetFGWindow(W);
    ClickMenu(W, 'ヘルプ(&H),バージョン情報(&A)...');
    PushButton(0, 'OK');　// ダイアログボックスのボタン「OK」を押す
end;
このコードでボタン [image] を押して実行すると、今度は一瞬ダイアログボックスが開いてからすぐに閉じるはずです。


マウス、キーボードを操作する

サンプルスクリプト：KeyMouse.sc9

SendKeysという組込み関数を使って、キーボードやマウス入力をシミュレートできます。 スクリプト編集領域に次のコードを入力してください。
var H: Integer;
begin
    H := FindWindow('WordPadClass', 'ワードパッド');
    SetFGWindow(H);
    Origin(H);
    SendKeys('This is a sample Text.{ENTER}{122:57}{LCLK}');
end;
前もってワードパッドを起動しておいてから、上記のコードを実行してください。
「This is a sample Text.」というテキストが入力されてから印刷プレビューが表示されるでしょう。 SendKeysの引数の中の通常文字は、そのままキーボードから入力されたかのように動作します。 { }で囲まれたものは特殊な動作をします。{ENTER}は、ENTERキーを意味します。 {122:57}は、マウスをX位置=122, Y位置=57に移動させます。{LCLK}はマウスの左ボタンをクリックします。 Origin(H)は、マウスの位置指定において、ワードパッドのウィンドウの左上隅を原点にすることを指示します。 その他の特殊文字については、SendKeysの説明を参照してください。


アプリケーションの操作を記録する(その2)

サンプルスクリプト：Record.sc9

「アプリケーションの操作を記録する」その(1)では高水準記録を行いました。 これは、メニューの選択やボタンの押下など、アプリケーションを動作させる主要な操作をコンテキストを認識した上で記録するモードです。 アプリケーションに実質の影響を与えない操作、たとえばマウス移動を逐一記録することはしません。 しかし、お絵描きツールなどで、マウスの軌跡にしたがって曲線を描く場合には、すべての操作を物理的に記録する必要があります。この例を次にやってみます。 事前に「ペイント」を起動しておいてください。Triple-9の [image] ボタンを押し、次の画面を表示させます。

ここで[マウス移動操作を記録]にチェックを入れてください。 次に「参照」ボタンを押しカーソルが [image] になったらペイントのところに持っていって左ボタンをクリックしてください。 「基準ウィンドウ」とあるところのデータが変化するはずです。 これは、これから記録するデータに中のマウスに関するデータは、「ペイント」のウィンドウの左上隅を原点とするという意味です。 この原点を対象アプリケーションのクライアント座標系にすることによって、アプリケーションのウィンドウをどこに移動しても作成したTriple-9のコードはうまく動作するようになります。
以上の準備ができたところで、「開始」ボタンを押してください。 「ペイント」の画面で自由に絵を描いてください。そして停止ボタンを押してください。記録が終了し、Triple-9の下部の領域に記録されたデータが表示されます。
var H: Integer;
begin
    H := FindWindow('', 'ペイント');
    Origin(H);
    SendKeys('(ここにマウス操作が記録される)');
end;


コントロールの状態を調べる

サンプルスクリプト：CtrlInfo.sc9

Triple-9は、エディットコントロールやチェックボックスの状態を調べることもできます。 その例として、次にエディットコントロールにある現在のテキストを取得してみましょう。

まずワードパッドを起動してください。 そして、Triple-9のボタン [image] を押してください。 マウスカーソルの形が [image] に変わります。 カーソルをワードパッドのフォント名のコンボボックスの位置に持ってきて左ボタンを押してください。 すると、次のダイアログボックスが表示されます。

特定のコントロールを識別するには複数の方法がありますが、ここではクラス名を使用します (その他の方法については、コントロールの指定を参照してください)。 Triple-9のコード編集領域で、次のように入力してください。
var H, C: Integer;
begin
    H := FindWindow('WordPadClass', 'ワードパッド');
    C := Window[H].
上記まで入力したところで、「クラス」というラベルの右側にあるボタンを押してください。 クラス名によるコントロールの識別名が挿入されます。続けて、以下のように入力してください。
var H, C: Integer;
begin
    H := FindWindow('WordPadClass', 'ワードパッド');
    C := Window[H].AfxControlBar['標準'].AfxControlBar['書式設定'].ComboBox[0].Edit[0]
    Message(MB_OK, GetText(C));
end;
これで完成です。 を押して実行してみましょう。 コンボボックスにある現在のフォント名称、たとえば「ＭＳゴシック」というテキストが表示されるはずです。

上記のコードは次の意味を持っています。
Window[H] | : ハンドルがHであるウィンドウ
AfxControlBar['標準'] | : Window[H]の子ウィンドウで、クラス名がAfxControlBarであるもののうち「標準」というタイトルを持つもの
ComboBox[0] | : ComboBoxというクラスの1番目のウィンドウを示す
Edit[0] | : Editクラスの1番目のウィンドウ
GetText(C) | : コントロールCのテキストを得る


画面イメージを保存する、比較する

サンプルスクリプト：Image.sc9

実行途中の画面イメージを保存したり、保存していたイメージと比較したりできます。 このためには、組込み関数 SaveImage, CompareImageを使います。次のコードに例を示します。
var W, H: Integer;
    Flg: Boolean;
begin
    ChDir('\Test');
    W := FindWindow('', 'エクスプローラ');
    if Message(MB_YESNO, 'はい = イメージをセーブする、いいえ = 比較する') = IDYES then begin
        SetFGWindow(W);
        Flg := SaveImage('Sample.bmp', W);
        if Flg then Message(MB_OK, 'セーブしました')
        else Message(MB_OK, 'セーブに失敗しました');
    end
    else begin
        SetFGWindow(W);
        H := CompareImage('Sample.bmp', W, 0, 0, 0, 0, True);
        if H = 1 then Message(MB_OK, 'イメージは一致しています')
        else if H = 0 then Message(MB_OK, 'イメージは異なっています')
        else if H < 0 then Message(MB_OK, Format('Any other error: %d', H));
    end;
end;
このコードを実行し最初の質問に「はい」と答えるとビットマップイメージを保存します。 「いいえ」と答えると以前保存していたファイルと比較します。 イメージが異なっていた場合、両者のXORをとったイメージが表示されますので、どの部分が異なっているか視覚的に確認できます。


Excelのシートにアクセスする

Triple-9は、ExcelやWordなどのVBAをほぼそのまま利用できます。 次の例は、Excelファイルを新規作成し、セル(1,1)に値を設定するものです。 詳しくは、OLEオートメーションを参照してください。
var V: OleObject;
begin
    V := CreateOleObject('Excel.Application');
    V.Visible := True;
    V.Workbooks.Add;
    V.ActiveSheet.Cells[1,1] := 'Sample';
    V.Workbooks[1].Close(True, 'Sample.xls');
    V.Quit;
end;


ActiveXを含むアプリケーションを自動化する

Triple-9は、ActiveXを含んでいるアプリケーションを自動化することも可能です。

例: グリッドコントロール(ActiveX)を含んだアプリケーション

Triple-9は、ActiveXが公開しているプロパティやメソッドにアクセスすることができます。
ただしその場合、一般のアプリケーションでは、起動するときにComSpyから起動する必要があります。
ComSpyからアプリケーションを起動すると、ActiveXコントロールがサポートしているCOMインタフェースをTriple-9からアクセスできるように公開できます。 Triple-9は、GetActiveOleObject関数を用いて現在動作しているActiveXコントロールのインタフェースを取得すると、そのプロパティやメソッドを操作できるようになります。 詳細は、

ComSpyの使い方
OLEオートメーション

を参照してください。

(注) Microsoft WORDやEXCEL, Internet Explorerのように元々OLEオートメーションを使って外部から操作できるように作られているアプリケーションの場合は、特にComSpy経由で起動しなくても参照可能です。 Excelのシートにアクセスするを参照してください。

例:　MSFlexGridを参照するスクリプト
var V: OleObject;
    Str: String;
begin
    V := GetActiveOleObject('MSFlexGridLib.MSFlexGrid', 0);
    V.Row := 1;
    V.Col := 1;
    Str := V.Text;　　　　// 1行1列のセルの文字列を取得する
    Message(MB_OK, Str);
end;


一連のスクリプトをスケジュールする

複数のスクリプトを連続して、あるいは開始時刻を指定して実行させることができます。
このためには、一連のスクリプトをどの順で、およびいつ開始するかを指定したスケジュールを作成する必要があります。 スケジュールはたとえば下記の例のようなものです。

スケジュールの作成方法は、スケジュールの編集を参照してください。 スケジュールを実行するには、スケジュールのウィンドウを選択した状態でボタン [image] を押します。 上記の例では、10時30分にスクリプトSample1.sc9を実行し、それが終わると、Sample2.sc9、Sample3.sc9をこの順で連続して実行します。


タイミングの調整

連続して操作を行うとき、アプリケーションによっては操作と操作の間に時間がかかる場合があります。 たとえば、「ファイルを開く」メニューを操作して実際にファイルが開かれ、次の操作が可能になるまでに時間がかかる場合があります。 このような場合にTriple-9で単純に連続再生を行おうとすると、うまく動作しません。 このような状況に対処するために、Triple-9はいくつかのタイミング調整のための機能を備えています。 これらをうまく組み合わせて確実に動作するように編集してください。

1) Pause手続き
一定時間再生を中断します。汎用的に使えますが、確実に動作させるには長めに待ち時間を設定しておく必要があるのが難点です。

2) タイムアウト機能つきFindWindow関数, およびFindPopup関数
ある操作を行うとメッセージボックスが現れるという場合に利用できます。特定のウィンドウが表示されるのを待ちます。

3) タイムアウト機能つきPushButton関数
特定のボタンが表示されEnableになるのを待ってからそのボタンを押します。

4) WaitIdle関数
アプリケーションがアイドル状態になるまで待ちます。

5) WaitClose関数
指定のウィンドウが閉じる、あるいはプロセスが終了するまで待ちます。

6) WaitFolder手続き
指定ディレクトリで任意のファイルが作成あるいは削除されるまで待ちます。

7) その他
その他、Triple-9はIsWindowEnabled, IsWindowVisible, GetText, GetMenuState, GetStateなど、ウィンドウの状態を取得する多くの機能を備えています。 これらとif文, Pauseを組み合わせて判断することも可能です。

例:
bOK := False;
WaitTime := 5000;
while WaitTime > 0 do begin
    if IsWindowEnabled(h1) then begin
        bOK := True;
        break;
    end;
    Pause(500);
    WaitTime := WaitTime - 500;
end;
if bOK then begin
     :
end;


高度な使い方

DLLを作成して機能を拡張する
DLLを作成してユーザ自身でTriple-9の機能を拡張することができます。 サンプルSamples\TestDLL.dllは、任意のアプリケーションのメニューを変更してカスタマイズできるようにします。 Borland Delphiを使って作成したソースをSamples\TestDLL.dprに示しています。 Samples\TestDll.sc9は、このDLLを使ってエクスプローラのメニューをカスタマイズするものです。
参照: DLLの作成と呼び出し

DDEを使う
ダイナミックデータ交換を使って他のアプリケーションと通信できます。 プログラムマネージャとの間でDDEを使った例をSamples\DDE.sc9に示しています。 DDEでどのようなコマンドが使えるかは、相手のアプリケーションの解説書を参照してください。
参照: DDEによる通信

SendMessageを使う
SendMessageは、Windows APIのSendMessageと同等のものです。 これを使うことにより、コンボボックスやエディットコントロールなど各種のコントロールの様々な状態を取得したり、設定を行ったりすることができます。 サンプルを、Samples\SendMesx.sc9に示します。
参照: SendMessage関数

EXEファイルの生成におけるカスタマイズ
EXEファイルを生成する際、ボタンイメージやヒントメッセージを変更することはもちろん、実行開始方法を、 たとえば特定の画面が現れたら自動的に開始する、特定の時間に開始する、ホットキーで開始するなど、任意に変更することも可能です。
参照: コンパイルしてEXEファイルを作成する


起動方法

Triple-9は、引数なしで起動すればメインウィンドウが開きますが、次のように引数を指定して初期動作を指定することもできます。

Triple9.EXE [オプション] [スクリプトファイル名]

オプション
-m: ウィンドウを最小化します。
-x: スクリプトファイル名が指定されていた場合、それを実行します。
-t: スクリプトファイル名で指定されたスクリプトの実行が終了すると同時に、Triple-9も終了します。-xが指定されていない場合は無効です。

スクリプトファイル名
指定されていたら読み込みます。-xが指定されていれば実行もします。

例: Triple9.EXE -mxt Samples\PushBtn.sc9


メニューとボタン

メニュー |  | ツールバーボタン
ファイル | 新規作成 | 新規作成
 | 開く | 開く
 | 上書き保存 | 上書き保存
 | 名前を付けて保存 |
 | 閉じる |
 | プリンタの設定 |
 | 印刷 |
 | 終了 |
 |  | コントロール情報
編集 | 切り取り |
 | コピー |
 | 貼り付け |
 | 削除 |
 | すべて選択 |
表示 | フォント指定 |
 | タブ設定 |
実行 | 実行 | 実行
 | 一時停止 | 一時停止
 | 終了 | 終了
 | 記録 | 記録
 | 構文チェック | 構文チェック
 | コンパイル | コンパイル
設定 | カスタムコントロール登録 |
 | 実行時オプション |
ウィンドウ | 縦に並べて表示 |
 | 横に並べて表示 |
 | 重ねて表示 |
 | トレースウィンドウ |
 |  | トレース画面クリア
ヘルプ | 目次 |
 | バージョン情報 |
 | ユーザ登録 |


スクリプトを編集する

新規にスクリプトを作成する
新規にスクリプトを作成するには、メニューの[ファイル - 新規作成 - スクリプト]または [image] ボタンを押します。 すると次のようにコード編集領域が現れますので、ここにコードを入力してください。

既存のスクリプトファイルを開く
既存のスクリプトを開くには、メニューの[ファイル - 開く]または [image] ボタンを押し、 ファイル選択のダイアログボックスでファイルを選択してください。

スクリプトをファイルに保存する
メニューの[ファイル - 名前を付けて保存]を実行すると、現在のコードにファイル名をつけて保存できます。 既存のファイルを開いていた場合で、同じファイルに変更内容を反映させる場合には、メニューの [ファイル - 上書き保存]または [image] ボタンを押してください。

切り取り、コピー、貼り付け、削除、すべて選択
メニューの[編集]から、切り取り、コピー、貼り付け、削除、すべて選択の操作ができます。
またはコード編集領域でマウスの右ボタンを押すとポップアップメニューが現れます。ここで実行できます。


アプリケーションの操作を記録する

アプリケーションの操作を記録するには、メニューの[実行(R) - 記録(M)]または [image] ボタンを押してください。 すると次の画面が現れます。

この画面では次の指定を行ってください。

1. 記録モードを選択する
ラジオボックスにより、次のいずれかの記録モードを選択します。
■高水準モード | ：メニューの選択やボタンの押下などを論理的に記録する
■ボタン操作のみ記録 | ：キーボード、マウスのボタン操作を物理的に記録するが、マウス移動操作は除外する
■マウス移動操作を記録 | ：キーボード、マウスのすべての操作を物理的に記録する

2. 記録モード変更のホットキーを設定
上記の記録モードは、ホットキーによって実行時に変更することもできます。
標準では、それぞれ Alt+H, Alt+B, Alt+M ですが、変更することもできます。変更する場合は、各項目で変更したいキーを入力してください。

3. 高水準モードの場合は3.1, 3,2, 3.3を、その他の場合は3.3, 3.4を行います。

3.1 クラス名識別子の指定方法を選択する。
クラス名識別子には、インデックスをそのコントロールのキャプション(タイトル)を使うものと、同一クラスの中での順番を使う方法の2種類があります。 そのうち、どちらを使うかを選択します。

3.2 メニューの記録方法を選択する
メニューの記録方法には、メニュー文字列を記録する方法とメニューIDを記録する方法があります。そのどちらを使うかを選択します。

3.3 日本語入力の記録方式を選択する
日本語入力は、変換後の漢字のみを記録する方式と、キー入力をそのまま忠実に記録する方式があり、いずれかを選択できます。 日本語入力では、漢字変換候補の順番が使用頻度によって変化する場合がありますので、後者では再生の際に確実に同じ文字列が入力される保障がありません。 できるだけ前者を推奨します。

3.4 マウス位置指定の基準とするウィンドウを選択する。
「参照」ボタンを押しカーソルが [image] になったら記録対象としたいアプリケーションのタイトルの部分にカーソルを持っていって左ボタンをクリックしてください。 「基準ウィンドウ」とあるところのデータが変化するはずです。 これは、これから記録するデータに中のマウスに関するデータは、指定したウィンドウの左上隅を原点とするという意味です。 これをクライアント座標系にすることによって、アプリケーションのウィンドウをどこに移動しても作成したTriple-9のコードはうまく動作するようになります。

4. 記録開始の先頭でアプリケーションを起動したい場合は、「アプリ起動」チェックボックスをチェックします。

以上の準備ができたところで、「開始」ボタンを押してください。
記録が開始されると同時に、画面右上隅に画面

が現れます。 この状態でアプリケーションの操作を行ってください。アプリケーションの操作が終了したら、右側の停止ボタン [image] を押してください。 記録が終了し、自動生成されたスクリプトが表示されます。

操作途中でスクリプト内にコメントを挿入することができます。 左側の [image] を押すと、下記の画面が現れますので、ここで挿入したいコメントを入力し[OK]ボタンを押してください。

注) 記録する際、オプション設定ダイアログの[実行時最小化] にチェックしておくと、Triple-9のウィンドウが最小化されます。

制限事項
高水準モードの記録は、意味のある操作のほとんどを記録しますが、特殊な処理を行っている一部のアプリケーションでは記録できない操作もあります。
うまく記録できない場合は、手作業でコードを挿入するか、あるいは高水準モード以外のモードで記録してください。


コントロールの情報を取得する

Triple-9は、ボタンやラジオボタン、チェックボックスなどのコントロールの情報を取得したり、操作したりできますが、 そのコントロールを指定するにはコントロールのウィンドウハンドルが必要になります。 コントロールのウィンドウハンドルを取得するには、次の２つの方法があります。

①クラス名識別子
  例: Handle := Window[TopWindowHandle].TPageControl[0].TTabSheet[2].TButton[3];
②コントロールＩＤ
  例: Handle := GetDlgItem(TopWindowHandle, ControlID);

これらについて詳しくは、コントロールの指定を参照してください。

上記の例でTopWindowHandleはFindWindow関数またはExecute関数で取得します。 下線部は次のようにして取得します。
を押してください。 するとカーソルが [image] に変わりますので、調べたいコントロールの上にカーソルを持っていって左ボタンを押してください。 すると、次のダイアログボックスが表示されます。

ここで、「コントロールID」とあるところがコントロールＩＤ、「クラス」とあるところがクラス名識別子です。
画面下部のツリービューには指定したコントロールの子ウィンドウも表示されていますので、任意のノードを選択するとそのコントロールＩＤとクラス識別子を調べることもできます。 目的のコントロールの情報がわかったら、「コントロールID」または「クラス」というラベルの右側の [image] ボタンを押すと、 それぞれの名称がコード編集領域に挿入されます。


インターネットエクスプローラの操作を記録する

インターネットエクスプローラを使用する場合、マウスやキーボードの操作としてではなくリンクや送信ボタンの操作を記録することができます。
こちらの方法による記録では、すべての入力項目(テキスト入力項目や、ラジオボタンなど)の現在値が自動的に取得されるので便利です。
Internet Explorerの操作を記録するには、メニューの[実行(R) - 記録(M)]または [image] ボタンを押してください。
現れた画面上で、[Internet Explorer]タブを選択してください。そうすると、以下の画面に変化します。

ここで[開始(S)]ボタンを押すと、インターネットエクスプローラが起動しますので、任意の操作を行ってください。以下の操作がスクリプトに記録されます。

1) 送信ボタンのクリック
タグ名が"INPUT"で、TYPE属性が"submit"のボタンをクリックした場合は、そのページにあるすべての入力項目を現在の値に設定するような操作に加えて、そのボタンをクリックする操作が記録されます。
2) リンクのクリック
タグ名が"A"のリンクの場合、それをクリックする操作が記録されます。
3) その他、アドレスバーでのURLの入力など、他のページにジャンプする操作
そのページにジャンプする操作が記録されます。
4) インターネットエクスプローラの子として表示されたダイアログ画面の操作

[停止(T)]ボタンを押すか、インターネットエクスプローラを終了すると、記録が停止します。

注1) インターネットゾーンでのセキュリティ制約について
記録したスクリプトでインターネット上のページにアクセスしようとした場合、「アクセスを拒否されました」というエラーになる場合があります。 これはインターネットエクスプローラのセキュリティ保護機構によるものです。
入力項目に値を自動的に設定しようとした場合にこのエラーとなります。
ローカルコンピュータ上にあるコンテンツでは実行可能ですので、ローカルコンピュータにコピーしてからだと実行可能になる場合があります。
ただし、その際には先頭近くにある <!-- saved from url=.... --> といった内容の行を削除してください。 この行は、コピー元のページの所在を示し、これがあるとローカルコンピュータであってもインターネットゾーンと判断されてしまいます。
※ Triple-9の本機能はWEBアプリケーション開発者向けにテストを省力化するのを第一義的な目的として開発しました。 インターネットゾーンでのスクリプトの自動実行の目的には制約がありますのでご注意ください。

注2) このモードで記録できるのは、上記に記載した4種類の操作のみです。 マウスやキーボードの細かい操作は記録されません。
このため、記録したスクリプトが期待したように動作しない場合もありえます。 たとえば、JavaScriptでユーザの操作を細かく制御しているようなページでそのような可能性があります。
その場合、Mouse/Keyboardモードで記録するか、あるいは手作業でスクリプトの修正を行う必要があります。

記録されたスクリプトの例:


インターネットエクスプローラの情報を取得する

インターネットエクスプローラのあるページに表示されているテキストボックスやボタンにアクセスする際、名前やプロパティの値が使えます。
名前やプロパティ値でアクセスする場合、ピクセル位置でアクセスするのと異なり、画面サイズの違いでボタンなどの位置が変化しても確実にアクセスできるというメリットがあります。 ただし、名前やプロパティ値でアクセスするには事前にそれらの値を調べることが必要です。
このためには、まずボタン [image] を押し、現れた画面でURLを入力し「移動」ボタンを押します。すると以下のような画面になります。
この画面の上半分に操作可能な部品の情報が表示されます。この一行が一つの部品を意味し、プロパティ名とその値のペアが複数並んでいます。たとえば
    tagName:='INPUT', type:='text', name:='name', value:='', checked:=False
という行は、プロパティ tagName, type, name, value の値がそれぞれ 'INPUT', 'text', 'name', '', False であるテキストボックスを意味します。


スクリプトの静的なテスト

スクリプトを一通り入力したところでエラーがないかチェックするには、 [image] ボタンを押してください。 もしエラーがあった場合は、画面下部のステータスバーにエラーメッセージが表示されます。
エラーメッセージは、次の形式で表示されます。

行番号:桁番号　メッセージ

行番号、桁番号はエラーのある行位置、文字位置を示します。


トレース出力

実行する時に、その状況を逐一画面に表示するようにすることができます。 スクリプト実行中にPrint手続きに出会うと、その引数で指定されたテキストが画面下部のトレース画面に出力されます。 簡単なデバッグの代わりにも使えます。
Clear手続きを実行すると、トレース画面をクリアします。

トレース画面は、メニューの[ウィンドウ - トレースウィンドウ]を実行することにより、表示／非表示を切り替えることができます。 またボタン [image] を押すと、トレース画面をクリアして非表示にします。


デバッグ

試しに実行してみて問題がある場合、その原因究明のためにデバッグ機能を利用できます。 スクリプトの要所要所にブレークポイントを置いておくと、その行を実行しようとした直前で、実行が一時中断しますので、その時点での変数の値を調べたり変更したりできます。 ブレークポイントは、スクリプト編集領域の各行の左端にある青い丸点をマウス左ボタンでクリックすると設定できます。 青い丸点が赤い丸点に変化したら、ブレークポイントが設定できたことを意味します。もう一度クリックすると解除できます。

メニューの[実行 - 実行]あるいは [image] ボタンを押すと、実行が開始されます。 ブレークポイントに到達すると、次の画面が開き変数一覧が表示されます。

変数の値を変更したい場合は、ListView上で変数を選択すると現在の値が上部のEditBoxに表示されますので、これを編集した後、[新しい値設定]ボタンを押します。 「継続」ボタンを押すと実行を継続し、「中止」ボタンを押すと実行を終了します。


スクリプトを実行する

スクリプトのテストが終わったら、実行できます。メニューの[実行 - 実行]あるいは [image] ボタンを押してください。
一時停止したい場合は、メニューの[実行 - 一次停止]または [image] ボタンを押せば一時停止し、 再度メニューの[実行 - 実行]を実行するか [image] を押せば再開します。 途中で強制的に終了したい場合は、メニューの[実行 - 終了]または [image] を押してください。 もしマウスが動かず、メニューやボタンの操作ができない場合は、次のいずれかのキー操作でも終了できます。
  • Ctrl + Esc キーを入力する
  • Alt + Esc キーを入力する
  • Ctrl + Alt + Delete キーを入力し、キャンセルする
注) 実行する際、メニューの[設定 - オプション - 実行時、最小化] にチェックしておくと、Triple-9のウィンドウが最小化されます。


オプションを指定する

メニューの[設定 - 実行時オプション]を選択すると、実行時の動作を決めるいくつかのパラメータを指定できます。

実行時、最小化
これにチェックしていると、記録および再生時にTriple-9の画面が最小化します。

再生速度(イベント間隔)
一つ一つの操作の間の時間間隔を指定します。単位はmsecです。 この値が小さいほど、速く再生します(スクリプトの中で変更する場合は、Rate手続きを使います)。

マウス移動
「Smooth」にしていると、再生時、マウスは連続的に移動します。 「Jump」にしていると、高速にジャンプ移動します(スクリプトの中で変更する場合は、Pace手続きを使います)。

PushButtonの動作
時間のかかる処理を行っている場合、タイミングによっては押そうとするボタンが無効または非表示のため押せない場合があります。 そのような場合、押せるようになるまで待たせるように指定できます。
[押せるようになるまで待つ]にチェックを入れて、[最大待ち時間]に時間(msec単位)を入力すると、押せるようになるまで待ちます。
[押せなかった場合]ラジオボタンで、[ダイアログ表示]を選択していると、指定した最大待ち時間を経過しても押せるようにならない場合は、 ダイアログを表示してその後の動作を 1) 再試行, 2) 無視して継続, 3) 終了 の中から選択できるようになります。 あるいは[押せなかった場合]ラジオボタンで[無視]を選択していると、単に無視して継続実行します。


スケジュールを編集する

新規にスケジュールを作成するのは、メニューの[ファイル - 新規作成 - スケジュール]で行います。 既存のスケジュールを編集するには、メニューの[ファイル - 開く]を実行し、「ファイルを開く」ダイアログボックスで拡張子が .sh9 のものを選択してください。

スケジュールのウィンドウが選択されている状態で、メニューの[編集 - 追加]を実行すると、次の画面が現れますので、 ここでスクリプトファイル名と、開始時刻を指定します。即時を選択した場合は、実行指示があった時点で即時に実行します。

スケジュールのウィンドウが選択されている状態では、メニューの[編集]の下には以下のサブメニューがあります。
メニュー操作は、スケジュールのウィンドウ上でマウスの右ボタンをクリックすると現れるポップアップメニューを使うこともできます。

追加: 一番最後に項目を追加します。
挿入: 現在選択している項目の手前に挿入します。
変更: 現在選択している項目の内容を編集します。
削除: 現在選択している項目を削除します。

スクリプトは、スケジュールの上から順番に実行されます。順番を入れ替えるには、入れ替えたい項目を移動したい位置までDrag & Dropしてください。


カスタムコントロールを登録する

アプリケーションによっては、Windowsの標準コントロールをそのままではなく、サブクラス化して使用しているものがあります。 そのようなアプリケーションに対して、高水準モードで操作の記録を行おうとした場合、Triple-9がそのコントロールを認識できないため、 せっかく高水準モードにしておきながら、実際に記録されるのは低レベルのマウスの物理的な動作のみになってしまうことがあります。
このようなサブクラス化されたコントロールをカスタムコントロールとして登録しておくと、標準コントロールと同様に高水準の記録が可能になります。 たとえば、EXCEL97において、MsoCommandBarをToolBarとして登録すると、EXCEL97のツールバーの操作をToolBarClickなどというコマンドとして記録できます。
カスタムコントロールを登録するには、メニューの[設定 - カスタムコントロール登録]を実行します。 すると、次の画面が現れますので、登録したいコントロールのクラス名、および対応させたい標準クラス名を入力します。 用意されている標準クラス名は、次のものです (Radio Button, Check Box は、Buttonとして登録してください)。

Button, ComboBox, ListBox, ToolBar, TabControl, Static

なお、アプリケーションが使用しているクラス名を調べる方法は、「コントロールの情報を取得する」を参照してください。

注) カスタムコントロールの登録は、記録で必要になります。再生のみ行う場合は、必要ありません。


コンパイルしてEXEファイルを作成する

スクリプトはコンパイルして、EXE形式にすることができます。 EXEファイルにしたファイルは、Triple-9をインストールしていない任意のPCに配布して実行できます。
一つのEXEファイルには、複数のスクリプトを含めることができます。
コンパイルには、標準コンパイルとカスタムコンパイルの2通りの方法があります。

■ 標準コンパイル
出来上がったプログラムは、あらかじめ定められた方法で実行できます。コンパイル時の指定、または起動時の引数指定により、次のいずれかを選択できます。
1) ランチャー画面から実行する方法
2) タスクトレイから実行する方法
3) 起動と同時に実行する方法

■ カスタムコンパイル
標準で提供している方法以外で起動したい場合、カスタムコンパイルを行うことができます。
ただし、カスタムコンパイルを行うには、別途Borland Delphi (Professional版 3.0以上)が必要になります。

注意: Triple-9本体が動作している時、生成したEXEファイルを実行することはできません。 Triple-9関連のプログラムは複数個同時には実行できません。Triple-9本体を終了してから実行してください。

コンパイル方法

生成した実行ファイルの配布

生成した実行ファイルの起動方法


ComSpyの使い方

OLEオートメーションとして知られているように、Microsoft WORDやEXCEL, Internet ExplorerなどはCOMインタフェースを通じて外部から操作できます。
しかしActiveXを使っているアプリケーションであっても、上記のような一部のアプリケーションを除き、一般には他のプロセスから操作することはできません。
ComSpyは、そのようなアプリケーションでもTriple-9から操作できるようにするツールです。
次の手順で操作することにより、それが可能になります。

1) ComSpyを通じてアプリケーションを起動する。このとき操作したいActiveXのCOMインタフェースを指定する。
2) Triple-9のスクリプトで、GetActiveOleObject関数を用いて対象のCOMインタフェースを取得する。
3) 後は、通常のOLEオートメーションの手順で操作する。

■ COMインタフェースを公開してアプリケーションを起動する
■ ActiveXコントロールを操作する
■ ComSpyを自動で起動する


スクリプトの構造

スクリプトは、大きく宣言部と実行部から成ります。
宣言部で、サブルーチン(手続き、関数)の宣言、定数およびグローバル変数の定義を行います。
宣言部の次に、beginとendではさんでメインの実行部のコードを記述します。
メインの実行部の次に、サブルーチン(手続き、関数)の実際のコードを記述します。
コメントは、// の後に記述することができます。

例：
//宣言部
procedure SubProc(StrArg: string; IntArg: integer);
function SubFunc(MyArg: integer): integer;
var Count, No: integer;
    Title: string;
const MyName = 'Yamamoto';

//実行部(メイン)
begin
  ……　//メインプログラムのコード
end;

//実行部(手続き)
procedure SubProc(StrArg: string; IntArg: integer);
begin
  ……　//手続きのコード
end;

//実行部(関数)
function SubFunc(MyArg: integer): integer;
begin
  ……　//関数のコード
end;


定数と変数

定数と変数には、整数型(integer)、文字列型(string)、論理型(boolean)、OleObject型の4種類があります。
整数は-2147483647～2147483647の範囲の符号付き32ビット数です。16進数は頭に文字'$'をつけて示します。 文字列型の論理的な最大長は2GBです。論理型の値は、TrueかFalseのいずれかです。
次に定数、変数の値の例を示します。

整数定数(10進数) | : 23, -5
整数定数(16進数) | : $FF, $1a
文字列定数 | : 'Red'
論理定数 | : True, False

制御文字などを文字列定数に含めたい場合は、$の後に16進2桁の値を記述します。次の例は、途中にCR/LFを挿入したものです。
    '一行目$0A$0D二行目'

定数(整数、文字列)には名前をつけることができます。

構文：Const宣言→ const 変数名 = |整数定数/文字列定数|;
                        [変数名 = |整数定数/文字列定数|; …]

例:
const SW_SHOW = 5;
      Caption := 'My Application';

変数名は、英字および数字からなります。ただし、先頭は英字でなければなりません。 大文字小文字は区別されません。変数は必ず事前に宣言しておかなければなりません。 グローバル変数は宣言部(メインプログラムの前)で宣言します。ローカル変数は、各手続き／関数の実行部のbeginの手前に記述します。

構文：変数宣言→ var 変数名 [,変数名 …]: |integer/string/boolean|;

例:
var LineNo, Count: integer;　//グローバル変数
    Title: string;
    LoopFlg: boolean;

begin
  ……　//メインプログラムのコード
end;

function MyFunc(Count: integer): integer;
var Mess: string;　//ローカル変数
    K: integer;
begin
  ……　//関数のコード
end;


標準定数

複数のスクリプトで共通に使用する定数は、Triple-9と同じディレクトリにある Const.sc9 というファイルに記述しておくことができます。 このファイルは、Triple-9起動時に一回のみ読み込まれます。ただし、このファイルにはconst文以外の文は記述できません。

例:
const
  SW_HIDE = 0;
  SW_SHOWNORMAL = 1;
  SW_SHOWMINIMIZED = 2;
  SW_SHOWMAXMIZED = 3;
  SW_SHOWNOACTIVATE = 4;
  SW_SHOW = 5;
  SW_MINIMIZE = 6;
  SW_SHOWMINNOACTIVE = 7;
  SW_SHOWNA = 8;
  SW_RESTORE = 9;
  SW_SHOWDEFAULT = 10;


関数と手続き

同様な処理が複数箇所で何回も必要な場合には、関数または手続きとすると一回記述するのみで済みます。 手続きは手続き文によって起動されます。関数はその関数呼び出しのある式の評価で起動され、その式に値を返します。 関数に戻り値を設定するには、予約変数 Result にセットします。
関数および手続きに渡すパラメータは、一部の組み込み関数を除き、値渡しです。 すなわち、関数および手続きの中で、パラメータとして渡された変数の値を変更しても、それはその関数や手続きの中でのみ有効で、呼出し元にまでは影響を及ぼしません。 関数、手続きは組み込み関数を除き、事前に定義しておかなければなりません。

構文：関数　　　→ function 関数名 ( 引数リスト ): |integer/string/boolean|;
      手続き　　→ procedure 手続き名 ( 引数リスト );
      引数リスト→ 引数; [引数 …]
      引数　　　→ 引数名 [,引数名 …]: |integer/string/boolean|;

例:
procedure MyProc(Title: string);　//手続き宣言
function MyFunc(LineNo: integer; Text: string): integer;　//関数宣言

begin　//メインプログラム
  MyProc('目次');
  Len := MyFunc(1, '項目Ａ');
  ……
end;

procedure MyProc(Title: string);　//手続き実行部
begin
  Message(MB_OK, Title);
  ……
end;

function MyFunc(LineNo: integer; Text: string): integer;　//関数実行部
begin
  ……
  Result := Length(Text);　//関数に戻り値をセットする
end;


式

「式」の要素としては以下のものがあり、変数への代入、関数や手続きの引数、if, while, repeatの条件式などに使用できます。

因子 | 例
定数(整数) | 23, -5
定数(文字列) | 'Sample'
変数 | LoopCount, CustomerName, …
( 式 ) | ( K + 1 )
演算式 | A * B, A + B, A - B, A div B, A mod B
論理式 | A > B, A <= B, A > B, A >= B, A = B, A <> B, A and B, A or B, not A
関数 | IntToStr(Count), FindWindow('', 'Word')


演算子

演算子には以下のものがあります。

算術演算子 | 演算 | 例
+ | 加算 | K + J
- | 減算 | K - J
* | 乗算 | K * J
div | 整数除算 | K div J (0で割った場合は不定)
mod | 剰余 | K mod J

文字列演算子 | 演算 | 例
+ | 連結 | S1 + S2

論理演算子 | 演算 | 例
not | 否定 | not A
and | 論理積 | A and B
or | 論理和 | A or B
xor | 排他的論理和 | A xor B

論理演算では、途中で式全体の結果がわかっても、すべてのオペランドの評価を行います。

演算子の優先順位は次の通りです。優先順位が等しい演算は左から右へ実行されます。優先順位を変更するには、括弧 ( ) でくくります。
not | 1位(高)
*, div, mod, and | 2位
+，-，or, xor | 3位
=，<>，<，>，<=，>= | 4位(低)


OLEオートメーション

ExcelやWordなどを、VBA (Visual Basic Application)と同様な方法で制御できます。
このためには、次のようにスクリプトを記述します。

1) OleObject型の変数を定義する。
        var V: OleObject;
2) 目的のアプリケーションのProgIDを指定して、CreateOleObject関数 または GetActiveOleObject関数 を実行し、戻り値をOleObject型に代入する。
        V := CreateOleObject('Excel.Application'); または
        V := GetActiveOleObject('Word.Application');
3) 以降に、各メソッドやプロパティの値取得、設定の文を記述する。

メソッドやプロパティについては、各アプリケーションの解説書を参照してください。
名前付きパラメータ、パラメータの省略もできます。

(※) 存在しないメソッドやプロパティを指定しても、構文チェックやコンパイル時にはエラーにはなりません。実行時にエラーになります。

(※) ActiveXを使った一般のアプリケーションの自動化については、ActiveXを含むアプリケーションを自動化するを参照してください。

例:
const xlLocationAsObject = 2;
var V, V2: OleObject;
    Row, Col: Integer;
begin
    V := CreateOleObject('Excel.Application');
    if V = 0 then exit;
    V.Visible := True;
    V.Workbooks.Add;
    V2 := V.ActiveSheet;
    for Col := 1 to 5 do V2.Cells[1, Col] := 'Column ' + IntToStr(Col);
    for Row := 2 to 5 do begin
        for Col := 1 to 5 do begin
            V2.Cells[Row, Col] := Row * 100 + Col;
        end;
    end;
    V.Charts.Add;
    V.ActiveChart.SetSourceData(Source := V2.Range['A1:E5']);
    V.ActiveChart.Location(Where := xlLocationAsObject, Name := 'Sheet1');
    V.Workbooks[1].Close(True, 'Sample.xls');
    V.Quit;
end;
OLEオートメーションは非常に強力な機能ですが、ここではごく簡単に説明するに留めています。 詳しくは、 Excel VBA 等の市販の書籍を参考にしてください。ネィティブの VBA とは、
■ Pascal流の構文である。たとえば、代入に「=」ではなく、「:=」を使う。
■ Variant型が使えない。
が異なる程度で、VBAの機能がほとんどそのまま使えます。
プロパティに値を設定する場合は、右辺の変数または定数は、型が一致していなければなりません。 一致していないと実行時エラーとなります。
プロパティの値を取得する場合は、代入する左辺の変数の型に自動で型変換を行います。 数字以外の文字を含んでいる文字列を整数型に変換すると0になります。


ウィンドウの指定

Triple-9で各種の操作を行ったり、状態の取得を行ったりする場合には、その相手を特定するのにウィンドウハンドルを使用します。 ここでウィンドウと言っているのは、トップレベルのフォームのことです。 フォームには、通常その中にボタンやエディットコントロールなど各種コントロールが含まれ、これも一種のウィンドウですが、ここではそれらはコントロールと呼んでいます。
相手のウィンドウに何らかの操作を行うには、まずそのウィンドウハンドルを知る必要がありますが、そのための関数として次の2つがあります。

FindWindow関数
Execute関数

トップレベルのウィンドウハンドルがわかったら、その子ウィンドウである各種コントロールのウィンドウハンドルも調べられます。 この方法はコントロールの指定を参照してください。


コントロールの指定

Triple-9は、ボタンやラジオボタン、チェックボックスなどのコントロールの情報を取得したり、操作したりできますが、 そのコントロールを指定するにはコントロールのウィンドウハンドルが必要になります。 コントロールのウィンドウハンドルを取得するには、次の２つの方法があります。

①クラス名識別子を使う
クラス名識別子とは、クラス名を使ってウィンドウの親子関係をたどったもので、たとえば次のようなものです。
    Handle := Window[TopWindowHandle].TPageControl[0].TTabSheet['詳細'].TButton[3];
ここで、Windowはトップレベルウィンドウを示す必ず必要な予約語、TopWindowHandleは、 FindWindowまたはExecute関数で得られるトップレベルウィンドウのハンドル、TPageControl, TTabSheet, TButton などはクラス名を意味します。 TPageControl, TTabSheet, TButtonに付属している[ ]の中には、同一クラス名の中での順番、 またはそのコントロールに関連づけられたテキストを指定します。 順番は、動的にコントロールを生成するようなアプリケーションでは固定の値ではない場合もあります。 その場合は、テキストで指定すると良いでしょう。

②コントロールＩＤを使う
コントロールＩＤとは、各コントロールに一意に与えられた番号です。この番号から、
    Handle := GetDlgItem(TopWindowHandle, ControlID);
のようにしてハンドルを取得できます。

コントロールＩＤを使う方が簡単に指定できます。しかし、コントロールＩＤはアプリケーションによって 固定の値であるものと、起動するたびに異なる値になるものがあります。 アプリケーションを何度か起動してみてどちらであるかを調べ、固定であればコントロールＩＤを、 そうでなければクラス名識別子を使うようにすると良いでしょう。 上記の例でTopWindowHandleはFindWindow関数またはExecute関数で取得します。 下線部の取得方法は、コントロールの情報を取得するを参照してください。


インターネットエクスプローラの操作

インターネットエクスプローラは通常のOLEオートメーションによって操作できます。

例:
var V: OleObject;
begin
    V := CreateOleObject('InternetExplorer.Application');
    V.Visible := True;
    V.Navigate('http://www.MyHomePage/Sample1.htm');
      :
      :
end;
ここで、Visible, Navigateなどはインターネットエクスプローラがサポートしているプロパティ、メソッドです。 この他に、GoBack, GoForward, LocationURLなど多数あります。どのようなものがあるかは、 別ソフト(シェアウェア)になりますが、eXeScopeを使うと調べることができます。 eXeScopeで、SHDOCVW.dll (WindowsXPにおける標準のディレクトリはC:\Windows\System32)を開き、 Resource\TypeLib\1 の内容のうちIWebBrowser2にプロパティやメソッド一覧が表示されます。

標準メソッド以外に、Triple-9で特別にサポートしたメソッド%Find関数があります。 インターネットエクスプローラのページに表示されるリンクやボタン、テキストボックスなどは 他の一般のアプリケーションとは異なり、一つのウィンドウではありません。 そのため、自動記録すると、ピクセル位置でアクセスするようなスクリプトが生成されます。 しかし、ピクセル位置は画面サイズなどに依存して位置が変わる可能性があるので、いつも確実にアクセスできるとは限りません。 このような場合は、名前やプロパティ値でアクセスするように%Find関数を使ってスクリプトを編集すると改善されます。 このためには、まず操作したいボタン等の情報を取得する必要があります。 この方法については、インターネットエクスプローラの情報を取得するを参照してください。
名前やプロパティ値がわかると、%Find関数を用いて目的の部品を参照することができます。
例:
var V: OleObject;
    Typ, Str: String;
begin
    V := CreateOleObject('InternetExplorer.Application');
    V.Visible := True;
    V.Navigate('http://www.MyHomePage/Sample1.htm');
    V.%Find(type:='radio', name:='size', value:='medium').Click;
    V.%Find(type:='select-one', name:='menu').selectedIndex := 2;
    V.%Find(value:='red').checked := True;
    V.%Find(value:='green').checked := True;
    V.%Find(name:='answer').value := 'My Opinion';
end;


代入文

代入文は「変数名 := 式」の形をとり、変数名で指定した変数を、式で指定した新しい値で置き換えます。
式は変数の型と互換でなければなりません。

例:
var A, B, Cnt: Integer;
    Done: Boolean;
    Txt, Mess: String
begin
    A := A + B;
    Done := (Cnt >= 1) and (Cnt < 100);
    Mess := Copy(Txt, 2, 4);
end;


手続き文

手続き文は、指定された手続きを起動します。
対応する手続き宣言に仮パラメータのリストがある場合、手続き文には実パラメータのリストが入っていなければなりません （定義に示されているパラメータが仮パラメータで，呼び出し文の中にあるのが実パラメータです）。 実パラメータは呼び出しの一部として仮パラメータに渡されます。

例:
SortList;
FindKey(Name, Address);


if文

構文： if文 → if　式　then　文　[ else　文 ]

式の結果は論理型でなければなりません。 式の値がTrueならば，thenの後の文が実行されます。 式がFalseの場合にelse部があれば，elseの後の文が実行されます。else部がなければ，if文の次の文に実行が移ります。

例:
H := FindWindow('TFClipRec', 'ClipRecorder');
if H = 0 then Message(MB_OK, 'ClipRecorder not found')
else begin
    PushButton(H, '設定');
    ……
end;


for文

構文：for文　 → for　制御変数　:=　初期値　｜to/downto｜　終値　do　文
      制御変数→ 変数名
      初期値　→ 式
      終値　　→ 式

制御変数を初期値から終値まで＋１または－１しながら、１つの文(複合文も可能)を繰り返し実行します。 制御変数および初期値、終値は整数型でなければなりません。
for文にtoを使った場合、制御変数の値は繰り返しのたびに＋１されます。 初期値が最終値よりも大きければ、文は実行されません。for文にdowntoを使った場合、制御変数の値は繰り返しのたびに－１されます。 初期値が終値よりも小さければ、文は実行されません。

例:
H := FindWindow('WordPadClass', 'ワードパッド');
C := Window[H].AfxControlBar[1].AfxControlBar[0].ComboBox[0];
for Index := 0 to 10 do begin
    SendMessage(C, CB_GETLBTEXT, Index, Str);
    Message(MB_OK, Str);
end;


while文

構文：while文 → while　式　do　文

式がTrueである限り、１つの文(複合文も可能)を繰り返し実行します。
繰り返しを制御する式は論理型でなければなりません。式は文の実行前に評価されます。 式が最初からFalseになった場合、文はまったく実行されません。

例:
F := OpenFile('Read.me', 0);
Len := ReadLine(F, Str);
while Len > 0 do begin
    Message(MB_OK, Str);
    Len := ReadLine(F, Str);
end;
CloseFile(F);


repeat文

構文：repeat文 → repeat　文 ;　[ 文 ; …]　until　式

式がTrueになるまで一連の文を繰り返し実行します。
式の結果は論理型でなければなりません。 予約語repeatとuntilの間にある文は順に実行され、シーケンスの最後で式の結果がTrueになるまで繰り返されます。 式は各シーケンスの実行後に評価されるため、一連の文は最低でも1回は実行されます。

例:
K := 0;
repeat
    Str := GetText(Window[H].TPanel[0].TButton[K]);
    Message(MB_OK, Str);
    K := K + 1;
until K > 10;


continue文

Continueは、この手続きを呼び出した for，while，repeat 文の次の繰り返しに制御フローを進めます。

例:
F := OpenFile('Read.me', 0);
Len := 0;
while Len >= 0 do begin
    Len := ReadLine(F, Str);
    if Len = 0 then continue;
    Message(MB_OK, Str);
end;
CloseFile(F);


goto文

構文：goto文 → goto　label

goto文は、指定のラベルでマークされた文へプログラムの実行を転送します。 goto文で参照するラベルはgoto文と同じブロックに入っていなければなりません。 つまり，手続きや関数の中に飛び込んだり手続きや関数から飛び出すことはできません。
簡潔なプログラミングのためには，goto文はできるだけ使わないようにしてください。


exit文

Exitは、関数や手続きの途中でその関数、手続きを終了し、呼び出し元に戻ります。


CompareImage関数

現在のウィンドウイメージと、以前ファイルに保存したイメージとを比較します。

function CompareImage(Path: string; Handle, Left, Top, Width, Height: integer; Flg: boolean): integer;

Handleで指定したウィンドウのビットマップイメージと、以前保存したビットマップファイルPathとを比較します。
比較範囲は、Left, Top, Width, Heightで指定できます。 Widthに0以下を指定すると右端まで、Heightに0以下を指定すると下端まで比較します。 FlgをTrueにすると、両者のイメージが一致しない場合、それらのXORをとったイメージを表示します。 これにより、どの部分が異なっているのかを視覚的に確認できます。関数の戻り値には次の値が返ります。

0 = イメージは異なっている
1 = イメージは一致している
-1 = 指定したウィンドウが見つからない
-2 = 指定したファイルが開けない


Execute関数

アプリケーションを起動します。

function Execute(Path: string; Timeout: integter): integer;

アプリケーションを起動し、入力アイドル状態になるまで待ちます。
Pathでアプリケーションのパス名を指定します。Pathにはスペースで区切ることにより引数も指定できます。 Timeoutは入力アイドル状態になるのを待つ最大時間(単位はmsec)で、この時間を経過すればアイドル状態でなくても戻ります。 戻り値には、メインウィンドウのハンドルが返ります。戻った時点でウィンドウが開いてなければ0になります。
類似の関数にShellExecuteもあります。


MessageBeep手続き

サウンドを再生します。

procedure MessageBeep(Type: integer);

Typeで示すタイプのサウンドを再生します。Typeには次の値を指定できます。

-1 : 標準ビープ
0 : 一般の警告音
16 : システムエラー
32 : メッセージ(問い合せ)
48 : メッセージ(警告)
64 : メッセージ(情報)


MouseClick手続き

マウスボタンをクリックします。

procedure MouseClick(Handle, X, Y, Button: integer);

マウスカーソルを(X, Y)位置に移動してマウスボタンをクリックします。 座標をスクリーンに対する絶対座標で指定する場合はHandleを0にします。 特定のウィンドウに対する相対座標で指定する場合は、Handleにそのウィンドウハンドルを指定します。 Button=0の場合は、左ボタン、Button=1のときは右ボタンをクリックします。 MouseClickを実行すると、Origin(Handle)を実行したのと同じ効果もあります。


MouseDrag手続き

マウスをドラッグします。

procedure MouseDrag(Handle, X, Y, Button: integer);

カレントのカーソル位置から(X, Y)位置までマウスをドラッグします。 座標をスクリーンに対する絶対座標で指定する場合はHandleを0にします。 特定のウィンドウに対する相対座標で指定する場合は、Handleにそのウィンドウハンドルを指定します。 Button=0のとき、左ボタン、Button=1のとき右ボタンを使います。 MouseDragを実行すると、Origin(Handle)を実行したのと同じ効果もあります。

例: 次の例は、デスクトップのショートカットアイコンをドラッグして移動します。
var h0, h1: Integer;
begin
    h0 := FindPopup('Program Manager', 5000);
    h1 := Window[h0].SHELLDLL_DefView[0].SysListView32[0];
    MouseMove(h1, 180, 20);
    MouseDrag(h1, 180, 250, 0);
end;


MouseMove手続き

マウスカーソルを移動します。

procedure MouseMove(Handle, X, Y: integer);

マウスカーソルを(X, Y)位置に移動します。 座標をスクリーンに対する絶対座標で指定する場合はHandleを0にします。 特定のウィンドウに対する相対座標で指定する場合は、Handleにそのウィンドウハンドルを指定します。 MouseMoveを実行すると、Origin(Handle)を実行したのと同じ効果もあります。


Origin手続き

マウス位置の原点を指定します。

procedure Origin(Handle: integer);

SendKeysコマンドにおけるマウスの位置指定方法を、Screen座標系(Handle=0の時)か、 特定のウィンドウを基準にしたClient座標系かに切り替えます。


Pace手続き

キーボードおよびマウスの再生速度を指定します。

procedure Pace(KeySpeed, MouseSpeed: integer);

KeySpeedおよびMouseSpeedでキーボードおよびマウスの再生速度を指定します。
値が小さいほど速くなります。MouseSpeedに0を指定するとマウス移動モードがJumpに、正の数を指定するとSmoothになります。
KeySpeedとMouseSpeedは、負の数だったときは無視されます。


Pause手続き

指定時間、待ちます。

procedure Pause(Time: integer);

Timeで指定した時間、実行を中断します。単位はmsecです。


PlaySound関数

サウンドを再生します。

function PlaySound(WavFile: string; Mode: integer): boolean;

WavFileで示す.WAVサウンドファイルを再生します。Mode=0の時は、再生終了するまで待ちます。 Mode=1の時は、再生開始と同時に次の行を実行します。


PowerOff手続き

パソコンの電源を切ります。ソフト的に電源を制御できる機種に限ります。
電源が復帰すると、次の行から実行が再開されます。

procedure PowerOff;


Rate手続き

再生速度を指定します。

procedure Rate(Interval: integer);

再生時にイベントとイベントとの間に空ける時間間隔をmsec単位で指定します。 値が小さいほど再生速度が速くなります。


SaveImage関数

ウィンドウのビットマップイメージをファイルに保存します。

function SaveImage(Path: string; Handle: Integer); boolean;

Handleで指定したウィンドウのビットマップイメージをPathで指定したファイルに保存します。成功すればTrueが返ります。


SendKeys手続き

キーボード、マウス操作をシミュレートします。
Textには漢字も使えます。

procedure SendKeys(Text: string);

Textで指定した文字列およびマウス操作をシミュレートします。
手前に次の文字を置くことにより、シフト状態を指定できます。
@ : 次の1文字をAltが押された状態にする
^ : 次の1文字をCtrlが押された状態にする
~ : 次の1文字をShiftが押された状態にする
\ : 次の1文字を特殊文字と解釈しない

また、次の特殊文字を{ }でくくって指定できます。
{F1}～{F12} | {INS}
{DEL} | {HOME}
{END} | {PGUP}
{PGDN} | {TAB}
{ENTER} | {BS}
{PRTSC} | {SHIFT}
{ESC} | {CTRL}
{ALT} | {CAPS}
{LEFT} (←) | {UP} (↑)
{RIGHT} (→) | {DOWN} (↓)
{KANA} | {KANJI} (XFER)
{NONCNV} (無変換/NFER) | {CNV} (変換)
{SCROLL} (ScrollLock) | {NUM} (NumLock)
{NUM0}～{NUM9} (テンキーの数字) | {MUL} (テンキーの * )
{ADD} (テンキーの + ) | {SEP} (テンキーの , )
{SUB} (テンキーの - ) | {DEC} (テンキーの . )
{DIV} (テンキーの / ) | {CANCEL} (STOP)
{PAUSE} | {xx} その他のキーをバーチャルキーコード(10進数)で指定します。

キーを押したままにしておくとリピート機能で同じ文字が連続して入力されますが、このようにして入力された文字は、繰り返し回数を[]の中に書くことでシミュレートできます。 たとえば、a[8] と書くと文字aを8文字入力できます。

マウス操作は次のように指定します。
{xx:yy} | マウスの移動。xxはX座標、yyはY座標。
{LDOWN} | マウス左ボタンを押す
{LUP} | マウス左ボタンを離す
{LCLK} | マウス左ボタンをクリックする
{LDCLK} | マウス左ボタンをダブルクリックする
{RDOWN} | マウス右ボタンを押す
{RUP} | マウス右ボタンを離す
{RCLK} | マウス右ボタンをクリックする
{RDCLK} | マウス右ボタンをダブルクリックする


SendMessage関数

Windows APIのSendMessage関数を実行します。

function SendMessage(Handle, Message, wParam, lParam: integer): integer;
    または
function SendMessage(Handle, Message, wParam: integer; lParam: string): integer;

この関数は非常に強力です。Windowsのメッセージの多くを扱えるため、様々な目的のために使用できます。 扱えるメッセージは、wParamとlParamが共にintegerであるものか、あるいはwParamがintegerでlParamがstring(ポインタ型)のもののみです。
例: var H, C, Total, K: Integer;
    S: String;
begin
    Execute('\Program Files\Accessories\WordPad.exe', 5000);
    H := FindWindow('WordPadClass', 'ワードパッド', 1000);
    SetFGWindow(H);
    C := Window[H].AfxControlBar[1].AfxControlBar[0].ComboBox[0];
    Total := SendMessage(C, CB_GETCOUNT, 0, 0);　//ComboBoxの項目数を得る
    Message(MB_OK, 'フォント種類 = ' + IntToStr(Total));
    K := SendMessage(C, CB_GETCURSEL, 0, 0); //ComboBoxの現在の項目番号を得る
    SendMessage(C, CB_GETLBTEXT, K, S);　　　//ComboBoxの現在のテキストを得る
    Message(MB_OK, '現在選択されているフォント = ' + S);
    K := K + 1;
    if K >= Total then K := 0;
    Message(MB_OK, '次のフォントを選択する');
    SetFGWindow(C);
    SendMessage(C, CB_SETCURSEL, K, 0);　　　//ComboBoxの次の項目を選択する
end;
注1.SendMessage関数において、引数の値の正当性チェックは行っていません。 このため、誤った値の組み合わせで実行すると、異常動作する可能性があります。

注2.Triple-9の関数／手続きの引数は、値渡しです。 すなわち、関数／手続きの中での値の変更は、その関数／手続きの中でのみ有効で、呼び出し元にまでは影響は及びません。ただし、組込み関数には一部例外があります。その一つがSendMessageで第4引数がstring型だった場合です。 この場合、関数内での変更は呼び出し元に戻った後にも反映されます。


SendText手続き

指定のコントロールに文字列を送信します。

procedure SendText(Handle: integer; Text: string);

Handleで指定したコントロールに、文字列 Textを送信します。 Textには漢字も使えます。制御文字等の指定の方法は、SendKeysの説明を参照してください。 ただし、マウス操作関係の制御文字およびシフト状態を指定する特殊文字は使用できません。
次の例は、ワードパッドに文字列「こんにちは。」を送信するものです。

h0 := FindWindow('WordPadClass', '文書', 5000);
h1 := Window[h0].RICHEDIT[0];
SendText(h1, 'こんにちは。{ENTER}');

注1) SendTextは、スキャンコードを正しく渡しません。 このため、DOS窓のようにスキャンコードを見るアプリケーションでは正しく動作しません。その場合は、SendKeysを使ってください。
注2) SendTextは、WM_CHARメッセージを文字数分送信することで実現しています。 このため、SendKeysと異なり、WM_KEYDOWN, WM_KEYUPイベントが発生しません。 これらのイベントを捕らえて特別な処理を行っているアプリケーションでは正しく動作しない場合もあります。 たとえば、WM_KEYDOWNイベントを捕らえて、ある範囲の文字しか受け付けない、あるいは編集が加わったことを認識するようにプログラミングされていた場合は、それらがうまく機能しません。


ShellExecute関数

アプリケーションを起動します。

function ShellExecute(Cmd, Args, Dir: string): integer;

アプリケーションを起動しますが、Execute関数と異なり、拡張子によるWindowsの関連付けを利用することもできます。 Cmd, Args, Dirでそれぞれプログラム名、コマンドライン、起動ディレクトリを指定します。
関数値は、成功した場合は32より大きい値を返します。32またはそれより小さい値の場合は、エラーコードを示します。

例) ShellExecute('C:\Program Files\Accessories\Wordpad.exe', 'Readme.doc', 'C:\Work');
    ShellExecute('Readme.doc', '', '');


WaitClose関数

指定のウィンドウが閉じる、あるいはプロセスが終了するまで待ちます。
具体的には、たとえばメニューの[ファイルを開く]までは自動で操作した後、ダイアログボックスでファイル名を入れるところだけは手動で入力し、 [OK]ボタンを押した後はまた自動で操作するというような用途があります。

function WaitClose(Handle, Mode; Timeout: integer): integer;

Handleで示すウィンドウが次の状態になるまで、あるいはTimeoutで指定した時間(msec)が経過するまで待ちます。 Timeoutに0を指定すると、無限を意味します。

Mode = 0: ウィンドウが閉じる(不可視になる)まで待ちます。
Mode = 1: ウィンドウが閉じる(破棄される)まで待ちます。
Mode = 2: ウィンドウに関連づけられたプロセスが終了するまで待ちます。

戻り値には、次の値が返ります。
    0 : ウィンドウが閉じた、あるいはプロセスが終了した
    258: タイムアウト
    他 : エラー


WaitFolder手続き

指定ディレクトリで任意のファイルが作成あるいは削除されるまで待ちます。

procedure WaitFolder(Folder: string; TimeOut: integer);

Folderで関するディレクトリを指定します。 TimeOutに0以外を指定すれば、ファイルの作成/削除がなくても指定時間が経過すれば戻ります。 0を指定すればファイルの作成/削除がない限り戻りません。


WaitUntil手続き

指定時刻になるまで実行を中断します。

procedure WaitUntil(Hour, Minute: integer);

HourとMinuteで指定する時間まで実行を中断します。 Hourは、0～23, Minuteは0～59の値でなければなりません。 既に指定の時刻を過ぎていた場合には、翌日の指定時間まで中断します。


WaitIdle関数

指定のウィンドウを作成したプロセスが、未処理の入力を受け取るまで、あるいはタイムアウトが発生するまで待ちます。
この関数を使うことにより、アプリケーションの一つの処理が終わらないうちにTriple-9の次のコマンドが実行されて 意図しない動作をすることを防ぐことができます。

function WaitIdle(Handle, TimeOut: integer): integer;

Handleで指定したウィンドウを作成したプロセスが入力待ちになるまで、あるいはTimeOut時間(単位はmsec)が経過するまで待ちます。 戻り値は、待機条件が解消されたときは0, タイムアウトのときは正の値, エラーのときは-1が返ります。

注) キャンセルや中止ボタンで処理を途中で中止できるようにしているアプリケーションなどでは、完全に処理が終わっていなくてもWaitIdle関数から戻ってくることがあります。 そのようなアプリケーションの場合には、処理が終わったことを示す他の特徴(ボタンやメニューのEnable/Disable状態、ステータスバーの表示など)を調べる必要があります。


Clear手続き

トレース画面をクリアします。

procedure Clear;


Print手続き

トレース画面に一行書き込みます。

procedure Print(Text: string);


InputBox関数

文字列を入力できる入力ダイアログボックスを表示します。

function InputBox(Caption, Prompt, Default: string): string;

InputBoxを呼び出すと，ユーザーが編集ボックスに文字列を入力できる入力ダイアログボックスを表示できます。 Captionはダイアログボックスのキャプション，Promptはユーザーに編集ボックスへの入力を促すテキスト， そしてDefaultはダイアログボックスを最初に表示したときに編集ボックスに表示されるデフォルト文字列です。
ユーザーが［キャンセル］ボタンを選択すると，InputBoxはデフォルトの文字列を返します。 ユーザーが［OK］ボタンを選択すると，InputBoxは編集ボックスの文字列を返します。
類似の関数に、PasswordBox関数があります。


Message関数

Message関数は、メッセージを表示し応答を得ます。

function Message(Buttons: integer; Text: string): integer;

ダイアログボックスにメッセージとボタンを表示します。 Textに表示する文字列を指定します。Buttonsには、表示するボタンを次のように指定します。

MB_OK | = OK
MB_YESNOCANCEL | = はい,いいえ,キャンセル
MB_OKCANCEL | = OK,キャンセル
MB_YESNO | = はい,いいえ
MB_ABORTRETRYIGNORE | = 中止,再試行,無視
MB_RETRYCANCEL | = 再試行,キャンセル

戻り値には、どのボタンを押したかによって次の値が返ります。

IDOK | = OK
IDCANCEL | = キャンセル
IDABORT | = 中止
IDRETRY | = 再試行
IDIGNORE | = 無視
IDYES | = はい
IDNO | = いいえ


MessageWait関数

一定時間経過したら自動的に閉じるメッセージボックスを表示します。

function MessageWait(Buttons: integer; Text: string; Time: integer): integer;

Textにメッセージボックスに表示させるテキストを指定します。 このメッセージボックスは、いずれかのボタンを押すか、あるいはTime(単位はmsec)経過後、自動的に閉じます。
引数Buttonsと、関数戻り値についてはMessage関数を参照してください。
タイムアウトの時の関数戻り値には、その時点でフォーカスのあるボタンを押したのと等価な値が返ります。 Buttonsに次の値を加えると、デフォールトのボタンを変更できます。

MB_DEFBUTTON1 (0) | : 一つ目のボタン
MB_DEFBUTTON2 ($100) | : 二つ目のボタン
MB_DEFBUTTON3 ($200) | : 三つ目のボタン

例: MessageWait(MB_YESNO or $100, '終了します', 5000);

procedure MessageWait(Text: string; Time: integer); の形式も使えますが、これは旧バージョンとの互換性のために残してあるものですので使用しないでください。


OpenDlg関数

ファイル選択用の［ファイルを開く］ダイアログボックスを表示します。

function OpenDlg(Title, InitialDir, Filter: string): string;

ファイルを選択したり、ファイルを開いたりするためのモード付きのWindowsダイアログボックスを表示します。
［開く］をクリックすると、ダイアログボックスが閉じて、選択されたファイルのパス名が返ります。[キャンセル]を押した場合には、空の文字列が返ります。

Title | ダイアログボックスのタイトルバーに表示されるテキストを指定します。長さ0のテキストを指定すると、「ファイルを開く」になります。
InitialDir | ダイアログボックスが開いたときのディレクトリを指定します。長さ0のテキストを指定すると、カレント作業ディレクトリになります。
Filter | ダイアログボックスで使用できるファイルマスク(フィルタ)を指定します。縦棒(パイプ)で区切られた説明とマスクで構成されます。縦棒の両側にはスペースを入れないでください。たとえば次のようになります。 'Text files (*.txt)|*.TXT' 複数のフィルタは縦棒で区切らなければなりません。たとえば次のようになります。 'Text files (*.txt)|*.TXT|Script files (*.sc9)|*.SC9' 1つのフィルタに複数のマスクを含めるには，マスクをセミコロンで区切ります。たとえば次のようになります。 'Pascal files|*.PAS;*.DPK;*.DPR' 長さ0のテキストの場合、ダイアログボックスはすべてのファイルの種類を表示します。
戻り値 | 選択されたファイルのパス名


PasswordBox関数

パスワードを入力できる入力ダイアログボックスを表示します。

function PasswordBox(Caption, Prompt, Default: string): string;

入力した文字が「*」で表示されるほかはInputBox関数と同じです。


SaveDlg関数

ファイルの保存に使う［ファイル名を付けて保存］ダイアログボックスを表示します。

function SaveDlg(Title, InitialDir, Filter: string): string;

ファイル名を選択してファイルを保存するときに使うモード付きWindowsダイアログボックスを表示します。
［保存］をクリックすると、ダイアログボックスが閉じて、選択されたファイルのパス名が返ります。 [キャンセル]を押した場合には、空の文字列が返ります。

Title | ダイアログボックスのタイトルバーに表示されるテキストを指定します。長さ0のテキストを指定すると、「ファイル名をつけて保存」になります。
InitialDir | ダイアログボックスが開いたときのディレクトリを指定します。空のテキストを指定すると、カレント作業ディレクトリになります。
Filter | ダイアログボックスで使用できるファイルマスク(フィルタ)を指定します。詳しくは、OpenDlg関数の説明を参照してください。
戻り値 | 選択されたファイルのパス名


コントロールへのメッセージの送信

各種のコントロールを操作するには、Triple-9組み込みの関数／手続き以外に、メッセージをSendMessage関数で送信する方法があります。
各コントロールのレファレンスには、Triple-9で扱える代表的なメッセージについて解説していますが、これがすべてではありません。 解説しているもの以外にも多くのメッセージを操作できます。
詳しくは、DelphiやVC++などに付属しているWIN32 SDKのオンラインヘルプを参照してください。


FindPopup関数

ポップアップウィンドウを捜します。

function FindPopup(Title: string; [Timeout: integer]): integer;

ポップアップウィンドウを捜し、そのハンドルを取得します。 これにより、たとえばダイアログボックス「ファイルを開く」を取得できます。 Titleで検索するウィンドウのタイトル文字列を指定します。 タイトル全体を指定しなければなりません。FindWindow関数と異なり、トップレベル以外のウィンドウも捜しますが、可視状態でなければなりません。
Timeoutはオプションです。指定した場合には、ウィンドウが見つからない時でもtimeout時間(単位はmsec)が経過するまで何度も試します。 timeout時間が経過しても見つからない場合は0を返します。

例 :　ClickMenu(h0, 'ファイル(&F),開く(&O)');
      h1 := FindPopup('ファイルを開く', 500);


FindWindow関数

アプリケーションのウィンドウを捜します。

function FindWindow(Class, Title: string; [Timeout: integer]): integer;

クラス名およびウィンドウに関連づけられたテキストによってトップレベルウィンドウを検索し、そのハンドルを取得します。
Classで検索するウィンドウのクラス名を指定します。 長さ0の文字列の場合は任意のクラスを捜します。 Titleで検索するウィンドウのタイトル文字列を指定します。一部分の文字列のみで近似検索ができます。 見つかったときは、そのウィンドウハンドルが返ります。
Timeoutはオプションです。 指定した場合には、ウィンドウが見つからない時でもtimeout時間(単位はmsec)が経過するまで何度も試します。 timeout時間が経過してもウィンドウが見つからない場合は0を返します。

例:　H := FindWindow('WordPadClass', 'ワードパッド'); //ワードパッドを捜す


GetClassName関数

指定のウィンドウのクラス名を取得します。

function GetClassName(Handle: integer): string;

Handleで示すウィンドウのクラス名を取得します。


GetDlgItem関数

コントロールＩＤからコントロールのウィンドウハンドルを得ます。

function GetDlgItem(DlgHandle, CtrlID: integer); integer;

コントロールが属するダイアログボックスのウィンドウハンドル(DlgHandle）と、コントロールＩＤ(CtrlID)とから、そのコントロールのウィンドウハンドルを取得します。 エラーの場合は0が返ります。

例: 次のコードは、Windows付属の電卓で計算結果を表示するStatic Controlのテキストを取得して表示するものです。
var H, C: Integer;
begin
  H := FindWindow('SciCalc', '電卓');
  C := GetDlgItem(H, 414);
  Message(MB_OK, '結果 = ' + GetText(C));
end;


GetFGWindow関数

前面でActiveなウィンドウを調べます。

function GetFGWindow: integer;


GetFocus関数

入力フォーカスを有しているウィンドウ、またはコントロールのハンドルを取得します。

function GetFocus: integer;

入力フォーカスを有しているウィンドウのハンドルを取得します。
入力フォーカスを有しているウィンドウがない場合は0が返ります。


GetScrollInfo関数

スクロールバーの状態を取得します。

function GetScrollInfo(Handle, nBar, nMin, nMax, nPage, nPos): boolean;

Handleで示す標準スクロールバーを持つウィンドウ、またはスクロールバーコントロールの現在の状態を取得します。nBarには次の値を設定します。
    nBar = 0 : ウィンドウの標準水平スクロールバーの状態を取得する
    nBar = 1 : ウィンドウの標準垂直スクロールバーの状態を取得する
    nBar = 2 : スクロールバーコントロールの状態を取得する

成功すると、各変数に次の値がセットされ、関数値はTrueとなります。
    nMin : 最小スクロール位置
    nMax : 最大スクロール位置
    nPage: ページサイズ
    nPos : つまみの位置


GetText関数

指定したコントロールのテキストを取得します。

function GetText(Handle: integer): string;

指定したコントロールのテキスト (フォームであればタイトルのテキスト、エディットコントロールであればそのテキスト、その他) を取得します。
(注) RichEditコントロールでWindowsがNT/2000/XPの場合、取得できるテキストの最大長が約4000バイトに制限されます。 通常のEditコントロールやその他のウィンドウ(フォームやステータスバーなど)、およびRichEditでもWindows95/98ではこの制限はありません。


GetWindow関数

指定のウィンドウと特定の関係にあるウィンドウのハンドルを取得します。

function GetWindow(Handle, Cmd: integer): integer;

Handleで示すウィンドウとCmdで指定した関係にあるウィンドウのハンドルを取得します。 Handleに0を指定した時はDesktop Windowを意味します。 ウィンドウが見つからない場合は、0が返ります。Cmdには次の値を指定できます。
    0 = GW_HWNDFIRST
    1 = GW_HWNDLAST
    2 = GW_HWNDNEXT
    3 = GW_HWNDPREV
    4 = GW_OWNER
    5 = GW_CHILD

例: 次のスクリプトでトップレベルのウィンドウの一覧を作成し、起動中のワードパッドに表示します。
var h: integer;
    Txt: String;
begin
    h := GetWindow(0, 5);
    while h <> 0 do begin
        Txt := Txt + GetClassName(h) + Chr(13) + Chr(10);
        h :=  GetWindow(h, 2);
    end;
    h := FindWindow('WordPadClass', 'ワードパッド', 5000);
    SetFGWindow(h);
    SetText(Window[h].RICHEDIT[0], Txt);
end;


GetWindowPos手続き

ウィンドウの位置とサイズ情報を取得します。

procedure GetWindowPos(Handle, Left, Top, Width, Height: Integer);

Handleで示すウィンドウの位置とサイズ情報を取得します。
Left, Top, Width, Heightにそれぞれ左上隅のX座標、Y座標、幅、高さが得られます。


IsWindow関数

ウィンドウが有効かどうか調べます。

function IsWindow(Handle: integer): boolean;

Handleで示すウィンドウが有効であればTrue、無効であればFalseが返ります。
ある時点で有効であったウィンドウも、閉じた後では無効になります。そのウィンドウがまだ有効かどうかを調べるのに使えます。


IsWindowEnabled関数

Handleで示すウィンドウがEnableであればTrueを返します。

function IsWindowEnabled(Handle: integer): boolean;


IsWindowVisible関数

Handleで示すウィンドウがVisibleであればTrueを返します。

function IsWindowVisible(Handle: integer): boolean;


SetFGWindow手続き

ウィンドウを前面に持ってきます。

procedure SetFGWindow(Handle: integer);

Handleで指定したウィンドウを前面に持ってきてActivateします。


SetFocus手続き

Handleで指定したウィンドウに入力フォーカスを与えます。

procedure SetFocus(Handle: integer);


SetScrollInfo手続き

スクロールバーの状態を設定します。

procedure SetScrollInfo(Handle, nBar, nMin, nMax, nPage, nPos);

Handleで示す標準スクロールバーを持つウィンドウ、またはスクロールバーコントロールの状態を設定します。nBarには次の値を設定します。
    nBar = 0 : ウィンドウの標準水平スクロールバーの状態を設定する
    nBar = 1 : ウィンドウの標準垂直スクロールバーの状態を設定する
    nBar = 2 : スクロールバーコントロールの状態を設定する

また、各変数には次の値を設定します。現在の値から変更したくないパラメータには-1を設定します。
    nMin : 最小スクロール位置
    nMax : 最大スクロール位置
    nPage: ページサイズ
    nPos : つまみの位置


SetText手続き

指定したコントロールにテキストをセットします。

procedure SetText(Handle: integer; Text: string);

ウィンドウのタイトルやボタン等のテキストを変更します。Handleで変更するウィンドウまたはコントロール、Textで文字列を指定します。


SetWindowPos手続き

ウィンドウの位置とサイズを変更します。

procedure SetWindowPos(Handle, Left, Top, Width, Height: Integer);

Handleで示すウィンドウの位置とサイズを設定します。
Left, Top, Width, Heightにそれぞれ左上隅のX座標、Y座標、幅、高さを指定します。


ShowWindow関数

ウィンドウの表示状態を変更します。

function ShowWindow(Handle, Command: integer): boolean;

Handleで示すウィンドウの表示状態を変更します。Commandの値によって次のように動作します。
0 = (SW_HIDE) ウィンドウを表示しません。
1 = (SW_SHOWNORMAL) ウィンドウを通常サイズで表示します。
2 = (SW_SHOWMINIMIZED) ウィンドウを最小化します。
3 = (SW_SHOWMAXMIZED) ウィンドウを最大化します。
4 = (SW_SHOWNOACTIVATE) 直前のサイズと位置で表示し、アクティブウィンドウをアクティブなままにします。
5 = (SW_SHOW) ウィンドウを現在のサイズと位置で表示します。
6 = (SW_MINIMIZE) ウィンドウを最小化し、システムのリスト中のトップレベルウィンドウをアクティブにします。
7 = (SW_SHOWMINNOACTIVE) ウィンドウを最小化し、アクティブウィンドウをアクティブなままにします。
8 = (SW_SHOWNA) ウィンドウを現在の状態で表示し、アクティブウィンドウをアクティブなままにします。
9 = (SW_RESTORE) ウィンドウをアクティブにして表示します。ウィンドウが最小化または最大化されている場合は、そのサイズと位置を元に戻します。
10 = (SW_SHOWDEFAULT) アプリケーション起動時に使用した標準の指定にしたがって表示状態を設定します。

関数の戻り値は、ウィンドウがそれまで可視状態だったときはTrue、そうでなければFalseです。


WM_CLOSE

WM_CLOSE (16) メッセージ

ウィンドウまたはアプリケーションを終了させます。

SendMessage(Handle, WM_CLOSE, 0, 0);


ClickMenu関数

メニューバー上のメニュー項目を、マウスでクリックします。

function ClickMenu(Handle: integer; Menus: string): boolean;

Menusで指定するメニューバー上のメニュー項目をマウスでクリックします。 サブメニューがある場合はそれらをカンマ(,)で区切ってください。 Handleでメニューの属するウィンドウを指定します。 この関数を実行する時点で、当該メニュー項目が画面上に見えていなければなりません。 見えていない場合は期待しない動作をします。 メニューを識別するテキストは、メニューに表示されている文字列をそのまま指定します。 全体ではなく一部分でも構いません。アクセラレータキーがある場合は、その直前に「&」が必要です。
戻り値には、メニューが存在した場合Trueが返ります。

例: ClickMenu(Handle, 'ファイル(&F),閉じる(&C)');

注) フローティングポップアップメニュー(マウスの右ボタンで現れるメニュー)の場合にはHandleを0で指定します。
例: SendKeys('{400:400}{RDOWN}{RUP}');
    ClickMenu(0, '貼り付け');

注) SHIFTやCTRLを同時に押しながらメニューを選択する場合は、メニュー項目名の前にそれぞれ、「~」、「^」をつけます。たとえば、SHIFTキーを押しながら削除メニューを実行するには次のように記述します。
ClickMenu(Handle, 'ﾌｧｲﾙ(&F), ~削除(&D)');

注) 一部にはテキストでメニュー項目を指定できないものがあります。メニュー項目にアイコンを持っているものにこのようなものがあります。そのような場合には、先頭から何番目か(1から数える)を、前に「#」をつけて指定できます。
例: ClickMenu(Handle, 'ﾌｧｲﾙ(&F),新規作成(&W),#2');

注) 同様な機能を持つ関数にSelectMenu関数があります。SelectMenuは、メニュー項目が他のウィンドウの裏に隠れていても実行できるという利点があります。
しかし、マウスクリックなどのイベントが発生しないため、イベントによって特別な処理を行っているアプリケーションでは、通常操作の場合と全く同じ動作にならない場合があります。 その場合には、このClickMenuを使用してください。


GetMenuState関数

メニューの状態を取得します。

function GetMenuState(Handle: integer; Menus: string): integer;

Menusで指定するメニューの状態を取得します。 サブメニューがある場合はそれらをカンマ(,)で区切ってください。 Handleでメニューの属するウィンドウを指定します。メニューを識別するテキストは、メニューに表示されている文字列をそのまま指定します。 アクセラレータキーがある場合は、その直前に「&」が必要です。 戻り値は、以下のビット単位でORをとった値です。

MF_GRAYED = 1 | : メニュー項目は淡色表示である
MF_DISABLED = 2 | : メニュー項目はDisable状態である
MFS_BITMAP = 4 | : ビットマップを使ってメニューを表示している
MFS_CHECKED = 8 | : メニュー項目の横にチェックマークが配置されている
MFS_HILITE = 128 | : メニュー項目はハイライト表示されている

上記以外の値については、Windows APIのGetMenuStateを参照してください。


SelectMenu関数

メニューを選択し、実行します。

function SelectMenu(Handle: integer; ID: integer): boolean;
function SelectMenu(Handle: integer; Menus: string): boolean;

Handleでメニューの属するウィンドウを指定します。 フローティングポップアップメニュー(マウスの右ボタンで現れるメニュー)では、Handleを0にします。

1番目の書式では、IDでメニューID(整数値)を指定します。戻り値には常にTrueが返ります。
この書式はHandleの値が0の場合は使えません。
例: SelectMenu(Handle, 105);

2番目の書式では、Menusでメニュー文字列を指定します。 メニューが存在し実行できた場合にはTrueが返ります。メニューが存在しない、あるいはdisableだった時はFalseが返ります。
メニューを識別するテキストは、メニューに表示されている文字列をそのまま指定します。全体ではなく一部分でも構いません。 アクセラレータキーがある場合は、その直前に「&」が必要です。サブメニューがある場合はそれらをカンマ(,)で区切ってください。
例 SelectMenu(Handle, 'ファイル(&F),閉じる(&C)');

メニューの文字列の中にタブ、スペース、カンマがある場合には、そのメニューの前後をダブルクォート(")で括ってください。 次の例は、Ctrl+Xの手前にタブがある場合です。
例: SelectMenu(Handle, '編集(&F),"切り取り(&T) Ctrl+X"');

似た機能を持つ関数として、ClickMenu関数があります。違いについては、ClickMenuの説明を参照してください。


SetMenuState関数

メニュー項目の状態を設定します。

function SetMenuState(Handle: integer; Menus: string; State: Integer): integer;

Menusで指定するメニューの状態を設定します。 サブメニューがある場合はそれらをカンマ(,)で区切ってください。 Handleでメニューの属するウィンドウを指定します。Stateには、下記に示すフラグをorで加算した値を与えます。
メニューを識別するテキストは、メニューに表示されている文字列をそのまま指定します。 アクセラレータキーがある場合は、その直前に「&」が必要です。 戻り値は、以前の状態の値が返ります。メニュー項目が存在しない場合は-1が返ります。

MF_GRAYED = 1 | : メニュー項目を無効にして淡色表示にします
MF_DISABLED = 2 | : メニュー項目を無効にします
MFS_CHECKED = 8 | : メニュー項目にチェックをつけます


WaitMenu関数

指定のメニュー項目がEnableになるまで待ちます。

function WaitMenu(Handle: integer; Menus: string; State: Integer; Timeout: Integer): boolean;

指定のメニュー項目がEnableになるまで待ちます。HandleとMenusの指定の方法は、ClickMenuまたはGetMenuState関数を参照してください。
指定のメニューがEnableになればTrueで戻ります。Timeoutで指定した時間(単位: ミリ秒)が経過してもEnableにならなかった場合は、Falseで戻ります。


BM_SETCHECK

BM_SETCHECK (241) メッセージ

ラジオボタンまたはチェックボックスのチェック状態を設定します。

Ret := SendMessage(Handle, BM_SETCHECK, State, 0);

Handle | ラジオボタンまたはチェックボックスのハンドル
State | BST_UNCHECKED (0) | ボタンはチェックされていない
 | BST_CHECKED (1) | ボタンがチェックされている
 | BST_INDETERMINATE (2) | グレー表示(不定状態)
戻り値 | 常に0

注) ラジオボタンまたはチェックボックスを押す操作は、通常、このメッセージではなくPushButton関数を使用してください。


GetState関数

指定したラジオボタンあるいはチェックボックスの状態を取得します。

function GetState(Handle: integer): integer;

Handleに調べるラジオボタンあるいはチェックボックスを指定します。 戻り値には、各ビットに情報が返りますので、次のマスクをかけて情報を取り出してください。
マスク | 意味
3 | 0=未チェック状態、1=チェック状態、2=中間状態
4 | 1=ハイライト状態(ボタンが押された状態)
8 | 1=キーボードフォーカスがある状態

注) Enable/Disable状態、Visible状態の取得は、 IsWindowEnabled, IsWindowVisible関数を使用してください。


PushButton関数

ボタンを押します。

function PushButton(Handle: integer; [Name: string;] [Timeout: Integer]): boolean;

指定したボタンを押します。ボタンの指定方法には次の3種類があります。
1) オプションNameがない場合
Handleでボタンそのものを指定します。
2) Nameがあり、Handle≠0の場合
Handleでボタンの所属する親ウィンドウ(直接の親でなくても祖先であれば良い)を指定し、Nameでボタンを識別するテキストを指定します。
3) Nameがあり、Handle＝0の場合
現在アクティブなウィンドウの子のうち、Nameで識別されるボタン。

テキストはボタンの上に表示されている文字列そのままです。 アクセラレータキーがある場合は、その直前に「&」が必要です。 成功したときTrue、指定したボタンが見つからないときFalseを返します。

PushButtonにはタイムアウトがあります。 引数Timeoutを指定している場合は、そこに指定している値がタイムアウト時間です。 引数Timeoutを指定していない場合は、デフォールトで[設定-実行時オプション]で指定した値です。
ボタンが表示されEnableになるのを最大Timeout ミリ秒待ってから押します。 もしTimeout ミリ秒待ってもEnableにならない場合は次のように動作します。

a) [設定-実行時オプション]の[押せなかった場合]で[無視]を選択している場合
単にPushButton関数を無視して、次のコマンドから継続実行します。
b) [設定-実行時オプション]の[押せなかった場合]で[ダイアログ表示]を選択している場合
次のダイアログが表示されます。ここで、[中止]、[再試行]、[無視]の中から選択できます。

例: PushButton(H, '開く(&O)');
    PushButton(H, '実行', 5000);


EditGetLine関数

複数行エディットコントロールの特定の一行を取得します。

function EditGetLine(Handle, Line: integer): string;

Handleで示す複数行エディットコントロールまたはリッチエディットコントロールのLineで示す行(先頭行は0)のテキストを取得します。 Lineがエディットコントロールにある行数より大きい場合は、空のテキストが得られます。


EM_GETFIRSTVISIBLELINE

EM_GETFIRSTVISIBLELINE (206) メッセージ

エディットコントロール中の一番上の可視行を取得します。

Ret := SendMessage(Handle, EM_GETFIRSTVISIBLELINE, 0, 0);

Handle | エディットコントロールのハンドル
戻り値 | 一番上の可視行の(0から始まる)インデックス値


EM_GETLINECOUNT

EM_GETLINECOUNT (186) メッセージ

エディットコントロール中の行数を取得します。

Ret := SendMessage(Handle, EM_GETLINECOUNT, 0, 0);

Handle | エディットコントロールのハンドル
戻り値 | テキストが含まれている場合はその行数。そうでない場合は1


EM_LINESCROLL

EM_LINESCROLL (182) メッセージ

テキストを垂直または水平にスクロールします。

Ret := SendMessage(Handle, EM_LINESCROLL, HChars, VLines);

Handle | エディットコントロールのハンドル
HChars | 水平にスクロールする文字数
VLines | 垂直にスクロールする行数
戻り値 | 単一行エディットコントロールの時0、複数行の時0以外


EM_REPLACESEL

EM_REPLACESEL (194) メッセージ

エディットコントロールの現在の選択を指定のテキストに置き換えます。現在の選択がない場合は、キャレットの位置に挿入します。

SendMessage(Handle, EM_REPLACESEL, Flag, Text);

Handle | エディットコントロールのハンドル
Flag | 0を指定すると置換は元に戻せません。0以外の場合は、元に戻せます。
Text | 置き換えるテキスト


EM_SCROLL

EM_SCROLL (181) メッセージ

複数行エディットコントロール中で垂直にスクロールします。

Ret := SendMessage(Handle, EM_SCROLL, Mode, 0);

Handle | エディットコントロールのハンドル
Mode | SB_LINEUP (0) | 1行上にスクロールする
 | SB_LINEDOWN (1) | 1行下にスクロールする
 | SB_PAGEUP (2) | 1ページ上にスクロールする
 | SB_PAGEDOWN (3) | 1ページ下にスクロールする
戻り値 | 一番上の可視行の(0から始まる)インデックス値


EM_SETSEL

EM_SETSEL (177) メッセージ

エディットコントロール中のある範囲のテキストを選択します。

Ret := SendMessage(Handle, EM_SETSEL, First, Last);

Handle | エディットコントロールのハンドル
First | 選択の開始文字位置
Last | 選択の終了文字位置


EM_UNDO

EM_UNDO (199) メッセージ

直前の編集操作を元に戻します。

Ret := SendMessage(Handle, EM_UNDO, 0, 0);

Handle | エディットコントロールのハンドル
戻り値 | 複数行エディットコントロールで戻す操作を失敗した時は0、それ以外では非0が返ります。


WM_CLEAR

WM_CLEAR (771) メッセージ

現在選択している文字列を削除します。

SendMessage(Handle, WM_CLEAR, 0, 0);


WM_COPY

WM_COPY (769) メッセージ

現在選択している文字列をクリップボードにコピーします。

SendMessage(Handle, WM_COPY, 0, 0);


WM_CUT

WM_CUT (768) メッセージ

現在選択している文字列を切り取り、クリップボードにコピーします。

SendMessage(Handle, WM_CUT, 0, 0);


WM_PASTE

WM_PASTE (770) メッセージ

クリップボードから文字列を貼り付けます。

SendMessage(Handle, WM_PASTE, 0, 0);


WM_UNDO

WM_UNDO (772) メッセージ

直前の操作を元に戻します。

Ret := SendMessage(Handle, WM_UNDO, 0, 0);

戻り値　　成功すれば非0


CB_FINDSTRING

CB_FINDSTRING (332) メッセージ

コンボボックスのリストボックスから指定された文字列で始まる項目を探します。

Ret := SendMessage(Handle, CB_FINDSTRING, StartPos, Text);

Handle | コンボボックスのハンドル
StartPos | 検索を開始する項目の(0から始まる)インデックス値
Text | 検索する文字列
戻り値 | 一致した項目のインデックス値。失敗した場合は-1


CB_FINDSTRINGEXACT

CB_FINDSTRINGEXACT (344) メッセージ

コンボボックスのリストボックスから指定された文字列と一致する項目を探します。

Ret := SendMessage(Handle, CB_FINDSTRINGEXACT, StartPos, Text);

Handle | コンボボックスのハンドル
StartPos | 検索を開始する項目の(0から始まる)インデックス値
Text | 検索する文字列
戻り値 | 一致した項目のインデックス値。失敗した場合は-1


CB_GETCOUNT

CB_GETCOUNT (326) メッセージ

コンボボックスのリストボックス中の項目数を取得します。

Ret := SendMessage(Handle, CB_GETCOUNT, 0, 0);

Handle | コンボボックスのハンドル
戻り値 | リストボックス中の項目数


CB_GETCURSEL

CB_GETCURSEL (327) メッセージ

コンボボックスのリストボックス中の、現在選択されている項目のインデックス値を取得します。

Ret := SendMessage(Handle, CB_GETCURSEL, 0, 0);

Handle | コンボボックスのハンドル
戻り値 | リストボックス中の現在選択されている項目のインデックス値


CB_GETDROPPEDSTATE

CB_GETDROPPEDSTATE (343) メッセージ

コンボボックスのリストボックスがドロップダウンされているかどうかを判定します。

Ret := SendMessage(Handle, CB_GETDROPPEDSTATE, 0, 0);

Handle | コンボボックスのハンドル
戻り値 | リストボックスが可視状態の時は0以外、そうでない時は0が返ります。


CB_GETLBTEXT

CB_GETLBTEXT (328) メッセージ

コンボボックスのリストから文字列を取得します。

Ret := SendMessage(Handle, CB_GETLBTEXT, Index, Text);

Handle | コンボボックスのハンドル
Index | 取得したい項目の(0から始まる)インデックス値
Text | 文字列を受け取るstring型変数
戻り値 | 文字列のバイト数。失敗した場合は-1


CB_SELECTSTRING

CB_SELECTSTRING (333) メッセージ

コンボボックスのリストから指定した文字列で始まる項目を探し、それを選択します。

Ret := SendMessage(Handle, CB_SELECTSTRING, StartPos, Text);

Handle | コンボボックスのハンドル
StartPos | 検索を開始するリスト項目の(0から始まる)インデックス値
Text | 検索する文字列
戻り値 | 選択された項目のインデックス値。失敗した場合は-1


CB_SETCURSEL

CB_SETCURSEL (334) メッセージ

コンボボックスのリスト中の文字列を選択します。 もし必要ならその文字列が可視になるようにリストがスクロールされます。 コンボボックスのエディットコントロールは、新しい選択に合わせて変化します。

Ret := SendMessage(Handle, CB_SETCURSEL, Index, 0);

Handle | コンボボックスのハンドル
Index | 選択する項目の(0から始まる)インデックス値。-1の場合、選択は解除されます。
戻り値 | 選択された項目のインデックス値。Indexがリスト中の項目より大きいか-1の時は-1が返され、選択がクリアされます。


CB_SETTOPINDEX

CB_SETTOPINDEX (348) メッセージ

コンボボックスのリストボックス中で特定の項目が可視になるようにスクロールします。

Ret := SendMessage(Handle, CB_SETTOPINDEX, Pos, 0);

Handle | コンボボックスのハンドル
Pos | リスト項目の(0から始まる)インデックス値
戻り値 | 成功した場合0。そうでない場合は-1


CB_SHOWDROPDOWN

CB_SHOWDROPDOWN (335) メッセージ

コンボボックスのリストボックスを表示または非表示にします。

Ret := SendMessage(Handle, CB_SHOWDROPDOWN, Flag, 0);

Handle | コンボボックスのハンドル
Flag | 0以外で表示、0で非表示
戻り値 | 常に非0値


ComboBoxSelect関数

コンボボックスの項目を選択します。

function ComboBoxSelect(Handle: integer; Pos: integer): integer;
  または
function ComboBoxSelect(Handle: integer; Pos: integer; Text: string): integer;

この関数には2つの形式があり、第三引数Textがない形式では、ドロップダウンリスト中のPos番目の項目を選択します。 第三引数Textがある形式では、Textで始まる文字列をPos番目から捜しそれを選択します。

Handle | コンボボックスのハンドル
Pos | 引数Textがない書式では、選択する項目の(0から始まる)インデックス値。 引数Textがある書式では、検索を開始するインデックス値。
Text | 検索する文字列
戻り値 | 選択された項目のインデックス値。失敗した場合は-1


LB_FINDSTRING

LB_FINDSTRING (399) メッセージ

リストボックスから指定された文字列で始まる項目を探します。

Ret := SendMessage(Handle, LB_FINDSTRING, StartPos, Text);

Handle | リストボックスのハンドル
StartPos | 検索を開始する項目の(0から始まる)インデックス値。この項目自身は検索の対象になりません。検索がリストボックスの最後に達した場合は、また先頭に戻って検索します。
Text | 検索する文字列
戻り値 | 一致した項目のインデックス値。失敗した場合は-1


LB_FINDSTRINGEXACT

LB_FINDSTRINGEXACT (418) メッセージ

リストボックスから指定された文字列に一致する項目を探します。

Ret := SendMessage(Handle, LB_FINDSTRINGEXACT, StartPos, Text);

Handle | リストボックスのハンドル
StartPos | 検索を開始する項目の(0から始まる)インデックス値。この項目自身は検索の対象になりません。検索がリストボックスの最後に達した場合は、また先頭に戻って検索します。
Text | 検索する文字列
戻り値 | 一致した項目のインデックス値。失敗した場合は-1


LB_GETCOUNT

LB_GETCOUNT (395) メッセージ

リストボックスの項目の数を取得します。

Ret := SendMessage(Handle, LB_GETCOUNT, 0, 0);

Handle | リストボックスのハンドル
戻り値 | 項目の数。失敗した場合は-1


LB_GETCURSEL

LB_GETCURSEL (392) メッセージ

リストボックスの現在選択されている項目のインデックス値を取得します。 複数選択リストボックスの場合は、選択されている先頭の項目のインデックス値が得られます。

Ret := SendMessage(Handle, LB_GETCURSEL, 0, 0);

Handle | リストボックスのハンドル
戻り値 | 選択されている項目のインデックス値。選択がない場合は-1


LB_GETSEL

LB_GETSEL (391) メッセージ

項目の選択状態を取得します。

Ret := SendMessage(Handle, LB_GETSEL, Index, 0);

Handle | リストボックスのハンドル
Index | 項目のインデックス値
戻り値 | 選択されている場合は0より大きな値。そうでない場合は0


LB_GETSELCOUNT

LB_GETSELCOUNT (400) メッセージ

複数選択リストボックスにおいて、選択されている項目の総数を取得します。

Ret := SendMessage(Handle, LB_GETSELCOUNT, 0, 0);

Handle | リストボックスのハンドル
戻り値 | 選択されている項目の数。単一選択リストボックスでは-1


LB_GETTEXT

LB_GETTEXT (393) メッセージ

リストボックスから文字列を取得します。

Ret := SendMessage(Handle, LB_GETTEXT, Index, Text);

Handle | リストボックスのハンドル
Index | 項目のインデックス値
Text | 文字列を受け取るstring型変数
戻り値 | 文字列の長さ。失敗した場合は-1


LB_GETTOPINDEX

LB_GETTOPINDEX (398) メッセージ

リストボックスの最初の可視項目のインデックス値を取得します。

Ret := SendMessage(Handle, LB_GETTOPINDEX, 0, 0);

Handle | リストボックスのハンドル
戻り値 | 最初の可視項目のインデックス値


LB_SELECTSTRING

LB_SELECTSTRING (396) メッセージ

リストボックスから指定された文字列で始まる項目を探し、選択します。

Ret := SendMessage(Handle, LB_SELECTSTRING, StartPos, Text);

Handle | リストボックスのハンドル
StartPos | 検索を開始する項目の(0から始まる)インデックス値。この項目自身は検索の対象になりません。検索がリストボックスの最後に達した場合は、また先頭に戻って検索します。-1の場合は先頭から探します。
Text | 検索する文字列
戻り値 | 選択された可視項目のインデックス値。失敗した場合は-1


LB_SETCURSEL

LB_SETCURSEL (390) メッセージ

リストボックス中の文字列を選択します。もし必要ならその文字列が可視になるようにリストがスクロールされます。

Ret := SendMessage(Handle, LB_SETCURSEL, Index, 0);

Handle | リストボックスのハンドル
Index | 項目のインデックス値。-1の場合、選択がない状態になります。
Text | 検索する文字列
戻り値 | エラーの場合-1。Indexが-1のときは常に-1


LB_SETSEL

LB_SETSEL (389) メッセージ

複数選択リストボックス中の文字列を選択します。

Ret := SendMessage(Handle, LB_SETSEL, Mode, Index);

Handle | リストボックスのハンドル
Mode | 0以外のとき選択され、0のとき選択が解除されます。
Index | 項目のインデックス値。-1の場合Modeの値によって、選択が追加されるか、またはすべての選択が解除されます。
戻り値 | エラーの場合-1


LB_SETTOPINDEX

LB_SETTOPINDEX (407) メッセージ

リストボックスで特定の項目が可視になるようにスクロールします。

Ret := SendMessage(Handle, LB_SETTOPINDEX, Index, 0);

Handle | リストボックスのハンドル
Index | 項目のインデックス値
戻り値 | エラーの場合-1


ListBoxSelect関数

リストボックスの項目を選択します。

function ListBoxSelect(Handle: integer; Pos: integer): integer;

リストボックスのPos番目の項目を選択します。

Handle | リストボックスのハンドル
Pos | 選択する項目の(0から始まる)インデックス値。
戻り値 | 成功した場合は0以外。失敗した場合は0


TabClick関数

指定したタブに切り替えます。

function TabClick(Handle, Item: Integer): boolean;

Handleで示すタブコントロールの、Item番目(先頭は0)のタブを選択します。
成功すればTrueを返します。

注) この関数はマウス操作を伴います。 マウスは動かさずにタブのみ選択するには、TCM_SETCURFOCUSが使えます。


TabGetText関数

タブに関連づけられたテキストを取得します。

function TabGetText(Handle, Item: Integer): string;

Handleで示すタブコントロールの、Item番目(先頭は0)のタブに関連づけられたテキストを取得します。


TCM_GETCURFOCUS

TCM_GETCURFOCUS (4911) メッセージ

フォーカスのあるタブコントロールのインデックスを取得します。

Ret := SendMessage(Handle, TCM_GETCURFOCUS, 0, 0);

Handle | タブコントロールのハンドル
戻り値 | フォーカスのあるタブコントロールのインデックス


TCM_GETCURSEL

TCM_GETCURSEL (4875) メッセージ

現在選択されているタブのインデックスを取得します。

Ret := SendMessage(Handle, TCM_GETCURSEL, 0, 0);

Handle | タブコントロールのハンドル
戻り値 | 選択されているタブのインデックス


TCM_GETITEMCOUNT

TCM_GETITEMCOUNT (4868) メッセージ

タブコントロールにあるタブの個数を取得します。

Ret := SendMessage(Handle, TCM_GETITEMCOUNT, 0, 0);

Handle | タブコントロールのハンドル
戻り値 | タブの個数


TCM_GETROWCOUNT

TCM_GETROWCOUNT (4908) メッセージ

タブコントロールにあるタブの行数を取得します。

Ret := SendMessage(Handle, TCM_GETROWCOUNT, 0, 0);

Handle | タブコントロールのハンドル
戻り値 | タブの行数


TCM_SETCURFOCUS

TCM_SETCURFOCUS (4912) メッセージ

タブコントロールにあるタブを選択し、フォーカスを与えます。

Ret := SendMessage(Handle, TCM_SETCURFOCUS, Item, 0);

Handle | タブコントロールのハンドル
Item | 選択するタブのインデックス
戻り値 | 成功した場合は前回のタブインデックス。失敗した場合は-1


TCM_SETCURSEL

TCM_SETCURSEL (4876) メッセージ

タブコントロールにあるタブを選択します。

Ret := SendMessage(Handle, TCM_SETCURSEL, Item, 0);

Handle | タブコントロールのハンドル
Item | 選択するタブのインデックス
戻り値 | 成功した場合は前回のタブインデックス。失敗した場合は-1


TB_BUTTONCOUNT

TB_BUTTONCOUNT (1048) メッセージ

ツールバーにあるボタンの数を取得します。

Ret := SendMessage(Handle, TB_BUTTONCOUNT, 0, 0);

Handle | ツールバーのハンドル
戻り値 | ボタンの数


TB_CHECKBUTTON

TB_CHECKBUTTON (1026) メッセージ

ツールバー内のボタンをチェックまたはチェック解除します。

Ret := SendMessage(Handle, TB_CHECKBUTTON, Id, Flag);

Handle | ツールバーのハンドル
Id | チェックするボタンのコマンド識別子
Flag | 非0のときチェック、0のとき解除
戻り値 | 成功した場合非0、失敗した場合0


TB_ENABLEBUTTON

TB_ENABLEBUTTON (1025) メッセージ

ツールバー内のボタンを使用可能または使用不可にします。

Ret := SendMessage(Handle, TB_ENABLEBUTTON, Id, Flag);

Handle | ツールバーのハンドル
Id | ボタンのコマンド識別子
Flag | 非0のとき使用可能、0のとき使用不可
戻り値 | 成功した場合非0、失敗した場合0


TB_GETROWS

TB_GETROWS (1064) メッセージ

ツールバー内のボタンの行数を取得します。

Ret := SendMessage(Handle, TB_GETROWS, 0, 0);

Handle | ツールバーのハンドル
戻り値 | 行数


TB_GETSTATE

TB_GETSTATE (1042) メッセージ

ツールバー内のボタンの状態を取得します。

Ret := SendMessage(Handle, TB_GETSTATE, Id, 0);

Handle | ツールバーのハンドル
Id | ボタンのコマンド識別子
戻り値 | ボタンの状態の情報 | TBSTATE_CHECKED (1) | 押されたままの状態
 |  | TBSTATE_PRESSED (2) | 押されている
 |  | TBSTATE_ENABLED (4) | 使用可能
 |  | TBSTATE_HIDDEN (8) | 非表示
 |  | TBSTATE_INDETERMINATE (16) | 淡色表示
 |  | TBSTATE_WRAP (32) | ボタンの後で改行される


TB_HIDEBUTTON

TB_HIDEBUTTON (1028) メッセージ

ツールバー内のボタンを表示または非表示にします。

Ret := SendMessage(Handle, TB_HIDEBUTTON, Id, Flag);

Handle | ツールバーのハンドル
Id | ボタンのコマンド識別子
Flag | 非0のとき非表示、0のとき表示
戻り値 | 成功した場合非0、失敗した場合0


TB_INDETERMINATE

TB_INDETERMINATE (1029) メッセージ

ツールバー内のボタンの不定状態を設定または解除します。

Ret := SendMessage(Handle, TB_INDETERMINATE, Id, Flag);

Handle | ツールバーのハンドル
Id | ボタンのコマンド識別子
Flag | 非0のとき不定状態に設定、0のとき解除
戻り値 | 成功した場合非0、失敗した場合0


TB_ISBUTTONCHECKED

TB_ISBUTTONCHECKED (1034) メッセージ

ツールバー内のボタンがチェックされているかどうか調べます。

Ret := SendMessage(Handle, TB_ISBUTTONCHECKED, Id, 0);

Handle | ツールバーのハンドル
Id | ボタンのコマンド識別子
戻り値 | チェックされている場合は0以外


TB_ISBUTTONENABLED

TB_ISBUTTONENABLED (1033) メッセージ

ツールバー内のボタンが使用可能かどうか調べます。

Ret := SendMessage(Handle, TB_ISBUTTONENABLED, Id, 0);

Handle | ツールバーのハンドル
Id | ボタンのコマンド識別子
戻り値 | 使用可能な場合は0以外


TB_ISBUTTONHIDDEN

TB_ISBUTTONHIDDEN (1036) メッセージ

ツールバー内のボタンが非表示かどうか調べます。

Ret := SendMessage(Handle, TB_ISBUTTONHIDDEN, Id, 0);

Handle | ツールバーのハンドル
Id | ボタンのコマンド識別子
戻り値 | 非表示の時は0以外


TB_ISBUTTONINDETERMINATE

TB_ISBUTTONINDETERMINATE (1037) メッセージ

ツールバー内のボタンが不定状態かどうか調べます。

Ret := SendMessage(Handle, TB_ISBUTTONINDETERMINATE, Id, 0);

Handle | ツールバーのハンドル
Id | ボタンのコマンド識別子
戻り値 | 不定状態の時は0以外


TB_ISBUTTONPRESSED

TB_ISBUTTONPRESSED (1035) メッセージ

ツールバー内のボタンが押されているかどうか調べます。

Ret := SendMessage(Handle, TB_ISBUTTONPRESSED, Id, 0);

Handle | ツールバーのハンドル
Id | ボタンのコマンド識別子
戻り値 | 押されている時は0以外


TB_PRESSBUTTON

TB_PRESSBUTTON (1027) メッセージ

ツールバー内のボタンを押す、または元に戻します。

Ret := SendMessage(Handle, TB_PRESSBUTTON, Id, Flag);

Handle | ツールバーのハンドル
Id | ボタンのコマンド識別子
Flag | 非0のとき押された状態にし、0のとき離します。
戻り値 | 成功した場合は非0

注意) TB_PRESSBUTTONメッセージでは単にボタンの状態を変更するのみです。 ボタンに関連づけられたアプリケーションの機能を実行するには、ToolBarClick手続きを使うか、 その親ウィンドウにWM_COMMANDメッセージを送信してください(ToolBarGetBtn関数の例参照)。


TB_SETSTATE

TB_SETSTATE (1041) メッセージ

ツールバー内のボタンの状態を設定します。

Ret := SendMessage(Handle, TB_SETSTATE, Id, Mode);

Handle | ツールバーのハンドル
Id | ボタンのコマンド識別子
Mode | ボタンの状態
 |  | TBSTATE_CHECKED (1) | 押されたままの状態
 |  | TBSTATE_PRESSED (2) | 押されている
 |  | TBSTATE_ENABLED (4) | 使用可能
 |  | TBSTATE_HIDDEN (8) | 非表示
 |  | TBSTATE_INDETERMINATE (16) | 淡色表示
 |  | TBSTATE_WRAP (32) | ボタンの後で改行される
戻り値 | 成功した場合は非0


ToolBarClick手続き

ツールバー上の指定位置にマウスを移動し左クリックします。

procedure ToolBarClick(Handle, Item);
または
procedure ToolBarClick(Handle, X, Y);

Handleで示すツールバーのItem番目のボタンをクリックします。または、
Handleで示すツールバーの左上隅を原点とする相対座標の(X, Y)位置にマウスカーソルを移動し、左ボタンをクリックします。


ToolBarGetBtn関数

ボタンの0から始まるインデックス値から、コマンド識別子を取得します。

function ToolBarGetBtn(Handle, Index: integer): integer;

Handleで示すツールバーのIndex番目のボタンのコマンド識別子を取得します。 ツールバーへのSendMessageでは、このコマンド識別子を使います。

注) ツールバー上のボタンを押す操作は、ToolBarClick手続きを使うか、 あるいはその親ウインドウにWM_COMMANDを送信することでシミュレーションできます。
次の例は、エクスプローラの「大きいアイコン」ボタンを押します。
hParent := FindWindow('ExploreWClass', 'エクスプローラ', 5000);
hToolBar := Window[hParent].ToolbarWindow32[0];
ToolBarClick(hToolBar, 456, 15);
または
hParent := FindWindow('ExploreWClass', 'エクスプローラ', 5000);
hToolBar := Window[hParent].ToolbarWindow32[0];
CommandID := ToolBarGetBtn(hToolBar, 16);
SendMessage(hParent, WM_COMMAND, CommandID, 0);


ListViewClick関数

ListViewの中の指定項目をクリックします。

function ListViewClick(Handle, Item, Mode): boolean;

Handleで示すListViewの、Itemで示す項目をクリックまたはダブルクリックします。 Itemは、0から数えた先頭からの順番を示します。Mode=0の時クリック、Mode=1の時ダブルクリックします。 成功すれば、関数値としてTrueが戻ります。

なお、この関数が成功するためにはクリックしようとする項目が画面に見えている状態でなければなりません。 もしスクロールアウトされている場合は、事前にLVM_ENSUREVISIBLEで可視にする必要があります。


ListViewGetText関数

ListViewの項目に関連づけられたテキストを取得します。

function ListViewGetText(Handle, Item, SubItem: Integer): string;

Handleで示すListViewの、項目、サブ項目がそれぞれItem、SubItem番目(先頭は0)に関連づけられたテキストを取得します。


LVM_EDITLABEL

LVM_EDITLABEL (4119) メッセージ

指定されたリストビューのテキストの埋め込み先編集を開始します。これを実行する時点でリストビューがフォーカスを持っていなければなりません。

Ret := SendMessage(Handle, LVM_EDITLABEL, Index, 0);

Handle | リストビューのハンドル
Index | 項目のインデックス値。編集をキャンセルする場合は-1にしてください。
戻り値 | Editコントロールのハンドル。エラーの場合0

次の例は、リストビューの3番目の項目のテキストを変更します。
hEdit := SendMessage(hListView, LVM_EDITLABEL, 2, 0);
SetText(hEdit, 'NewText');
SendMessage(hListView, LVM_EDITLABEL, -1, 0);


LVM_ENSUREVISIBLE

LVM_ENSUREVISIBLE (4115) メッセージ

リストビューで指定された項目が少なくとも一部は可視になるようにスクロールします。

Ret := SendMessage(Handle, LVM_ENSUREVISIBLE, Index, PartialOK);

Handle | リストビューのハンドル
Index | 項目のインデックス値
PartialOK | 一部分でも良い場合は非0にしてください
戻り値 | エラーの場合0


LVM_GETITEMCOUNT

LVM_GETITEMCOUNT (4100) メッセージ

リストビューの項目の数を取得します。

Ret := SendMessage(Handle, LVM_GETITEMCOUNT, 0, 0);

Handle | リストビューのハンドル
戻り値 | 項目の数


LVM_GETITEMSTATE

LVM_GETITEMSTATE (4140) メッセージ

リストビュー項目の状態を取得します。

Ret := SendMessage(Handle, LVM_GETITEMSTATE, Index, Mask);

Handle | リストビューのハンドル
Index | 項目のインデックス値
Mask | 返される項目の状態フラグを表すマスク(下記参照)
戻り値 | 項目の状態フラグ(下記参照)

リストビューの状態値
LVIS_FOCUSED (1) | この項目がフォーカスを持っている
LVIS_SELECTED (2) | この項目が選択されている
LVIS_CUT (4) | 切り取りと貼り付け操作に対してこの項目がマークされる
LVIS_DROPHILITED (8) | 切り取りと貼り付け操作の対象としてこの項目が強調表示される
LVIS_OVERLAYMASK ($0F00) | 項目にオーバーレイイメージインデックスが含まれているかどうか判定する
LVIS_STATEIMAGEMASK ($F000) | 項目に状態イメージが関連づけられているかどうか判定する


LVM_GETSELECTEDCOUNT

LVM_GETSELECTEDCOUNT (4146) メッセージ

リストビュー内の選択されている項目の数を取得します。

Ret := SendMessage(Handle, LVM_GETSELECTEDCOUNT, 0, 0);

Handle | リストビューのハンドル
戻り値 | 選択されている項目の数


LVM_GETTOPINDEX

LVM_GETTOPINDEX (4135) メッセージ

リストビューが一覧表示または詳細表示の時の一番上の可視項目を取得します。

Ret := SendMessage(Handle, LVM_GETTOPINDEX, 0, 0);

Handle | リストビューのハンドル
戻り値 | 一番上の項目のインデックス


LVM_SCROLL

LVM_SCROLL (4116) メッセージ

リストビューの内容をスクロールします。

Ret := SendMessage(Handle, LVM_SCROLL, dx, dx);

Handle | リストビューのハンドル
dx | 水平スクロール量。一覧表示の場合列数、その他の場合ピクセル数
dy | 垂直スクロール量。一覧表示の場合行数、その他の場合ピクセル数
戻り値 | 失敗した場合は0


TreeViewClick関数

TreeViewの中の指定項目をクリックします。

function TreeViewClick(Handle, Item, Mode): boolean;

Handleで示すTreeViewの、Itemで示す項目をクリックまたはダブルクリックします。 Itemは、TVM_GETNEXTITEMで取得したツリービュー項目のハンドルです。 Mode=0の時クリック、Mode=1の時ダブルクリックします。成功すれば、関数値としてTrueが戻ります。

なお、この関数が成功するためにはクリックしようとする項目が画面に見えている状態でなければなりません。 もしスクロールアウトされている場合は、事前にTVM_ENSUREVISIBLEで可視にする必要があります。


TreeViewGetState関数

TreeViewの項目の属性を取得します。

function TreeViewGetState(Handle, Item: Integer): integer;

Handleで示すTreeViewの、Itemで示す項目の属性を取得します。関数値は、以下がORで結合された値です。

TVIS_FOCUSED (1) | 当該項目にフォーカスがある
TVIS_SELECTED (2) | 当該項目が選択されている
TVIS_CUT (4) | 切り取り／貼り付け操作の一環として選択されている
TVIS_DROPHILITED (8) | Drag & Dropのターゲットとして選択されている
TVIS_BOLD (16) | 当該項目がボールドである
TVIS_EXPANDED (32) | 当該項目の子項目リストが展開されている
TVIS_EXPANDEDONCE (64) | 子項目リストがこれまでに1回は展開されている


TreeViewGetText関数

TreeViewの項目に関連づけられたテキストを取得します。

function TreeViewGetText(Handle, Item: Integer): string;

Handleで示すTreeViewの、Itemで示す項目に関連づけられたテキストを取得します。
Itemは、TreeView項目のハンドルです。 これは下記の例のように、TreeViewにTVM_GETNEXTITEMメッセージを送信することによって取得する必要があります。
const
    TVM_GETNEXTITEM      = 4362;
    TVGN_ROOT            = 0;
    TVGN_NEXT            = 1;
    TVGN_PREVIOUS        = 2;
    TVGN_PARENT          = 3;
    TVGN_CHILD           = 4;
    TVGN_FIRSTVISIBLE    = 5;
    TVGN_NEXTVISIBLE     = 6;
    TVGN_PREVIOUSVISIBLE = 7;
    TVGN_DROPHILITE      = 8;
    TVGN_CARET           = 9;

var hWnd, cWnd, Item: Integer;
    Txt: String;
begin
    hWnd := FindWindow('ExploreWClass', 'エクスプローラ');
    if hWnd = 0 then Message(MB_OK, 'エクスプローラが起動されていません')
    else begin
        cWnd := Window[hWnd].SysTreeView32[0];
        Item := SendMessage(cWnd, TVM_GETNEXTITEM, TVGN_CARET, 0);
        Txt := TreeViewGetText(cWnd, Item);
        Message(MB_OK, Txt);
    end;
end;


TVM_EDITLABEL

TVM_EDITLABEL (4366) メッセージ

指定のツリービューの項目のテキストの編集を開始します。これを実行する時点でツリービューがフォーカスを持っていなければなりません。

Ret := SendMessage(Handle, TVM_EDITLABEL, 0, Item);

Handle | ツリービューのハンドル
Item | ツリービュー項目のハンドル
戻り値 | 編集に使われるエディットコントロールのハンドル。失敗した場合は0

次の例は、現在選択中の項目のテキストを変更します。
hItem := SendMessage(hTreeView, TVM_GETNEXTITEM, TVGN_CARET, 0);
hEdit := SendMessage(hTreeView, TVM_EDITLABEL, 0, hItem);
SetText(hEdit, 'NewText');
SendMessage(hTreeView, TVM_ENDEDITLABELNOW, 0, 0);


TVM_ENDEDITLABELNOW

TVM_ENDEDITLABELNOW (4374) メッセージ

ツリービューの項目の編集を終了します。

Ret := SendMessage(Handle, TVM_ENDEDITLABELNOW, 0, Cancel);

Handle | ツリービューのハンドル
Cancel | 0にすると変更を保存します。非0にするとキャンセルします。
戻り値 | 成功した場合は非0


TVM_ENSUREVISIBLE

TVM_ENSUREVISIBLE (4372) メッセージ

ツリービューで指定された項目が可視になるようにスクロールします。

Ret := SendMessage(Handle, TVM_ENSUREVISIBLE, 0, Item);

Handle | ツリービューのハンドル
Item | ツリービュー項目のハンドル
戻り値 | スクロールされた場合は非0


TVM_EXPAND

TVM_EXPAND (4354) メッセージ

指定の親項目に関連する子項目リストを展開または縮小します。

Ret := SendMessage(Handle, TVM_EXPAND, Item, Flag);

Handle | ツリービューのハンドル
Item | ツリービュー項目のハンドル
Flag | 動作モード | TVE_COLLAPSE (1) | リストを縮小する
 |  | TVE_EXPAND (2) | リストを展開する
 |  | TVE_TOGGLE (3) | 展開していれば縮小し、縮小していれば展開する
 |  | TVE_COLLAPSERESET ($8000) | リストを縮小して子項目を削除する。TVE_COLLAPSEも必要
戻り値 | 成功すれば非0


TVM_GETCOUNT

TVM_GETCOUNT (4357) メッセージ

ツリービューの項目の数を取得します。

Ret := SendMessage(Handle, TVM_GETCOUNT, 0, 0);

Handle | ツリービューのハンドル
戻り値 | 項目の数


TVM_GETNEXTITEM

TVM_GETNEXTITEM (4362) メッセージ

特定の項目と一定の関係にあるツリービュー項目のハンドルを取得します。

Ret := SendMessage(Handle, TVM_GETNEXTITEM, Flag, Item);

Handle | ツリービューのハンドル
Flag | 取得する項目と基準とする項目の関係 | TVGN_ROOT (0) | 一番上
 |  | TVGN_NEXT (1) | 次の兄弟項目
 |  | TVGN_PREVIOUS (2) | 前の兄弟項目
 |  | TVGN_PARENT (3) | 親の項目
 |  | TVGN_CHILD (4) | 最初の子項目
 |  | TVGN_FIRSTVISIBLE (5) | 可視(縮小されていない)最初の項目
 |  | TVGN_NEXTVISIBLE (6) | 次に可視である項目
 |  | TVGN_PREVIOUSVISIBLE (7) | 前の可視である項目
 |  | TVGN_DROPHILITE (8) | Drag & Drop操作の対象の項目
 |  | TVGN_CARET (9) | 現在選択されている項目
Item | 基準とするツリービュー項目のハンドル
戻り値 | 成功した場合はツリービュー項目のハンドル。失敗した場合は0


TVM_GETVISIBLECOUNT

TVM_GETVISIBLECOUNT (4368) メッセージ

ツリービューのクライアントウィンドウの中で完全に見えている項目の数を取得します。

Ret := SendMessage(Handle, TVM_GETVISIBLECOUNT, 0, 0);

Handle | ツリービューのハンドル
戻り値 | 完全に見えている項目の数


TVM_SELECTITEM

TVM_SELECTITEM (4363) メッセージ

ツリービューの項目を選択し、表示オプションに基づいてその項目を見えるようにします。

Ret := SendMessage(Handle, TVM_SELECTITEM, Flag, Item);

Handle | ツリービューのハンドル
Flag | 表示オプション | TVGN_FIRSTVISIBLE (5) | 可視(縮小されていない)最初の項目
 |  | TVGN_DROPHILITE (8) | Drag & Drop操作の対象の項目
 |  | TVGN_CARET (9) | 現在選択されている項目
Item | ツリービュー項目のハンドル
戻り値 | 項目の数


StatusBarGetText関数

StatusBarに関連づけられたテキストを取得します。

function StatusBarGetText(Handle, Item: Integer): string;

Handleで示すStatusBarの、Item番目の項目(先頭は0)に関連づけられたテキストを取得します。 先頭の項目の場合には、GetText関数で取得することもできます。


TBM_GETPOS

TBM_GETPOS (1024) メッセージ

トラックバー上でのスライダの現在位置を取得します。

Ret := SendMessage(Handle, TBM_GETPOS, 0, 0);

Handle | トラックバーのハンドル
戻り値 | スライダの現在位置


TBM_GETSELEND

TBM_GETSELEND (1042) メッセージ

トラックバー内の現在の選択の終端位置を取得します。

Ret := SendMessage(Handle, TBM_GETSELEND, 0, 0);

Handle | トラックバーのハンドル
戻り値 | 現在の選択の終端位置


TBM_GETSELSTART

TBM_GETSELSTART (1041) メッセージ

トラックバー内の現在の選択の開始位置を取得します。

Ret := SendMessage(Handle, TBM_GETSELSTART, 0, 0);

Handle | トラックバーのハンドル
戻り値 | 現在の選択の開始位置


TBM_SETPOS

TBM_SETPOS (1029) メッセージ

トラックバー内のスライダの現在位置を設定します。

Ret := SendMessage(Handle, TBM_SETPOS, Flag, Pos);

Handle | トラックバーのハンドル
Flag | 非0の場合は指定する位置にスライダが設定されます。0の時は現在位置が最小位置と最大位置の範囲内に収まるようにしますが、スライダを動かすことはしません。
Pos | 新しい位置
戻り値 | 現在の選択の開始位置


TBM_SETSEL

TBM_SETSEL (1034) メッセージ

トラックバー内の選択の開始位置と終了位置を設定します。

SendMessage(Handle, TBM_SETSEL, Flag, EndPos * 65536 + StartPos);

Handle | トラックバーのハンドル
Flag | 非0の場合、スライダを再描画します。
StartPos | 開始位置
EndPos | 終了位置


TBM_SETSELEND

TBM_SETSELEND (1035) メッセージ

トラックバー内の選択の終了位置を設定します。

SendMessage(Handle, TBM_SETSELEND, Flag, EndPos);

Handle | トラックバーのハンドル
Flag | 非0の場合、スライダを再描画します。
EndPos | 終了位置


TBM_SETSELSTART

TBM_SETSELSTART (1036) メッセージ

トラックバー内の選択の開始位置を設定します。

SendMessage(Handle, TBM_SETSELSTART, Flag, StartPos);

Handle | トラックバーのハンドル
Flag | 非0の場合、スライダを再描画します。
StartPos | 開始位置


UDM_GETBUDDY

UDM_GETBUDDY (1130) メッセージ

スピンボタンコントロールのバディウィンドウのハンドルを取得します。
バディウィンドウとは、スピンボタンと連動したエディットコントロールのことです。

Ret := SendMessage(Handle, UDM_GETBUDDY, 0, 0);

Handle | スピンボタンのハンドル
戻り値 | バディウィンドウのハンドル


UDM_GETPOS

UDM_GETPOS (1128) メッセージ

スピンボタンコントロールの現在位置を取得します。

Ret := SendMessage(Handle, UDM_GETPOS, 0, 0);

Handle | スピンボタンのハンドル
戻り値 | 下位ワードにスピンボタンの現在位置。バディウィンドウがないか無効の場合は、上位ワードに0以外の値が返ります。


UDM_SETPOS

UDM_SETPOS (1127) メッセージ

スピンボタンコントロールの現在位置を設定します。

Ret := SendMessage(Handle, UDM_SETPOS, 0, Pos);

Handle | スピンボタンのハンドル
Pos | スピンボタンの新しい位置
戻り値 | 以前の位置


HDM_GETITEMCOUNT

HDM_GETITEMCOUNT (4608) メッセージ

ヘッダコントロール内の項目の個数を取得します。

Ret := SendMessage(Handle, HDM_GETITEMCOUNT, 0, 0);

Handle | ヘッダコントロールのハンドル
戻り値 | 成功した場合は項目の個数。失敗した場合は-1


HeaderGetText関数

ヘッダコントロールの指定項目のテキストを取得します。

function HeaderGetText(Handle, Index: integer): string;

Handleで指定したヘッダコントロールのIndex番目(先頭は0)のテキストを取得します。エラーが発生した場合は空の文字列となります。


GetCursorPos手続き

現在のマウスカーソルの位置を取得します。

procedure GetCursorPos(hWin: integer; x: integer; y: integer);

現在のマウスカーソルの位置が、x, yに返ります。
hWinが0の場合はスクリーン座標系で、0以外はウィンドウハンドルを示しそのウィンドウに対するクライアント座標系で返ります。


GetKeyState関数

現在押されているキーまたはマウスボタンを調べます。

function GetKeyState(Key: integer): integer;

Keyに調べたいキーの仮想キーコードを指定すると、そのキーが押さえられているかどうか、あるいはトグル状態を取得します。
同名のWindows APIとまったく同じ動作ですので、詳細はWindows APIのヘルプを参照してください。


FreeDLL手続き

指定のDLLが不要になったことをWindowsに知らせます。

procedure FreeDLL(Handle);


LoadDLL関数

DLLをロードします。

function LoadDLL(Path: string): integer;

Pathで指定するDLLをロードし、ハンドルを返します。 このハンドルは、DLL内の関数や手続きを呼ぶとき、第1引数として渡します。 DLLの作成と呼び出しDLLの具体例を参照してください。ロードに失敗すると0が返ります。


CloseLink手続き

実行中のDDE対話を終了します。

procedure CloseLink;

DDEサーバーとの通信をすべて終了します。


ExecuteMacro関数

DDEサーバーアプリケーションにマクロコマンド文字列を送信します。

function ExecuteMacro(Cmd: string; WaitFlg: boolean): boolean;

ExecuteMacroは、サーバーアプリケーションに1つのマクロコマンドを送信できます。 マクロをDDEサーバーアプリケーションに渡すのに成功すると、ExecuteMacroはTrueを返します。失敗すれば、Falseを返します。
Cmdの実際の値はDDEサーバーアプリケーションによって決まります。 指定できるコマンド文字列についてはDDEサーバーアプリケーションのマニュアルを参照してください。

WaitFlgは，他のDDEトランザクションを実行する場合に、DDEサーバーアプリケーションがマクロの実行を完了するのを待つかどうかを指定します。 WaitFlgがTrueならば、以降のExecuteMacro, PokeData, RequestDataの呼び出しは、DDEサーバーアプリケーションがマクロを完了するまで成功しません。
DDEサーバーアプリケーションが現在実行中のマクロを完了しないうちにマクロを実行しようとするかデータを送信しようとすると、 実行中のマクロは失敗するか、予想外の結果を生じることがあります。 マクロの完了前にコマンド文字列を送信したりデータを送信した結果については、DDEサーバーアプリケーションのマニュアルを参照してください。

注意
マクロコマンドが正常にDDEサーバーに渡された場合は，ExecuteMacroはTrueを返します。 True値が返され、マクロコマンドがサーバーに受け入れられた場合でも、マクロコマンドが正常に実行されたことが保証されるわけではありません。

例:
begin  // グループ「アクセサリ」を開く
  SetLink('PROGMAN', 'PROGMAN');
  ExecuteMacro('[ShowGroup(アクセサリ,1)]', False);
  CloseLink;
end;


PokeData関数

DDEサーバーアプリケーションにデータを送ります。

function PokeData(Item, Data: string): boolean;

PokeDataは、DDEサーバーにテキストデータを転送します。 ItemはDDEサーバー内のリンク項目を指定します。 Dataは転送するテキストデータを指定します。
PokeDataはデータが正常に転送されたらTrueを、正常に転送されなかったらFalseを返します。


RequestData関数

DDEサーバーにデータを要求します。

function RequestData(Item: string): string;

Itemで指定したデータをDDEサーバーに要求します。 成功すれば、戻り値にデータが返ります。失敗すれば空のテキストになります。

例:
begin  // プログラムマネージャからグループ名を取得する。
  SetLink('PROGMAN', 'PROGMAN');
  Message(MB_OK, RequestData('Groups'));
  CloseLink;
end;


SetLink関数

DDE対話のサービスとトピックを指定しリンクを開きます。

function SetLink(Service, Topic: string): boolean;

サービス名とトピック名を指定して、DDE対話のコネクションを確立します。
成功すればTrue、失敗すればFalseが返ります。


Chr関数

ASCII値に対応する文字を返します。

function Chr(Code: Integer): string;

ASCII値がCodeに対応する文字を返します。Codeは、0から255の範囲でなければなりません。


Copy関数

Copy関数は文字列の部分文字列を返します。

function Copy(Str: string; Index, Count: Integer): string;

CopyはStrのIndex番目からCount個の文字の入った文字列を返します。
IndexがStrより長い場合，Copyは空の文字列を返します。コピーできる文字より多い値がCountに指定されている場合、Strの終わりまでの文字が返されます。


DateStr関数

現在の日付を文字列で返します。

function DateStr: string;

得られる日付の形式は、Windowsの設定に依存します。


Format関数

形式文字列と一連の引数によりフォーマットされた文字列を返します。

function Format(Frm: string; ……): string;

この関数は、形式文字列Frmに従って2番目以降の一連の引数をフォーマットし、その結果を関数の戻り値として返します。 2番目以降の引数は、任意の型で最大15個指定できます。
形式文字列には、通常文字と形式指定子の2種類が含まれます。 通常文字はそのまま結果の文字列にコピーされます。 形式指定子は引数リストから引数を取り出し、その引数に形式を適用します。形式指定子は次の構文です。

"%" [index ":"] ["-"] [width] ["." prec] type

形式指定子は % 文字で開始し、その後に以下を順に指定します。変換型文字type以外は省略できます。
引数インデックス指定子 [index ":"］
左揃えインジケータ ["-"]
幅指定子 [width]
精度指定子 ["." prec]
変換型文字 type

typeには次の値を指定できます。

d | 引数は10進数に変換されます。形式文字列に精度指定子が含まれる場合、結果の文字列は指定された桁数以上でなくてはなりません。指定された桁数より少ないときは、結果の文字列の左側にゼロが埋め込まれます。
s | 引数の文字列が形式指定子の代わりに挿入されます。形式文字列に精度指定子が含まれる場合、精度指定子は結果の文字列の最大長を指定します。引数の文字列がこの最大長より長い場合、はみ出す文字列は切り捨てられます。
x | 引数は16進数の文字列に変換されます。形式文字列に精度指定子が含まれる場合、結果の文字列は指定された桁数以上でなくてはなりません。指定された桁数より少ない場合、結果の文字列の左側には0が埋め込まれます。

インデックス指定子、幅指定子、精度指定子は"%10d"のように10進数の文字列で直接指定することも、"%*.*d"のようにアスタリスクで間接的に指定することもできます。 アスタリスクを使う場合、引数リスト内の次の引数(整数値)が実際に使われる値です。たとえば、次の2つのFormat文は等価です。
    Format('%*.*d', 8, 2, 123)
    Format('%8.2d', 123)

幅指定子は変換時の最小フィールド幅を設定します。結果の値が最小フィールド幅より小さい場合でも、指定されたフィールド幅が確保されます。 デフォルトでは，そのフィールドに値が右寄せで表示されます。 形式指定子に左揃えインジケータ(幅指定子の先頭の"-")が指定されている場合は、そのフィールドに値が左寄せで表示されます。
インデックス指定子は、現在の引数リストインデックスを指定の値に設定します。引数リストの最初の引数のインデックスは0です。 インデックス指定子を使うと、同じ引数を繰り返して指定できます。 たとえば、"Format('%d %d %0:d %d'，10, 20)"のように指定すると、'10 20 10 20'という文字列が生成されます。


IntToStr関数

整数を文字列に変換します。

function IntToStr(Value: Integer): string;

IntToStr関数は整数を10進表現の文字列に変換します。


Length関数

Lengthは，文字列の長さを返します。

function Length(Str: string): Integer;

Length関数は，文字列Strに格納されている文字数を返します。


LowerCase関数

ASCII文字列を小文字に変換します。

function LowerCase(S: string): string;

変換できるのは「A」～「Z」の7ビットASCII文字だけです。


Pos関数

Posは文字列Strから部分文字列Substrを探します。

function Pos(Substr: string; Str: string): Integer;

PosはStrからSubstrを探し、Substrの最初の文字のインデックスを表す整数値を返します。
最初の文字のインデックス値は1です。Substrが見つからなかった場合には、0を返します。


Random関数

乱数を生成します。

function Random(Range: Integer): Integer;

0 <= X < Range の範囲内の乱数を返します。


StrToInt関数

整数を表す文字列を数値に変換します。

function StrToInt(const S: string): Integer;

StrToInt関数は、10進表記の整数型の数値を表す文字列を数値に変換します。
途中に数字でない文字があった場合は、その手前までの文字列で数値に変換します。


TimeStr関数

現在の時刻を文字列で返します。

function TimeStr: string;

得られる時刻の形式は、Windowsの設定に依存します。


UpperCase関数

ASCII文字列を大文字に変換します。

function UpperCase(S: string): string;

変換できるのは「a」～「z」の7ビットASCII文字だけです。


GetClipboardText関数

クリップボードからテキストを取得します。

function GetClipboardText: string;

この関数はクリップボードにテキストがある場合のみ有効です。
テキスト以外の形式のデータしかない場合には、得られるテキストは長さが0になります。


SetClipboardText手続き

クリップボードにテキストをコピーします。

procedure SetClipboardText(Txt: string);


ChDir手続き

カレントディレクトリを変更します。

procedure ChDir(Path: string);

カレントディレクトリをPathで指定されたパスに変更します。 Pathがドライブ名を指定する場合、カレントドライブも変更されます。


CloseFile手続き

ファイルを閉じます。

procedure CloseFile(FileHandle: integer);

FileHandleで指定したファイルを閉じます。


DeleteFile関数

ファイルを削除します。

function DeleteFile(FileName: string): boolean;

成功すればTrue、失敗すればFalseを返します。


FileExists関数

ファイルが存在すればTrue、存在しなければFalseを返します。

function FileExists(FileName: string): boolean;


FindFirstFile関数

指定ディレクトリで条件に合うファイルを検索します。

function FindFirstFile(PathNameFilter: string): integer;

PathNameFilterにディレクトリ名とファイル名(* が使えます)を指定します。 この関数の戻り値にはFindNextFileに渡すハンドルが返ります。 実際のファイル名を取得するにはこの後 FindNextFileを呼ぶ必要があります。エラーの場合は-1が返ります。

例:
var h: Integer;
    s: String;
begin
    h := FindFirstFile('C:\cdx\*.txt');
    repeat
        s := FindNextFile(h);
        if Length(s) = 0 then break;
        Message(0, s);
    until False;
end;


FindNextFile関数

ディレクトリ内で条件に合致する次のファイル名を取り出します。

function FindNextFile(Handle: integer): string;

Handleには FindFirstFileの戻り値を指定します。戻り値にファイル名が返ります。
ディレクトリに複数のファイルがある場合は、この関数を繰り返し呼ぶ必要があります。 最後のファイル名を取り出し終えた場合は、空の文字列が返ります。


GetDir関数

カレントディレクトリのパス名を取得します。

function GetDir: string;


MkDir関数

新しいサブディレクトリを作成します。

function Mkdir(Name: string): boolean;

新しいサブディレクトリを作成し、成功すればTrue、失敗すればFalseを返します。


OpenFile関数

ファイルを開きます。

function OpenFile(FileName: string; Mode: integer): integer;

Modeの値により、次の操作を行います。

Mode = 0 : 読み込み専用で既存ファイルを開く。
Mode = 1 : 書き込み専用で新規ファイルを作成し開く。既存ファイルが存在した場合は、一旦削除した後、作成し直す。
Mode = 2 : 書き込み専用でファイルを開く。既存ファイルがあった場合は、追加モードになる。なかった場合は新規作成する。

成功すれば、戻り値にファイルハンドルが返ります。失敗すれば-1が返ります。
なお、同時に開けるファイルの数は8個に制限されています。


ReadLine関数

ファイルから1行読み出します。

function ReadLine(FileHandle: integer; Text: string): integer;

FileHandleで指定するファイルから1行読み込み、string型変数Textにセットします。
関数の戻り値にはTextの長さが返ります。 ファイルの終わりに達した場合や、エラーがあった場合は-1が返ります。


RenameFile関数

ファイルをリネームします。

function RenameFile(OldName, NewName: string): boolean;

ファイルOldNameをNewNameにリネームします。成功すればTrue, 失敗すればFalseが返ります。


RmDir関数

空のサブディレクトリを削除します。

function RmDir(Name: string): boolean;

サブディレクトリを削除します。成功すればTrueが返ります。
パスが存在しなかったり、空でなかったり、現在アクセスされているディレクトリであったりすると、削除されずFalseが返ります。


WriteLine手続き

ファイルに1行書き込みます。

procedure WriteLine(FileHandle: integer; Text: string);

FileHandleで指定するファイルにTextの内容と行マーカー(CR/LF)を書き込みます。


CreateOleObject関数

OLE オートメーションオブジェクトのインスタンスを 1 つ作成します。

function CreateOleObject(ClassName: string): OleObject;

ClassName で示されるクラスのオブジェクトを作成します。 ClassName は、クラス識別子（CLSID）の文字列表現です。 成功すれば、オブジェクトとの通信に使用できるインターフェースの識別子への参照を返します。失敗すれば、0を返します。

使用例


GetActiveOleObject関数

現在実行中の登録されている OLE オブジェクトのインタフェースへの参照を取得します。

function GetActiveOleObject(ClassName: string): OleObject;
    または
function GetActiveOleObject(ClassName: string; index: integer): OleObject;

ClassName で指定されたクラスのアクティブオブジェクトのインターフェースへの参照を返します。 ClassName は、クラス識別子（CLSID）の文字列表現です。
indexを指定しない場合は、OLEオートメーションをサポートしているアプリケーション(WORD, EXCEL, Internet Explorerなど)を参照できます。 indexを指定した場合は、その他のアプリケーションをComSpy経由で起動した場合に参照できます。 indexの値は、複数個起動されている場合にそれらを識別する番号で、最初に起動されたものが0です。 成功すれば、オブジェクトとの通信に使用できるインターフェースの識別子への参照を返します。失敗すれば、0を返します。

使用例１

使用例２


ImeGetState関数

日本語入力モードのOn/Offの状態を取得します。

function ImeGetState(Handle: integer): boolean;

Handleで、対象アプリケーションの入力フォーカスの当たっているウィンドウ(Editコントロールなど)を指定します。 日本語入力モードがOnの場合True、Offの場合Falseが返ります。

例: 次の例は、現在の日本語入力モードを切り替えます。
    hWin := GetFocus;
    Flg := ImeGetState(hWin);
    ImeSetState(hWin, not Flg);

注) SendKeys手続きを使った場合、送信文字列はその時点の日本語入力モードがOnであれば日本語変換されます。
一方、SendText手続きでは、日本語入力モードのOn/Offに関わらず、指定した文字列は変換されずにそのまま相手アプリケーションに渡ります。


ImeSetState手続き

日本語入力モードのOn/Offの状態を設定します。

procedure ImeGetState(Handle: integer; Mode: boolean);

Handleで、対象アプリケーションの入力フォーカスの当たっているウィンドウ(Editコントロールなど)を指定します。
ModeがTrueのとき日本語入力モードをOnに、FalseのときOffに設定します。


%Find関数

インターネットエクスプローラのページに表示されている特定の部品を検索します。次の例のように使用します。
var V: OleObject;
begin
    V := CreateOleObject('InternetExplorer.Application');
    V.Visible := True;
    V.Navigate('http://www.MyHomePage.co.jp/Sample1.htm');
    V.%Find(tagName:='INPUT', type:='radio', name:='size', value:='medium').Click;
end;
%Findの引数には、捜査対象のプロパティとその値を1個以上指定します。
どのプロパティにどんな値が入っているかは、「インターネットエクスプローラの情報を取得する」で調べます。 指定するプロパティは、ユニークに特定できる最低限のものを指定するだけで構いません。 たとえば、現在のページにvalueプロパティが'medium'であるものが一個しかない場合は、上記の例は、
    V.%Find(value:='medium').Click;
だけでも構いません。また、プロパティnameはプロパティ名を省略し、値だけでも構いません。
    V.%Find('size').Click;

%Findで検索した部品に対し、Click、値の取得、値の設定の3通りの操作ができます。
例:
var V: OleObject;
Idx: Integer;
begin
    V := CreateOleObject('InternetExplorer.Application');
    V.Visible := True;
    V.Navigate('http://www.MyHomePage.co.jp /Sample1.htm');
    V.%Find(type:='radio', name:='size', value:='medium').Click;　　 // クリック
    Idx := V.%Find(type:='select-one', name:='menu').selectedIndex;　// 値を取得
    V.%Find(value:='red').checked := True;　　　　　// チェックボックスにチェックを入れる
    V.%Find(name:='answer').value := 'My Opinion';　// テキストボックスにテキストをセットする
end;
■ (注意)
%Findを含むスクリプトをコンパイルするには、Delphi バージョン7以上が必要です。


GetEnv関数

環境変数の値を取得します。

function GetEnv(VarName: string): string

VarNameで環境変数の名称を指定します。戻り値にその環境変数の値が返ります。 定義されていなかった場合は空文字列が返ります。

例: Execute(GetEnv('SystemRoot') + '\System32\MSPAINT.EXE', 5000);
この例は、「ペイント」があるディレクトリを調べるために、"SystemRoot"環境変数の値を取得しています。


GetVersion関数

Windowsのバージョン番号を返します。

function GetVersion: integer;

下位ワードにWindowsのバージョン番号が入り、このうち上位バイトがレビジョン番号を、下位バイトがメジャーレビジョン番号(Windows95は4)を表します。
上位ワードには、プラットフォームを表すコードが入ります(上位ビットがセットされていなければNTで、上位ビットがセットされていればWin32sです)。


ParamCount関数

Triple-9起動時の引数の数を返します。

function ParamCount: integer;

Triple-9起動時の引数の数を返します。実行Path名は数に含まれません。


ParamStr関数

Triple-9起動時の引数を取得します。

function ParamStr(ArgNum: integer): string;

ArgNumで引数の番号を指定します。0が実行Path名、1が先頭の引数を示します。
存在しない番号を指定した場合は空文字列が返ります。


ScreenHeight関数

スクリーンの高さを返します。

function ScreenHeight: integer;


ScreenWidth関数

スクリーンの幅を返します。

function ScreenWidth: integer;


DLLの作成と呼び出し

独自にDLL(ダイナミックリンクライブラリ)を作成して、Triple-9の機能を拡張することができます。 ただし、利用できるDLLは、Triple-9専用に作成したものに限られます。

■ スクリプトの記述

スクリプトの中では、次のように記述します。
1) 通常の関数／手続き宣言の後に、external; を追加します。
2) 実行部では、DLL内の関数／手続きを呼ぶ前にLoadDLL関数を実行し、DLLをロードします。
3) 実際にDLL内の関数／手続きを呼ぶ際は、第1引数にLoadDLLの戻り値を渡します。関数／手続きに渡したいパラメータがある場合は、第2引数以降に渡します。
4) 最後にFreeDLLを呼んで、DLLを解放します。

例:
function TestDLLFunc(DLL: integer; Text: string): string; external;
var DLL: integer;
begin
    DLL := LoadDll('TestDLL.dll');
    Message(MB_OK, TestDLLFunc(DLL, 'Test of DLL'));
    FreeDLL(DLL);
end;

■ DLLの作成

DLL側は、Borland　Delphiで作成することができます。 DelphiによるDLLの作成方法は、Delphiの解説書を参照してください。 Triple-9からのパラメータは、型可変オープン配列として渡されます。 このとき、string型はPChar型として、boolean型はinteger型として渡されます。 また関数の戻り値にテキストを渡す場合にもPChar型と指定しなければなりません。 実際のコード例を以下に示します。これは、任意個のパラメータを受け取って、それをメッセージボックスに表示するものです。
library TestDLL;
uses Windows, SysUtils, Classes;

function TestDLLFunc(Args: array of const): PChar;
var K: Integer;
begin
  for K := 0 to High(Args) do begin
    with Args[K] do
      case VType of
        vtInteger: MessageBox(MB_OK, PChar(IntToStr(VInteger)), '情報', 0);
        vtPChar:   MessageBox(MB_OK, VPChar, '情報', 0);
    end;
  end;
  Result := 'DLL called';
end;

exports
  TestDLLFunc name 'TestDLLFunc';

begin
end.


DDEによる通信

DDE(Dynamic Data Exchange)を使って、他のアプリケーション(DDEサーバ)と通信できます。これは次の手順で行います。

1) サービス名とトピック名を指定してSetLinkを実行することにより、サーバとコネクションを確立します。
2) 次のコマンドでサーバとやり取りします。
ExecuteMacro | : DDEサーバーにマクロコマンド文字列を送信します。
PokeData | : DDEサーバーにデータを送ります。
RequestData | : DDEサーバーにデータを要求します。
3) 最後にCloseLinkを実行してコネクションを切断します。

例:
var S: String;
begin
    SetLink('PROGMAN', 'PROGMAN');
    S := RequestData('Groups');　//ﾌﾟﾛｸﾞﾗﾑﾏﾈｰｼﾞｬからｸﾞﾙｰﾌﾟ名を取得する
    Message(MB_OK, S);
    ExecuteMacro('[ShowGroup(ｱｸｾｻﾘ,1)]', False);　//ｸﾞﾙｰﾌﾟ「ｱｸｾｻﾘ」を開く
    CloseLink;
end;


Triple-9 ランチャー

Launch999.exeは、あらかじめ作成されたスクリプトを、簡単に実行開始するためのランチャーです。
実行は次のいずれかをトリガーとして開始されます。

1) ホットキー
2) ポップアップメニュー
3) 特定のウィンドウ(ダイアログボックス)が表示された

ホットキーやポップアップメニューに登録しておくと、わずかな操作で定型的な一連の操作を即座に実行できます。
また、特定のウィンドウが表示されたら自動的に開始されるように登録しておくこともできます。 こうしておくと、たとえば、あるアプリケーションで確認のダイアログボックスが表示されるたびに[OK]ボタンを押す、という操作を自動化できます。 実行するスクリプトは、最大8個まで登録できます。

ランチャーを起動するには、スタートメニューからTriple-9フォルダ内のTriple-9 Launcherを選択するか、Launch999.exeを実行してください。 実行すると、タスクトレイにTriple-9 Launcherのアイコンが現れます。

スクリプト開始方法の設定
スクリプトの開始


スクリプト開始方法の設定

スクリプトの起動方法は、次の3種類の中から選択できます。

1) ホットキーで起動
2) ポップアップメニューを選択して起動
3) 特定のウィンドウが表示されたタイミングで起動

8個のスクリプトそれぞれ独立に指定できます。

設定は次のように行います。

1) タスクトレイのTriple-9 Launcherのアイコンを右クリックするとメニューが現れますので、その中から「設定」を選んでください。

2) 「スクリプト名」に実行させたいスクリプトのファイル名を入力してください。

3) ラジオボタンの、[HotKey], [メニュー], [ウィンドウの検出]のいずれかを選択してください。その後、それぞれの条件を指定します。
a) ホットキー
[HotKey]のすぐ右にあるボックスの中でホットキーとして使いたいキーの組み合わせを入力してください。
b) メニュー
メニュー項目として表示させるテキストを入力してください。ここで指定したテキストが、タスクトレイにあるアイコンを左クリックして現れるメニューに表示されます。
c) ウィンドウの検出
トリガーとなるウィンドウのクラス名とタイトルを指定します。タイトルは一部分だけでも構いません。 タイトルに変化する部分がある場合には、そこを除いた不変化部分のみを指定してください。 クラス名は指定する場合は、完全な名称を指定してください。省略した場合は、すべてのクラスにマッチします。 クラス名がわからない場合、または簡単に入れたい場合は、[ウィンドウの検出]のすぐ右の[参照]ボタンを押してください。 そして5秒以内に対象のウィンドウのタイトルバーをクリックしてアクティブにしてください。その状態で5秒待つと、自動的にクラス名とタイトルが入力されます。


スクリプトの開始

スクリプトは、設定した内容により、次のいずれかで起動、実行開始します。

1) ホットキー
ホットキーとして定義したキーの組み合わせを入力することにより起動します。

2) メニュー
メニューとして定義したものがある場合、タスクトレイのTriple-9 Launcherのアイコンを左クリックするとメニューが現れますので、その中から選択すると実行開始します。
定義しているメニューがない場合は、左クリックしてもメニューは現れません。

3) ウィンドウの検出
指定した条件(クラス名、タイトル)が現れると自動的に実行開始します。

ホットキーとウィンドウの検出においては、一時的に無効にすることができます。 タスクトレイのアイコンを右クリックして、「一時停止」を選択すると無効になります。もう一度、今度は「再開」を選択すると有効になります。


トラブルシューティング

うまく記録できない

■ 高水準モードで記録したものが、そのままではうまく動作しない
高水準モードの記録は、マクロを作成するための補助手段であり、必ずしもそのままでは動作しない場合もあります。たとえば、FindWindowには、記録時のウィンドウタイトルがそのまま記録されていますが、ウィンドウタイトルはアプリケーションによっては変化するものがあり、そのようなアプリケーションの場合には、変化しない部分だけに手作業で書き換える必要があります。あるいは、高速でマウスやキーボードを再生したときにアプリケーション側の処理が追いつかないこともあります。そのような場合は、Pauseを入れるなどの対策をする必要があります。あるいは、一部には高水準モードでは認識できない操作もあります。デバッガを使って確認しながら修正を行ってください。
■ 高水準モードで、一部の操作が記録されない
高水準モードの記録は、意味のある操作のほとんどを記録しますが、特殊な処理を行っている一部のアプリケーションでは記録できない操作もあります。
うまく記録できない場合は、手作業でコードを挿入するか、あるいは高水準モード以外のモードで記録してください。
■ Windowsスタートメニューの操作が、皆 ClickMenu(0, '#1,#1,#1') と記録される
Windowsスタートメニューは特殊なメニューのため、常に ClickMenu(0, '#1,#1,#1') というように記録されます。意図した通り再生するようにするには、#1 の部分の数字を上から数えたメニュー項目の番号に手で書き換えてください。
■ 「アクセスが拒否されました」というエラーになる
Windows Vistaでアプリケーションの操作を記録する場合は、ユーザーアカウント制御(User Account Control)を無効にする必要があります。
さもなければ、「アクセスが拒否されました」というエラーになります。
これは、Vistaでは、Triple-9のようなUIを自動操作するアプリケーションには署名が必要なのですが、そのための認証を個人で取得するのは困難なためです。
申し訳ありませんが、Vistaでアプリケーションの操作を記録したい場合は、一時的にUACをOFFにし、終わったらまた元に戻すようにしてご対応ください。
■ Vistaで記録開始すると、マウスのクリックや、キーボード入力ができなくなる
OSがVistaの場合のみ、記録を開始するとマウスのクリックやキーボード入力に反応しなくなる現象が確認されています。 常に発生するわけではなく、PCを再起動すると直る場合があります。調査を行っていますが、今のところ原因不明です。
この現象が発生した場合は、Ctrl + Esc キーを入力して記録モードを終了後、PCを再起動してもう一度試してみてください。

うまく再生しない

■ FindWindowでウィンドウを取得できない
ウィンドウのタイトルは実行時に変化するアプリケーションがあります。 このため、記録時とは異なったタイトルになっている可能性があります。 FindWindowはタイトルの一部分でもマッチしますので、変化しない部分のみ指定するようにしてください。 あるいは、タイトルは空にしてクラス名のみ指定することもできます。この場合、逆に他のウィンドウを指定しないように気をつけてください。
■ FindWindowでウィンドウは取得できるのにうまく動作しない (誤ったウィンドウを取得している)
得られたウィンドウハンドルが意図したものと異なっている可能性があります。タイトル文字列は一部分でも一致しますので、同様なタイトルを持つ他のウィンドウのハンドルが得られている可能性があります。また、アプリケーションによっては、見えないウィンドウが別にあり、このハンドルが得られていることもあります。
他のウィンドウと間違わないよう、できるだけクラス名も指定するようにし、またタイトルもできるだけ長くするのが良いでしょう。
あるいは一度は生成されたが、既にクローズされたウィンドウの可能性もあります。これは、IsWindow関数で確認できます。
■ 最初は動作するが、色々操作しているうちに動作しなくなる (ウィンドウハンドルが変化している)
ウィンドウハンドルが無効になっている可能性があります。 見かけ上はずっと存在するように見えるウィンドウでも、内部的には生成と削除を繰り返しているようなアプリケーションでは、ウィンドウハンドルが変化します。 たとえば、エクスプローラのリストビューは、フォルダーを切り替える毎に生成し直されます。 このようなアプリケーションの場合には、その都度、ハンドルを取得し直す必要があります。
■ Executeでアプリケーションは起動するが、その後うまく動作しない (メインウィンドウでない)
得られたウィンドウハンドルがメインウィンドウのハンドルでない可能性があります。 たとえば、スプラッシュウィンドウ(起動時に一時的に表示され完全に起動したら消えるウィンドウ)を表示するアプリケーションでは、Execute関数で得られるハンドルはこのスプラッシュウィンドウになります。
このような場合には、Executeの後にFindWindowを実行してあらためてウィンドウハンドルを取得するようにしてください。
■ 別な画面が表示されてからの操作がうまく機能しない (タイミングが早すぎる)
新しい画面を表示してから次の操作までのタイミングが早すぎて、新しい画面上にあるボタン等のコントロールを見つけることができない可能性があります。適当な位置にPauseを入れてタイミング調整してください。
■ アプリケーションの動きが、通常操作した場合と完全には同じにならない (マウスやキーイベントが発生しない)
コントロールを操作する関数や手続きには、マウスボタンのDown, Upのイベントが発生するものと、発生しないものがあります。
    発生しない： SelectMenu, SetTextなど
    発生する　： ClickMenu, PushButton, ToolBarClick, SendKeys
マウスボタンのDown, Upのイベントをとらえて特別な処理を行っているアプリケーションでSelectMenu関数などを使った場合は、まったく同じ動作にはならない場合があります。そのような場合には、ClickMenu, ToolBarClick, MouseClickやSendKeysを使ってください。
■ ToolBarやTabControl等の操作で、意図と異なるものを操作してしまう (コントロールの順番が変化している)
クラス名識別子Controlに序数を使っている場合には、これをそのコントロールのキャプションに変更してみてください。アプリケーションの中には、コントロールの順番が動的に変化するものもあります。
■ Windowsのバージョンによってスクリプトが動作しなくなる
Triple-9の言語仕様は、Windowsの各バージョン間で互換性はあります。しかし同じアプリケーションでも、動作しているＯＳによってクラス名識別子やキャプションなどが異なっているために同じスクリプトが動作しないことがあります。 クラス名識別子やキャプションが正しいかどうか確認してください。
■ Vistaで管理者権限で動作しているアプリケーションの一部の機能が再生しない
Vistaでは、管理者権限で動作しているアプリケーションを再生させる場合は、Triple-9も管理者権限で起動する必要があります。さもないと一部の再生が無視されます。
これは、Vistaでは権限の低いプロセスから高いプロセスへのSendMessageが無視されるためです。


ユーザ登録について

本ソフトウェアはシェアウェアです。2週間以上継続して使用されるには、送金、登録してご使用ください。
登録されていない場合には以下の機能制限があります。

■ 実行できるのは起動後30分までです。
■ ファイルへの保存ができません。
■ コンパイル機能を利用できません。
■ スクリプト実行毎に、バージョン情報が表示されます。

送金は下記①～②のいずれかでお願いします。入金を確認しますと、登録IDをお送りします。
登録IDが届きましたら、メニューの[ヘルプ - ユーザ登録]から、あなたのお名前と登録IDを入力してください。

① VECTORシェアレジによる送金
インターネットにアクセスできる方であれば、VECTORシェアレジ(http://www.vector.co.jp)による送金ができます。シェアレジ番号は sr004497、金額は7800円です。

② 銀行振込による送金
下記の銀行口座に振り込んでください。
振込後、以下の住所に振り込んだ旨のはがき、FAX、または電子メールをお送り下さい。
振込確認後、郵送または電子メールにて登録IDを発送します。

振込先 | 埼玉りそな銀行吹上支店 普通口座 0238968
金額 | 7800円
住所 | 〒365-0064
 | 埼玉県鴻巣市赤見台2丁目15-19 山本 利文
ＦＡＸ | 048-595-3755
メール | JCG01730@nifty.ne.jp


サポートについて

サポートについて
今後のバージョンアップ等のサポート情報は、
    http://www.vector.co.jp/authors/VA003525/
で提供していきます。ここにはTriple-9やその他の拙作のソフトで使っているプログラミングテクニックも紹介しています。
ぜひご参照ください。

著作権について
本プログラムの著作権は、山本利文が保有しています。
ご意見、ご質問等は、作者宛てメール(JCG01730@nifty.ne.jp)宛てお願いします。


break文

Breakは、for，while，またはrepeat文の制御フローを終了し、そのループ文の次の文から再開します。

例:
K := 0;
repeat
    C := Window[H].TPanel[0].TButton[K];
    if C = 0 then break;
    Str := GetText(C);
    Message(MB_OK, Str);
    K := K + 1;
until K > 10;


ランチャー画面から実行する方法

各ボタンを押すと対応したスクリプトが実行されます。
ボタンの数は、含めたスクリプトの数によります。
システムメニューには、一時停止、再開、停止の各メニューが追加されています。


ComSpyを自動で起動する

ComSpyを起動するときの引数として、ActiveXとアプリケーションを指定すると、自動でアプリケーションを起動することができます。

起動方法:
ComSpy.exe　/T={CLSID}:{IID}　/Q　アプリケーションのパス　引数

CLSIDおよびIIDにはそれぞれActiveXのCLSID, IIDを指定します。
もし/Qを付加した場合には、アプリケーションを起動した後、ComSpy自身は終了します。

■ 例
ComSpy.exe　/T={6262D3A0-531B-11CF-91F6-C2863C385E30}:{5F4DF280-531B-11CF-91F6-C2863C385E30}　"C:\Program Files\MyApp\TestClient.exe"　MyData

(注) ここで必要になるCLSIDとIIDは、次の手順で取得することができます。
1) ComSpyを起動し、[アプリケーションを起動する]ツールボタンを押す。
2) [COMインタフェースを公開して起動する]画面で、操作したいActiveXとそのインタフェースを選択して、[追加]ボタンを押す。
3) [認識させるActiveX]ListView上で右クリックされるポップアップメニューで、[CLSID:IIDをコピーする]を選択する。
4) これでCLSIDとIIDのペアがクリップボードにコピーされています。


COMインタフェースを公開してアプリケーションを起動する

ComSpy.exeを起動すると、次のような画面が現れます。

[実行中のオブジェクト]には、現在実行中でROT(Running Object Table)に登録されているオブジェクトの一覧が表示されます。

アプリケーションを起動したい場合は、メニューの[ファイル - プログラム起動]またはツールバーの[アプリケーションを起動する]を押してください。
[インストールされているActiveXを検索しています]という表示が現れ、その後(少々時間がかかります)次の画面が現れます。

この画面の下部にはPCにインストールされているActiveXの一覧が表示されています。 この中から参照したいActiveXとそのインタフェースを選択して[追加]ボタンを押してください。 次に、起動したいアプリケーションとその引数を指定し、[起動]ボタンを押してください。
指定したActiveXのインタフェースを公開してアプリケーションが起動されます。
メイン画面には、公開されたオブジェクトが表示されます(注1)。
アプリケーションが起動された後は、ComSpy自身は終了しても構いません。

(注1) ComSpyの[実行中のオブジェクト一覧]は、アプリケーションを起動した直後は自動で表示を更新します。アプリケーション起動してしばらく後にActiveXが生成される場合にはこの一覧は自動では反映されません。メニューの[表示 - 更新]またはツールバーの[表示更新]を押して手動で表示更新してください。
(注2) ComSpyで起動されたオブジェクトの場合、DisplayNameとProgIDの末尾には"[n]" (nは数字)が付加されています。nは、起動順番を示す数字で複数のオブジェクトを識別するために用いられます。


ActiveXコントロールを操作する

ComSpyを通してアプリケーションのActiveXインタフェースが公開されると、それをTriple-9から参照できるようになります。
GetActiveOleObject関数でインタフェースを取得すると、定義されているプロパティ、メソッドが使えるようになります。 具体的に使用できるプロパティ、メソッドについてはそのActiveXのマニュアルを参照してください。

例:
var V: OleObject;
    Str: String;
begin
    V := GetActiveOleObject('MSFlexGridLib.MSFlexGrid', 0);
    V.Row := 1;
    V.Col := 1;
    Str := V.Text;　　　　//1 行 1列のセルの文字列を取得する
    Message(MB_OK,Str);
end;
GetActiveOleObjectに書くべき式は、ComSpyの画面からクリップボード経由で取得することができます。
ComSpyのメイン画面の[実行中のオブジェクト]一覧の行を選択して右クリックしてください。 現れるポップアップメニューから[Triple-9向けにコピーする]を選択すると、GetActiveOleObject の式がクリップボードにコピーされます。


カスタムコンパイル

※ カスタムコンパイルを行うには、別途 Borland Delphi (Professional 3.0以上)が必要です。

カスタムコンパイルを行うには、コンパイル画面において [カスタム]ラジオボタンにチェックを入れてコンパイルします。

a) 実行方法のカスタマイズ
起動方法を標準以外、たとえば特定の画面が現れたら自動的に開始するとか、特定のキー操作で開始するとか、自由にカスタマイズできます。
メインの関数が Run999.dpr で提供されていますので、これを編集してコンパイルします。

b) その他のカスタマイズ

b-1) ボタンのイメージ変更
ボタンのイメージを変更するには、次の手順によります。
1) RunLib.bmpを、任意のイメージエディタで編集する。
2) リソースコンパイラでRunLib.rcをコンパイルし、RunLib.resを生成する。
これは、DelphiのBINディレクトリにあるbrc32.exeを次のように実行します。
    brc32 －r RunLib.rc
3) Triple-9でコンパイルする。
あるいは、EXEファイル生成後、eXeScopeによりBitmapリソースを編集するという方法もあります。
eXeScopeについては、http://www.vector.co.jp/authors/VA003525/ をご参照ください。

b-2) ヒントメッセージの変更
ヒントメッセージを変更するには、次の手順によります。
1) RunLib.rcの中の、STRINGTABLEの内容を編集する。
2) リソースコンパイラでRunLib.rcをコンパイルし、RunLib.resを生成する。
3) Triple-9でコンパイルする。
あるいは、EXEファイル生成後、eXeScopeによりStringリソースを編集するという方法もあります。

参考: コンパイルに関係したファイルは、下記の通りです。
Run999.dpr | Delphiプロジェクトファイル
Run999.res | Delphiが標準で使用するリソース
RunLib.res | ボタンイメージとヒントメッセージのための追加のリソース
RunLib.rc | RunLib.resを生成するためのソース
RunLib.bmp | RunLib.resの生成に必要な、ボタンのbitmapイメージ
SCode.pas | スクリプトの内容をプリコンパイルしたPascalソース Triple-9でコンパイルする際に、動的に生成されます
Play.dcu | EXEファイルのリンクに必要なTriple-9ランタイム
PlayEx.dcu | 同上
PlayOle.dcu | 同上
PlayIE.dcu | 同上
SendKey.dcu | 同上
Code.dcu | 同上
DllDef.dcu | 同上
Def.dcu | 同上
Common.dcu | 同上

上記9個の *.dcu ファイルは、Delphiのバージョンに対応して用意してあります。 インストール手順に従い、お使いのDelphiのバージョンを確認してインストールしてください。


パラメータの省略

パラメータによっては省略できるものがあります。
省略したパラメータはデフォールトの値が使われます。
次の例は、先頭2個のパラメータを省略して3番目のパラメータに2を指定しています。

例: V.Sheets.Add( , , 2);


スクリプト編集領域の表示

メニューの[表示 - フォント指定] により、フォントの切り替えができます。
メニューの[表示 - タブ設定] により、タブの間隔を切り替えられます。


生成した実行ファイルの配布

生成した実行ファイル(.EXEファイル)は、自由に配布できます。 このとき、同時にTriple9.dllも配布してください。生成した実行ファイルとTriple9.dll以外は、再配布禁止です。 カスタムコンパイルで、[パッケージを使う]にチェックしていた場合は、次のDelphiパッケージも必要です。

VCL30.DPL, VCLX30.DPL (Delphi 3.0/3.1)
VCL**.BPL, VCLX**.BPL, RTL**.BPL (Delphi 4.0以上)

(注)　**の部分にはバージョン番号が入ります。お手元のDelphiのdeploy.htmを参照してください。


生成した実行ファイルの起動方法

生成した実行ファイルは、引数に何も指定しなかった場合は、コンパイル時に「条件」で指定した方法で実行開始されます。
次のように引数を指定すると、この開始方法を変更できます。
    /M : ランチャー方式
    /T : タスクトレイ
    /A : 起動と同時

/A を指定した場合は、さらにスクリプトの番号(1から始まる)を指定することにより、実行するスクリプトを指定できます。

例:　2番目のスクリプトを起動と同時に実行開始するには次のコマンドを用います。
      Project1.exe　/A　2


組み込み関数と手続き

実行関数/手続き

トレース出力

ダイアログボックス

ウィンドウ操作

入力状態取得

DLL(ダイナミックリンクライブラリ)

DDE(ダイナミックデータ交換)

数値／文字列処理

クリップボード操作

ファイル入出力

OLEオートメーション

IME日本語入力モード制御

インターネットエクスプローラ

その他


クリップボード操作

GetClipboardText関数

SetClipboardText手続き


DDE(ダイナミックデータ交換)

CloseLink手続き

ExecuteMacro関数

PokeData関数

RequestData関数

SetLink関数


ダイアログボックス

InputBox関数

Message関数

MessageWait関数

OpenDlg関数

PasswordBox関数

SaveDlg関数


DLL(ダイナミックリンクライブラリ)

FreeDLL手続き

LoadDLL関数


実行関数／手続き

CompareImage関数
Execute関数
MessageBeep手続き
MouseClick手続き
MouseDrag手続き
MouseMove手続き
Origin手続き
Pace手続き
Pause手続き
PlaySound関数
PowerOff手続き
Rate手続き
SaveImage関数
SendKeys手続き
SendMessage関数
SendText手続き
ShellExecute関数
WaitClose関数
WaitFolder手続き
WaitUntil手続き
WaitIdle関数


ファイル入出力

ChDir手続き
CloseFile手続き
DeleteFile関数
FileExists関数
FindFirstFile関数
FindNextFile関数
GetDir関数
MkDir関数
OpenFile関数
ReadLine関数
RenameFile関数
RmDir関数
WaitFolder手続き
WriteLine手続き


インターネットエクスプローラ

%Find関数


IME日本語入力モード制御

ImeGetState関数

ImeSetState手続き


入力状態取得

GetCursorPos手続き

GetKeyState関数


数値／文字列処理

Chr関数
Copy関数
DateStr関数
Format関数
IntToStr関数
Length関数
LowerCase関数
Pos関数
Random関数
StrToInt関数
TimeStr関数
UpperCase関数


OLEオートメーション

CreateOleObject関数

GetActiveOleObject関数


その他の関数

GetEnv関数

GetVersion関数

ParamCount関数

ParamStr関数

ScreenHeight関数

ScreenWidth関数


ウィンドウ操作

コントロールへのメッセージの送信
ウィンドウ
    FindPopup関数
    FindWindow関数
    GetClassName関数
    GetDlgItem関数
    GetFGWindow関数
    GetFocus関数
    GetScrollInfo関数
    GetText関数
    GetWindow関数
    GetWindowPos手続き
    IsWindow関数
    IsWindowEnabled関数
    IsWindowVisible関数
    SetFGWindow手続き
    SetFocus手続き
    SetScrollInfo手続き
    SetText手続き
    SetWindowPos手続き
    ShowWindow関数
    WaitClose関数
    WM_CLOSE
メニュー
    ClickMenu関数
    GetMenuState関数
    SelectMenu関数
    SetMenuState関数
    WaitMenu関数
ボタン、ラジオボタン、チェックボックス
    BM_SETCHECK
    GetState関数
    GetText関数
    PushButton関数
    SetText手続き
エディットコントロール
    EditGetLine関数
    EM_GETFIRSTVISIBLELINE
    EM_GETLINECOUNT
    EM_LINESCROLL
    EM_REPLACESEL
    EM_SCROLL
    EM_SETSEL
    EM_UNDO
    GetText関数
    SetText手続き
    WM_CLEAR
    WM_COPY
    WM_CUT
    WM_PASTE
    WM_UNDO
コンボボックス
    CB_FINDSTRING
    CB_FINDSTRINGEXACT
    CB_GETCOUNT
    CB_GETCURSEL
    CB_GETDROPPEDSTATE
    CB_GETLBTEXT
    CB_SELECTSTRING
    CB_SETCURSEL
    CB_SETTOPINDEX
    CB_SHOWDROPDOWN
    ComboBoxSelect関数
リストボックス
    LB_FINDSTRING
    LB_FINDSTRINGEXACT
    LB_GETCOUNT
    LB_GETCURSEL
    LB_GETSEL
    LB_GETSELCOUNT
    LB_GETTEXT
    LB_GETTOPINDEX
    LB_SELECTSTRING
    LB_SETCURSEL
    LB_SETSEL
    LB_SETTOPINDEX
    ListBoxSelect関数
タブコントロール
    TabClick関数
    TabGetText関数
    TCM_GETCURFOCUS
    TCM_GETCURSEL
    TCM_GETITEMCOUNT
    TCM_GETROWCOUNT
    TCM_SETCURFOCUS
    TCM_SETCURSEL
ツールバー
    TB_BUTTONCOUNT
    TB_CHECKBUTTON
    TB_ENABLEBUTTON
    TB_GETROWS
    TB_GETSTATE
    TB_HIDEBUTTON
    TB_INDETERMINATE
    TB_ISBUTTONCHECKED
    TB_ISBUTTONENABLED
    TB_ISBUTTONHIDDEN
    TB_ISBUTTONINDETERMINATE
    TB_ISBUTTONPRESSED
    TB_PRESSBUTTON
    TB_SETSTATE
    ToolBarClick手続き
    ToolBarGetBtn関数
リストビュー
    ListViewClick関数
    ListViewGetText関数
    LVM_EDITLABEL
    LVM_ENSUREVISIBLE
    LVM_GETITEMCOUNT
    LVM_GETITEMSTATE
    LVM_GETSELCTEDCOUNT
    LVM_GETTOPINDEX
    LVM_SCROLL
ツリービュー
    TreeViewClick関数
    TreeViewGetState関数
    TreeViewGetText関数
    TVM_EDITLABEL
    TVM_ENDEDITLABELNOW
    TVM_ENSUREVISIBLE
    TVM_EXPAND
    TVM_GETCOUNT
    TVM_GETNEXTITEM
    TVM_GETVISIBLECOUNT
    TVM_SELECTITEM
ステータスバー
    GetText関数
    SetText手続き
    StatusBarGetText関数
トラックバー
    TBM_GETPOS
    TBM_GETSELEND
    TBM_GETSELSTART
    TBM_SETPOS
    TBM_SETSEL
    TBM_SETSELEND
    TBM_SETSELSTART
スピンボタン
    UDM_GETBUDDY
    UDM_GETPOS
    UDM_SETPOS
ヘッダコントロール
    HDM_GETITEMCOUNT
    HeaderGetText関数


名前付きパラメータ

[ ] または ( ) の中に、パラメータの名前と値をペアで記述します。値には式も使えます。
名前付きでパラメータを指定した場合、順番は任意で構いません。 名前付きで指定しないパラメータは正しい位置になければなりません。 このため、もし混在する場合は、名前なしパラメータが先に来なければなりません。

例: V.Sheets.Add(Count := 2);
    V.Sheets.Add(Count := Pages - 1);


コンパイル方法

コンパイルするには、まずコンパイルしたいスクリプト(複数個可)を開いた上で、 [image] ボタン、またはメニューの[実行 - コンパイル]を選択します。 現れたダイアログボックスで出力先の実行ファイル名を設定した後、[コンパイル]ボタンを押します。 「対象スクリプト」のリストボックスに、現在開かれているスクリプトのファイル名が表示されています。 この中で、実際にコンパイルしたいスクリプトにチェックをつけてください。 ここに表示されていても、チェックのついていないものはコンパイル対象とはされません。 また、リストボックス内の順番は、出来上がったEXEファイルのボタンの順番になります。 変更したい場合は、Drag & Dropして順番を変更してください。
[パッケージを使う]にチェックすると、Delphiのパッケージを使うようにコンパイルされ、生成されるEXEファイルのサイズを小さくできます。 [条件]コンボボックスにテキストを入力すると、条件コンパイルができます。 Delphiで、$DEFINEコンパイラ指令を与えることに相当します。現在の版では以下が指定できます。

■ 無指定 | : ランチャー形式のEXEを作成。
■ USE_AUTO | : EXEを起動するだけで再生開始するEXEを作成。
■ USE_TASKTRAY | : タスクトレイに収容し、メニューで実行開始するEXEを作成。
以下は、将来拡張用に予約されており、現在未使用です。
■ USE_MENU |
■ USE_HOTKEY |
■ USE_TIMER |

[カスタム]ラジオボタンをチェックすると、カスタムコンパイルを行うことができます。


操作手順

メニューとボタン

スクリプトを編集する

アプリケーションの操作を記録する

アプリケーションのコントロール情報を取得する

インターネットエクスプローラの操作を記録する

インターネットエクスプローラの情報を取得する

スクリプトの静的なテスト

トレース出力

デバッグ

スクリプトを実行する

オプションを指定する

スケジュールを編集する

カスタムコントロールを登録する

コンパイルしてEXEファイルを作成する

ComSpyの使い方


スクリプトの印刷

メニューの[ファイル - 印刷]により、スクリプトを印刷できます。
メニューの[ファイル - プリンタの設定]により、プリンタの設定を変更できます。


言語レファレンス

スクリプト概要
    スクリプトの構造
    定数と変数
    標準定数
    関数と手続き
    式
    演算子
    OLEオートメーション

ウィンドウとコントロール
    ウィンドウの指定
    コントロールの指定

インターネットエクスプローラの操作

文

組み込み関数と手続き

DLLとDDE
    DLLの作成と呼び出し
    DDEによる通信

凡例：構文を説明している部分では次の記号を使っています。
例 | 意味
|integer/string/boolean| | | |の中で/で区切られた項目のいずれか一つ
[, 変数名] | [ ]の中の項目はオプションである
[文; …] | [ ]の中の項目を0個以上、複数個並べられる


文

文には次のものがあります。

代入文

手続き文

if文

for文

while文

repeat文

break文

continue文

goto文

exit文


トレース出力

Clear手続き

Print手続き


チュートリアル

アプリケーションの操作を記録する(1)

メニューを選択する、ボタンを押す

マウス、キーボードを操作する

アプリケーションの操作を記録する(2)

コントロールの状態を調べる

画面イメージを保存する、比較する

Excelのシートにアクセスする

ActiveXを含むアプリケーションを自動化する

一連のスクリプトをスケジュールする

タイミングの調整

このチュートリアルで説明しているスクリプトが、ディレクトリ Samples の中にありますので、利用してください。