(57)【要約】【課題】ＧＵＩ部品を有するプログラムやそのソースコードの完成・入手前でも，そのＧＵＩ部品を制御する別のプログラムを作成することが可能となる技術を提供する。【解決手段】スクリプト制御エンジン１１において，ＧＵＩ部品情報取得部１１１は，ＯＳ３０を介して，表示された画面４０上の各ＧＵＩ部品４５の情報を取得する。順序決定部１１２は，取得された各ＧＵＩ部品４５の位置情報に基づいて，例えば「横書き文書」の流れの順などの所定のルールに従って，画面４０上の各ＧＵＩ部品４５の順序を決定する。ＧＵＩ部品４５と決定された順序との対応情報は，情報記憶部１１３に記憶される。ＧＵＩ部品制御部１１４は，ＧＵＩ部品４５と決定された順序との対応情報を用いて，スクリプト１２の制御指示に記述された順序の情報から制御対象のＧＵＩ部品４５を特定し，ＯＳ３０を介して制御対象のＧＵＩ部品４５への制御を行う。【選択図】図５
2011107949.tif 000002
【特許請求の範囲】
【請求項１】
あるプログラムが表示する画面のＧＵＩ部品を制御する別のプログラムであって，
コンピュータに，
少なくとも前記ＧＵＩ部品の前記画面上の位置情報を含む，前記画面の前記ＧＵＩ部品の情報を取得する手順と，
前記ＧＵＩ部品の前記画面上の位置情報に基づいて，前記画面の前記ＧＵＩ部品の順序を所定のルールで決定する手順と，
前記ＧＵＩ部品と決定された順序との対応情報を，前記コンピュータがアクセス可能な記憶装置に記憶する手順と，
前記順序を用いて制御の対象となる前記ＧＵＩ部品を特定した指示に対して，前記記憶装置に記憶された前記ＧＵＩ部品と順序との対応情報を参照して制御の対象となる前記ＧＵＩ部品を特定し，前記画面の前記ＧＵＩ部品への制御を行う手順とを
実行させるためのＧＵＩ部品制御プログラム。
【請求項２】
前記所定のルールは，前記画面において，より位置が上となるＧＵＩ部品の順序が先になるように，さらには垂直方向の占有座標が互いに重なるＧＵＩ部品間ではより位置が左となるＧＵＩ部品の順序が先になるように，前記ＧＵＩ部品の順序を決定するルールである
ことを特徴とする請求項１に記載のＧＵＩ部品制御プログラム。
【請求項３】
あるプログラムが表示する画面のＧＵＩ部品を，別のプログラムから制御するＧＵＩ部品制御方法であって，
前記別のプログラムを実行するコンピュータが，
少なくとも前記ＧＵＩ部品の位置情報を含む，前記画面の前記ＧＵＩ部品の情報を取得する過程と，
前記ＧＵＩ部品の位置情報に基づいて，前記画面の前記ＧＵＩ部品の順序を所定のルールで決定する過程と，
前記ＧＵＩ部品と決定された順序との対応情報を，前記コンピュータがアクセス可能な記憶装置に記憶する過程と，
前記順序を用いて制御の対象となる前記ＧＵＩ部品を特定した指示に対して，前記記憶装置に記憶された前記ＧＵＩ部品と順序との対応情報を参照して制御の対象となる前記ＧＵＩ部品を特定し，前記画面の前記ＧＵＩ部品への制御を行う過程とを実行する
ことを特徴とするＧＵＩ部品制御方法。
【請求項４】
あるプログラムが表示する画面のＧＵＩ部品を，別のプログラムにより制御するＧＵＩ部品制御装置であって，
少なくとも前記ＧＵＩ部品の位置情報を含む，前記画面の前記ＧＵＩ部品の情報を取得するＧＵＩ部品情報取得部と，
前記ＧＵＩ部品の位置情報に基づいて，前記画面の前記ＧＵＩ部品の順序を所定のルールで決定する順序決定部と，
前記ＧＵＩ部品と決定された順序との対応情報を記憶する情報記憶部と，
前記順序を用いて制御の対象となる前記ＧＵＩ部品を特定した指示に対して，前記情報記憶部に記憶された前記ＧＵＩ部品と順序との対応情報を参照して制御の対象となる前記ＧＵＩ部品を特定し，前記画面の前記ＧＵＩ部品への制御を行うＧＵＩ部品制御部とを備える
ことを特徴とするＧＵＩ部品制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，あるプログラムにより表示された画面のＧＵＩ（Graphical User Interface）部品を，そのプログラムの外から制御するＧＵＩ部品制御プログラム，ＧＵＩ部品制御方法およびＧＵＩ部品制御装置に関するものである。
【背景技術】
【０００２】
あるプログラムが表示するウインドウなどの画面上のＧＵＩ部品を，そのプログラムとは別のプログラムから管理・操作したい局面がある。例えば，スクリプトに記載された手順の通りに，ＧＵＩ部品を有する対象プログラムのオートデモを行いたい場合などである。なお，以下では，制御の対象となるＧＵＩ部品を有する前者のプログラムを，対象プログラムと呼ぶ。また，対象プログラムのＧＵＩ部品を外部から制御する後者のプログラムを，制御プログラムと呼ぶ。
【０００３】
このとき，制御プログラムでは，対象プログラムのＧＵＩ部品を特定して制御指示が行われる。ＧＵＩ部品ごとに固有な識別情報としては，例えばＧＵＩ部品の部品ＩＤや座標情報などがある。部品ＩＤは，対象プログラム内で各ＧＵＩ部品に対してユニークに割り当てられた識別情報である。また，座標情報は，対象プログラムにより表示される画面上のＧＵＩ部品の位置を示す情報である。例えば，対象プログラムにより表示される画面上のＧＵＩ部品の位置は，左端，右端，上端，下端の４つの座標値の組で表される。
【０００４】
このようなＧＵＩ部品に固有の識別情報は，対象プログラムに埋め込まれている。ＧＵＩ部品に固有の識別情報を取得する場合には，実際に対象プログラムを動作させて抽出するか，対象プログラムのソースリストを解析して取得する。
【０００５】
例えば，入手した対象プログラムを実行し，実際にマウスなどを動かしたユーザによるＧＵＩ部品への操作を記録して，ＧＵＩ部品を制御するスクリプトを自動作成する技術がある。この技術では，実行された対象プログラムにより表示された画面上のＧＵＩ部品の識別情報を抽出して，スクリプトを記述する。作成されたスクリプトは，スクリプト制御エンジンで実行されることにより，対象プログラムにより表示された画面上のＧＵＩ部品を外部から操作する。この技術では，スクリプトとスクリプト制御エンジンとが，対象プログラムが表示する画面のＧＵＩ部品を外部から制御する制御プログラムとなる。
【０００６】
なお，メニュ画面上の位置を簡易な通し番号で表示し，ユーザがその通し番号を指定してアイコンの配置位置を変更する技術が知られている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平６−１２２１７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
対象プログラムやそのソースコードから，制御対象であるＧＵＩ部品に固有の識別情報を取得して，制御プログラムを作成する場合には，対象プログラムやそのソースコードの完成後・入手後でなければ，制御プログラムの作成が困難であるという問題がある。
【０００９】
一般に，ＧＵＩ部品に対して付される部品ＩＤや座標などの情報は，ＧＵＩデザイナソフトウェア等を用いた対象プログラムの開発時に決定される情報である。そのため，対象プログラムやそのソースコードの開発前に，それらのＧＵＩ部品に固有の識別情報を知ることはできなく，ＧＵＩ部品を含む画面のイメージが決まっていても，対象プログラムの開発と同時に制御プログラムを作成することが難しい。
【００１０】
例えば，上述のユーザによるＧＵＩ部品への操作を記録してＧＵＩ部品を制御するスクリプトを自動作成する技術では，完成された対象プログラムが入手できなければ，スクリプトを生成することが難しい。
【００１１】
本発明は，上記の問題の解決を図り，ＧＵＩ部品を有するプログラムやそのソースコードの完成・入手前でも，そのＧＵＩ部品を制御する別の制御プログラムを作成することが可能となる技術を提供することを目的とする。
【課題を解決するための手段】
【００１２】
あるプログラムが表示する画面のＧＵＩ部品への制御を別のプログラムによって行うコンピュータを，次のように機能させる。
【００１３】
すなわち，前記別のプログラムは，前記別のプログラムがインストールされて実行されるコンピュータに，少なくともＧＵＩ部品の画面上の位置情報を含む，画面のＧＵＩ部品の情報を取得する手順と，ＧＵＩ部品の画面上の位置情報に基づいて，画面のＧＵＩ部品の順序を所定のルールで決定する手順と，ＧＵＩ部品と決定された順序との対応情報を，コンピュータがアクセス可能な記憶装置に記憶する手順と，順序を用いて制御の対象となるＧＵＩ部品を特定した指示に対して，記憶装置に記憶されたＧＵＩ部品と順序との対応情報を参照して制御の対象となるＧＵＩ部品を特定し，画面のＧＵＩ部品への制御を行う手順とを実行させる。
【発明の効果】
【００１４】
上記の技術によって，ＧＵＩ部品を有するプログラムやそのソースコードの完成・入手前でも，そのＧＵＩ部品を制御する別の制御プログラムを作成することが可能となる。また，制御対象のＧＵＩ部品の特定に簡明な順序の情報が用いられるので，制御プログラム作成時のミスなどが減り，制御プログラム作成の効率がよくなる。
【図面の簡単な説明】
【００１５】
【図１】スクリプトを用いた外部からのＧＵＩ部品の制御例を示す図である。
【図２】ＧＵＩ部品を有する画面の例を示す図である。
【図３】ＧＵＩ部品を制御するスクリプトの記述例を示す図である。
【図４】部品識別名でＧＵＩ部品が特定されたスクリプトの記述例と部品識別名対応情報の例とを示す図である。
【図５】本実施の形態による制御プログラムを含むコンピュータシステムの構成例を示す図である。
【図６】本実施の形態によるスクリプト作成の例を説明する図である。
【図７】本実施の形態によるＧＵＩ部品情報の例を示す図である。
【図８】本実施の形態によるＧＵＩ部品に対する仮の順序付けが行われた例を示す図である。
【図９】人の「横書き文書」に対するイメージに適応したＧＵＩ部品の順序の入れ替えを説明する図である。
【図１０】本実施の形態によるＧＵＩ部品に付する順序のソート手順を説明する図である。
【図１１】本実施の形態によるＧＵＩ部品に付する順序のソート手順を説明する図である。
【図１２】本実施の形態によるＧＵＩ部品に対する順序付けの結果の例を示す図である。
【図１３】本実施の形態によるＧＵＩ部品・順序対応情報の例を示す図である。
【図１４】本実施の形態のスクリプト制御エンジンによるＧＵＩ部品制御処理フローチャートである。
【図１５】本実施の形態の順序決定部によるＧＵＩ部品順序決定処理フローチャートである。
【図１６】本実施の形態の順序決定部によるＧＵＩ部品順序ソート処理フローチャートである。
【図１７】本実施の形態によるＧＵＩ部品制御技術の効果を説明する図である。
【図１８】順序を決定するルールのバリエーションを示す図である。
【発明を実施するための形態】
【００１６】
以下，本実施の形態について，図を用いて説明する。
【００１７】
まず，本実施の形態による外部からのＧＵＩ部品の制御技術を説明する前に，対象プログラムにより表示された画面上のＧＵＩ部品を，スクリプトとそのスクリプトを実行するスクリプト制御エンジンとにより制御する技術の例を説明する。
【００１８】
例えば，対象プログラムの動作検証を自動で行いたい場合などに，スクリプトとスクリプト制御エンジンとを用いた対象プログラムの自動制御が行われる。対象プログラムへの制御手順が記載されたスクリプトを走行させることにより，対象プログラムの自動動作検証が行われる。このとき，表示された画面上のＧＵＩ部品への操作が必要な場合には，そのＧＵＩ部品を特定した制御指示がスクリプトに記載される。
【００１９】
図１は，スクリプトを用いた外部からのＧＵＩ部品の制御例を示す図である。
【００２０】
図１において，コンピュータ１’は，ＣＰＵ（Central Processing Unit ），ＲＡＭ（Random Access Memory）等のメモリ，ハードディスクなどのハードウェア（図示省略）を備え，これらの資源を用いてソフトウェアプログラムを実行する。また，コンピュータ１’は，ＯＳ（Operating System）３０を備える。
【００２１】
コンピュータ１’では，ＧＵＩ部品を有する画面４０の表示を行う対象プログラム２０の実行ファイルが，ディスク領域に格納されている。
【００２２】
また，対象プログラムを制御するための制御プログラム１０’として，スクリプト制御エンジン１１’とスクリプト１２’とが作成される。図１に示すコンピュータ１’では，スクリプト制御エンジン１１’の実行ファイルと，スクリプト１２’のファイルとが，ディスク領域に格納されている。
【００２３】
ユーザは，対象プログラム２０の実行ファイルとスクリプト制御エンジン１１’の実行ファイルとを開き，対象プログラム２０とスクリプト制御エンジン１１’とを実行状態にする。
【００２４】
図２は，ＧＵＩ部品を有する画面の例を示す図である。
【００２５】
ここでは，対象プログラム２０の実行により，図２に示すようなダイアログボックスのウインドウの画面４０が表示されるものとする。図２に示すように，画面４０には，５つのテキストボックスのＧＵＩ部品４５ａ〜ｅがあるものとする。
【００２６】
スクリプト制御エンジン１１’は，スクリプト１２’のファイルを読み込む。ここでは，対象プログラム２０の動作検証のために，その対象プログラム２０と異なるプロセスから，図２に示す画面４０上のＧＵＩ部品４５ａ〜ｅに文字を自動入力する目的のスクリプト１２’が読み込まれる。スクリプト制御エンジン１１’は，スクリプト１２’の操作命令に記述されたＧＵＩ部品４５を特定するための情報を，ＲＡＭ領域に格納する。この制御対象のＧＵＩ部品４５の特定情報は，ＯＳ３０が理解できるレベルのＧＵＩ部品４５の部品ＩＤや位置情報である。スクリプト制御エンジン１１’は，パラメータとしてＧＵＩ部品４５の部品ＩＤや位置情報などの識別情報をＯＳ３０に渡して，ＧＵＩ部品４５を操作する。
【００２７】
このように，対象プログラム２０の外部からＧＵＩ部品４５を制御する場合には，ＧＵＩ部品４５を識別情報で特定して制御を行う必要がある。部品ＩＤや位置情報などのＧＵＩ部品４５に固有の識別情報は，対象プログラム２０やそのソースプログラムから取得することができる。対象プログラム２０やそのソースプログラムから取得されたＧＵＩ部品４５に固有の識別情報を用いて，スクリプト１２’が作成される。
【００２８】
図３は，ＧＵＩ部品を制御するスクリプトの記述例を示す図である。
【００２９】
図３（Ａ）は，部品ＩＤでＧＵＩ部品４５が特定されたスクリプト１２’の記述例を示し，図３（Ｂ）は，位置情報でＧＵＩ部品４５が特定されたスクリプト１２’の記述例を示す。図３に示すスクリプト１２’の記述例において，文頭の“Ｅｄｉｔ”は，テキストボックスへの入力指示を意味するものとする。図３に示すスクリプト１２’の記述例の各行は，
Ｅｄｉｔ  制御対象のＧＵＩ部品４５の特定情報，入力文字列
の形式で記述されているものとする。
【００３０】
制御対象のＧＵＩ部品４５の特定情報として，ＧＵＩ部品４５の部品ＩＤを利用する方法が考えられる。例えば，対象プログラム２０にＧＵＩ部品４５ａ〜ｅの部品ＩＤの問い合わせを行い，次に示す値の部品ＩＤが返されたものとする。
【００３１】
ＧＵＩ部品４５ａの部品ＩＤ  ：  ３２７６８
ＧＵＩ部品４５ｂの部品ＩＤ  ：  ５４６５
ＧＵＩ部品４５ｃの部品ＩＤ  ：  ８８２３
ＧＵＩ部品４５ｄの部品ＩＤ  ：  １５
ＧＵＩ部品４５ｅの部品ＩＤ  ：  ４００３２
このような対象プログラムから得られる部品ＩＤは，対象プログラム２０の作成に用いたＧＵＩデザイナソフトウェアにより与えられた不規則な値となる。ＧＵＩ部品４５の部品ＩＤは，対象プログラム２０の実行のたびに変動することはないので，事前に調べておくことが可能である。
【００３２】
スクリプト１２’の作成者は，得られた部品ＩＤを用いて，図３（Ａ）に示すようなＧＵＩ部品４５ａ〜ｅ制御のスクリプト１２’を作成する。
【００３３】
また，制御対象のＧＵＩ部品４５の特定情報として，ＧＵＩ部品４５の位置情報を利用する方法が考えられる。例えば，対象プログラム２０にＧＵＩ部品４５ａ〜ｅの位置情報の問い合わせを行い，次に示すような座標が返されたものとする。
【００３４】
ＧＵＩ部品４５ａの座標  ：  （１００，２００，５０，９０）
ＧＵＩ部品４５ｂの座標  ：  （１００，２００，１４０，１８０）
ＧＵＩ部品４５ｃの座標  ：  （３５０，５００，１４０，１８０）
ＧＵＩ部品４５ｄの座標  ：  （８０，１３０，２３０，２７０）
ＧＵＩ部品４５ｅの座標  ：  （１５０，２００，２２９，２７０）
ここでは，画面４０におけるＧＵＩ部品４５の座標が，（左端，右端，上端，下端）の順で示されている。画面４０におけるＧＵＩ部品４５の座標も，対象プログラム２０の実行のたびに変動することはないので，事前に調べておくことが可能である。
【００３５】
スクリプト１２’の作成者は，得られた座標を用いて，図３（Ｂ）に示すようなＧＵＩ部品４５ａ〜ｅ制御のスクリプト１２’を作成する。なお，ＧＵＩ部品４５を座標で特定する場合には，左端（または右端）と上端（または下端）との２つのパラメータがあれば十分である。図３（Ｂ）に示すスクリプト１２’では，ＧＵＩ部品４５の座標が（左端，上端）の２つのパラメータで記述されている。
【００３６】
また，ＯＳ３０が理解できるＧＵＩ部品４５に固有の識別情報ではなく，スクリプト１２’の作成者が定める一意名を制御対象のＧＵＩ部品４５の特定情報として利用する方法が考えられる。ここでは，スクリプト１２’の作成者が定めた一意名を，部品識別名と呼ぶものとする。
【００３７】
スクリプト１２’の作成者が定める部品識別名は，ＯＳ３０が理解できるＧＵＩ部品４５に固有の識別情報ではない。そのため，スクリプト制御エンジン１１’は，スクリプト１２’に記述された部品識別名を直接に用いて，ＧＵＩ部品４５を制御することができない。
【００３８】
スクリプト１２’の作成者は，事前に対象プログラム２０からＯＳ３０が理解できるＧＵＩ部品４５に固有の識別情報を調べておき，部品識別名とＯＳ３０が理解できるＧＵＩ部品４５に固有の識別情報との対応を記録した情報を用意しておく。ここでは，部品識別名とＯＳ３０が理解できるＧＵＩ部品４５に固有の識別情報との対応を記録した情報を，部品識別名対応情報と呼ぶものとする。用意された部品識別名対応情報のファイルは，図１に示すコンピュータ１’のディスク領域に格納される。
【００３９】
スクリプト制御エンジン１１’は，ＯＳ３０が理解できない部品識別名で制御対象のＧＵＩ部品４５が特定されたスクリプト１２’を実行する際に，部品識別名対応情報のファイルを読み込む。スクリプト制御エンジン１１’は，部品識別名対応情報を参照し，スクリプト１２’に部品識別名を用いて記述された制御対象のＧＵＩ部品４５の特定情報を，ＯＳ３０が理解できる部品ＩＤや位置情報に変換する。スクリプト制御エンジン１１’は，パラメータとしてＧＵＩ部品４５の部品ＩＤや位置情報などの識別情報をＯＳ３０に渡して，ＧＵＩ部品４５を操作する。
【００４０】
なお，部品ＩＤと対象プログラム２０上で表現される一意な文字列との対応が，対象プログラム２０のソースコードに記述されている場合がある。対象プログラム２０のソースコードが参照できる場合には，作成者は，そのソースコードから部品ＩＤと一意な文字列との対応を取り出し，一意な文字列を部品識別名として，部品識別名対応情報を作成できる。
【００４１】
図４は，部品識別名でＧＵＩ部品が特定されたスクリプトの記述例と部品識別名対応情報の例とを示す図である。
【００４２】
図４（Ａ）は，部品識別名でＧＵＩ部品４５が特定されたスクリプト１２’の記述例を示す。図４（Ｂ）は，部品識別名とＧＵＩ部品４５の部品ＩＤとが対応付けられた部品識別名対応情報の例を示し，図４（Ｃ）は，部品識別名とＧＵＩ部品４５の座標とが対応付けられた部品識別名対応情報の例を示す。
【００４３】
例えば，対象プログラム２０の処理により表示された画面４０上のＧＵＩ部品４５ａ〜ｅに，次に示す部品識別名を割り当てるものとする。
【００４４】
ＧＵＩ部品４５ａの部品識別名  ：  IDC ＿EDIT＿TO＿FIND＿STRING
ＧＵＩ部品４５ｂの部品識別名  ：  IDC ＿EDIT＿TO＿REPLACE ＿STRING
ＧＵＩ部品４５ｃの部品識別名  ：  IDC ＿EDIT＿FONTNAME
ＧＵＩ部品４５ｄの部品識別名  ：  IDC ＿EDIT＿EXCEPT＿CHARACTER 
ＧＵＩ部品４５ｅの部品識別名  ：  IDC ＿EDIT＿EXCEPT＿COUNT 
部品識別名として割り当てられる文字列は，例えば，対象プログラム２０のソースコードから得られた一意な文字列である。
【００４５】
スクリプト１２’の作成者は，部品識別名を用いて，図４（Ａ）に示すようなＧＵＩ部品４５ａ〜ｅ制御のスクリプト１２’を作成する。
【００４６】
また，スクリプト１２’の作成者は，部品識別名対応情報を作成する。作成者は，例えば，ＯＳ３０が理解できるＧＵＩ部品４５に固有の識別情報として，対象プログラム２０から部品ＩＤを得た場合には，図４（Ｂ）に示すような，スクリプト１２’に用いた部品識別名と得られた部品ＩＤとの対応情報である部品識別名対応情報を作成する。また，作成者は，例えば，ＯＳ３０が理解できるＧＵＩ部品４５に固有の識別情報として，対象プログラム２０から座標を得た場合には，図４（Ｃ）に示すような，スクリプト１２’に用いた部品識別名と得られた座標との対応情報である部品識別名対応情報を作成する。
【００４７】
このように，対象プログラム２０の処理により表示された画面４０上のＧＵＩ部品４５を外部から制御するスクリプト１２’には，ＧＵＩ部品４５の部品ＩＤや位置情報などの識別情報，またはそれらの識別情報に変換可能な部品識別名などの情報が含まれている必要がある。
【００４８】
しかし，ここまで提案した方法には，いくつかの問題点がある。
【００４９】
第一の問題は，対象プログラム２０の設計段階では，それを制御するためのスクリプト１２’を作成できないという問題である。
【００５０】
ＧＵＩ部品４５の部品ＩＤや座標は，一般にコーディング段階で，ＧＵＩデザイナソフトウェアが生成する数値により初めて決まる数値である。そのため，通常の開発においては，作成者は，ＧＵＩ部品４５が配置された画面４０のイメージが決まっていても，対象プログラム２０の設計段階でスクリプト１２’を作成することはできない。
【００５１】
画面４０に配置するＧＵＩ部品４５の座標情報などを仕様書の段階で決めてしまうと，ＧＵＩデザイナソフトウェアが使えなくなってしまう。そればかりではなく，仕様変更によりＧＵＩ部品４５の位置の再配置があった場合に，仕様書の改版において数値の再計算が必要になり，設計の工数が増大する。そのため，一般に仕様書の段階でＧＵＩ部品４５の座標情報を決定するようなことは行われない。
【００５２】
第二の問題は，スクリプト１２’における手順の記述が煩雑となるため，スクリプト１２’の作成に労力がかかるという問題である。
【００５３】
スクリプト１２’を記述する際には，作成者は，記述する識別情報が確かに目的のＧＵＩ部品４５と対応しているかどうかを，絶えず確認しながらスクリプト１２’を作成する必要がある。その確認作業は，作成者である人間が行うので，スクリプト１２’の記述効率が悪くなってしまう，スクリプト１２’に誤った手順を記述してしまうなどの問題が発生する。
【００５４】
図３，図４に示すスクリプト１２’の記述例を見ると，スクリプト１２’の作成のために労力がかかることが容易にわかる。制御対象のＧＵＩ部品４５の特定情報が作成者にとって無意味に見える数字となる図３（Ａ），図３（Ｂ）に示すスクリプト１２’の記述例では，作成者が誤った記述をしないように注意するための労力が必要となる。図４（Ａ）に示すスクリプト１２’の記述例でも，作成者が必ずしも自分で定めたとは限らない命名規則を念頭におきながらスクリプト１２’を記述することは，一般に労力を要する。
【００５５】
例えば，“IDC ＿EDIT＿TO＿FIND＿STRING”という一意名を，人間の記憶を頼りにスクリプト１２’に記述するケースについて考える。このとき，作成者は，“IDC ＿EDIT＿TO＿FIND＿STRING”という一意名が，“EDIT＿IDC ＿TO＿FIND＿STRING”でも，“IDC ＿EDIT＿TO＿FINDSTRING”でもないということを，いちいち確認してスクリプト１２’に記述する必要がある。似たような一意名を持つＧＵＩ部品４５が多数あるような場合には，それらを確認することなくスクリプト１２’に記述することは，困難である。
【００５６】
なお，対象プログラム２０の実行ファイルの入手後に限れば，実際にマウスなどを動かしたユーザのＧＵＩ部品４５に対する操作を自動的にスクリプト１２’に記録し，そのスクリプト１２’自体は隠蔽してユーザに意識させない方法もある。
【００５７】
しかし，この方法を用いても，対象プログラム２０の実行ファイルが入手されるまではスクリプト１２’の作成ができないため，上述の第一の問題は解決されない。また，この方法を対象プログラム２０の開発サイドで用いることを想定すると，自動作成されたスクリプト１２’に対して修正や追加などの編集を行う必要性は当然あるものと考えられ，結局は最初から作成者がスクリプト１２’を書き下した方が効率がよい。
【００５８】
以下では，これらの問題の解決が図られた，対象プログラム２０の処理により表示された画面４０上のＧＵＩ部品４５を外部から制御する，本実施の形態の技術について説明する。
【００５９】
図５は，本実施の形態による制御プログラムを含むコンピュータシステムの構成例を示す図である。
【００６０】
コンピュータ１は，ＣＰＵ，メモリ，ディスク等のハードウェア資源（図示省略）を備え，それらのハードウェア資源を用いてソフトウェアプログラムを実行する。また，コンピュータ１は，ＯＳ３０を備える。
【００６１】
コンピュータ１では，対象プログラム２０の実行ファイルが，ディスク領域に格納されている。対象プログラム２０が実行されると，その実行過程において，ＯＳ３０の機能を介して，コンピュータ１のディスプレイ（図示省略）に，複数のＧＵＩ部品４５を有する画面４０が表示されるものとする。本実施の形態では，対象プログラム２０によって表示される画面４０は，図２の例に示す画面４０であるものとする。
【００６２】
また，コンピュータ１では，対象プログラム２０を制御する制御プログラム１０の実行ファイルが，ディスク領域に格納されている。制御プログラム１０には，対象プログラム２０への制御指示が記述されたスクリプト１２と，そのスクリプト１２を実行するスクリプト制御エンジン１１とが含まれる。
【００６３】
スクリプト１２には，対象プログラム２０が表示する画面４０上のＧＵＩ部品４５への制御指示が含まれている。本実施の形態のスクリプト１２では，制御対象のＧＵＩ部品４５が，所定のルールに従って決められる簡明な順序の情報で指定されている。
【００６４】
スクリプト制御エンジン１１は，スクリプト１２に記述された対象プログラム２０への制御指示を解釈し，実行する。特に，本実施の形態のスクリプト制御エンジン１１は，スクリプト１２において制御対象のＧＵＩ部品４５が順序で指定された制御指示の記述を解釈し，指定されたＧＵＩ部品４５に対する制御を実行する。
【００６５】
スクリプト制御エンジン１１は，ＧＵＩ部品情報取得部１１１，順序決定部１１２，情報記憶部１１３，ＧＵＩ部品制御部１１４を備える。スクリプト制御エンジン１１が備える各機能部は，コンピュータ１が備えるＣＰＵ，メモリ等のハードウェアとソフトウェアプログラムとにより実現される。
【００６６】
ＧＵＩ部品情報取得部１１１は，対象プログラム２０の処理により表示された画面４０上のＧＵＩ部品４５の情報を取得する。このとき取得されるＧＵＩ部品４５の情報には，少なくとも各ＧＵＩ部品４５の位置情報が含まれる。ここでは，位置情報を含むＧＵＩ部品４５の情報をＧＵＩ部品情報と呼ぶ。取得されたＧＵＩ部品情報は，情報記憶部１１３に記憶される。
【００６７】
順序決定部１１２は，情報記憶部１１３に記憶されたＧＵＩ部品情報に含まれるＧＵＩ部品４５，すなわち対象プログラム２０の処理により表示された画面４０上のＧＵＩ部品４５の順序を，各ＧＵＩ部品４５の位置情報に基づいて，所定のルールに従って決定する。順序決定部１１２は，ＧＵＩ部品４５と決定された順序との対応情報を情報記憶部１１３に記憶する。ここでは，ＧＵＩ部品４５と順序との対応情報を，ＧＵＩ部品・順序対応情報と呼ぶ。ＧＵＩ部品・順序対応情報は，部品ＩＤや座標などのＯＳ３０が理解できるＧＵＩ部品４５に固有の識別情報と，所定のルールに従って決定された順序を表す情報との対応が示された情報である。
【００６８】
情報記憶部１１３は，ＧＵＩ部品情報やＧＵＩ部品・順序対応情報などの情報を記憶する，コンピュータ１がアクセス可能なメモリ，ディスク等の記憶装置である。
【００６９】
ＧＵＩ部品制御部１１４は，情報記憶部１１３に記憶されたＧＵＩ部品・順序対応情報を参照し，スクリプト１２において順序を用いて制御対象のＧＵＩ部品４５を特定した制御指示に従って，制御対象のＧＵＩ部品４５への制御を実行する。
【００７０】
以下，図６から図１３を用いて，対象プログラム２０の処理により表示された画面４０上のＧＵＩ部品４５への，制御プログラム１０からの制御を，具体的な例を挙げて説明する。ここでは，図２に示す画面４０上のＧＵＩ部品４５を，スクリプト１２とスクリプト制御エンジン１１とによって，操作するものとする。
【００７１】
まず，本実施の形態による，対象プログラム２０の処理により表示された画面４０上のＧＵＩ部品４５への制御手順が記述されたスクリプト１２の作成について，説明する。
【００７２】
図６は，本実施の形態によるスクリプト作成の例を説明する図である。
【００７３】
コンピュータ１で表示される画面４０は，そのほとんどが「横書き文書」の流れで設計されている。そのため，ユーザは，コンピュータ１で表示される画面４０に対して，「横書きの文章」のイメージを持っている。ここでは，ユーザが持っている画面４０に対する「横書きの文章」のイメージを利用して，画面４０上のＧＵＩ部品４５に対する順序付けが行われるものとする。
【００７４】
図６（Ａ）は，ＧＵＩ部品の順序を決定する規則の例を示す。例えば，スクリプト１２によって制御する対象のＧＵＩ部品４５を有する画面が図２に示す画面４０であった場合，「横書き文書」のイメージでＧＵＩ部品４５に順序付けすると，図６（Ａ）に示す通りとなる。
【００７５】
図６（Ａ）に示す画面４０において，太矢印線は，「横書き文書」の流れをイメージしたものである。一般的に，「横書き文書」のルールでは，文書は，上の行から下の行へ読み進める方向で書かれる。また，「横書き文書」のルールでは，文書は，同じ行において，左から右に読み進める方向で書かれる。
【００７６】
スクリプト１２の作成者は，このような「横書き文書」の流れの方向に従って，画面４０上のＧＵＩ部品４５への順序付けを行う。図６（Ａ）に示す画面４０において，各ＧＵＩ部品４５を示す枠内の点線丸中の数字が，「横書き文書」の流れに従って順序付けされた各ＧＵＩ部品４５の順序である。
【００７７】
図６（Ｂ）に，制御対象のＧＵＩ部品４５の特定情報が「横書き文書」の流れで決定された順序の情報であるスクリプト１２の記述例を示す。図６（Ｂ）に示すスクリプト１２の記述例の各行は，図３に示すスクリプト１２’の記述例の各行と同様に，
Ｅｄｉｔ  制御対象のＧＵＩ部品４５の特定情報，入力文字列
の形式で記述されているものとする。なお，図６（Ｂ）では，スクリプト１２のＧＵＩ部品４５への制御手順が記述された部分のみが示されているが，実際のスクリプト１２には，それ以外の制御手順も記述されている。
【００７８】
作成者は，図６（Ｂ）に示すように，制御対象のＧＵＩ部品４５の特定情報として「横書き文書」のルールに従って決定された順序を用いて，画面４０上のＧＵＩ部品４５への制御指示をスクリプト１２に記述する。
【００７９】
このように，スクリプト１２の作成者は，部品ＩＤや座標，部品識別名などのわかりにくいＧＵＩ部品４５の識別情報を知らなくても，人にとって視覚的にわかりやすいルールで決定される順序の情報で，簡単にＧＵＩ部品４５を特定したスクリプト１２を作成できる。例えば，上述の「横書き文書」の流れに従った順序付けは，コンピュータの世界では最もポピュラーな文書の記述方向に従った順序付けであるので，コンピュータを使用する人にとって視覚的にとてもわかりやすいルールとなる。
【００８０】
また，あらかじめ画面４０上のＧＵＩ部品４５に対する順序付けのルールが決まっていれば，スクリプト１２の作成者は，ＧＵＩ部品４５の部品ＩＤや座標，部品識別名などを知らなくても，簡明な順序情報でＧＵＩ部品を特定したスクリプト１２を作成できる。すなわち，作成者は，制御対象のＧＵＩ部品４５を含む画面４０のイメージさえあれば，対象プログラム２０やそのソースコードなどがなくても，画面４０上のＧＵＩ部品４５を制御するスクリプト１２を作成することができる。
【００８１】
次に，本実施の形態による，対象プログラム２０の処理により表示された画面４０上のＧＵＩ部品４５に対する，制御プログラム１０からの制御について，説明する。ユーザは，対象プログラム２０の実行ファイルが入手できた段階で，作成されたスクリプト１２を走行させる。
【００８２】
上述したように，コンピュータ１のディスク領域には，対象プログラム２０の実行ファイル，スクリプト制御エンジン１１の実行ファイル，スクリプト１２のファイルが格納されている。ユーザは，コンピュータ１上で，対象プログラム２０と，スクリプト制御エンジン１１とを実行状態にする。
【００８３】
スクリプト制御エンジン１１において，ＧＵＩ部品情報取得部１１１は，制御対象である画面４０上のＧＵＩ部品４５の情報を取得する。
【００８４】
具体的には，ＧＵＩ部品情報取得部１１１は，対象プログラム２０の処理により表示された制御対象の画面４０の情報をＯＳ３０に問い合わせ，画面４０上のＧＵＩ部品４５の情報の一覧を取得する。ここで取得されたＧＵＩ部品４５の情報には，ＧＵＩ部品４５の位置情報も含まれている。ＧＵＩ部品情報取得部１１１は，取得されたＧＵＩ部品４５の情報の一覧を，ＧＵＩ部品情報として情報記憶部１１３に記憶する。
【００８５】
図７は，本実施の形態によるＧＵＩ部品情報の例を示す図である。
【００８６】
図７に示すＧＵＩ部品情報では，図２に示す画面４０上の各ＧＵＩ部品４５の情報として，各ＧＵＩ部品４５の部品ＩＤと座標とが記録されている。
【００８７】
図７に示すＧＵＩ部品情報において，部品ＩＤ“１５”のレコードは，図２におけるＧＵＩ部品４５ｄの情報である。部品ＩＤ“８８２３”のレコードは，図２におけるＧＵＩ部品４５ｃの情報である。部品ＩＤ“５４６５”のレコードは，図２におけるＧＵＩ部品４５ｂの情報である。部品ＩＤ“４００３２”のレコードは，図２におけるＧＵＩ部品４５ｅの情報である。部品ＩＤ“３２７６８”のレコードは，図２におけるＧＵＩ部品４５ａの情報である。
【００８８】
なお，図７に示すＧＵＩ部品情報において，各ＧＵＩ部品４５の左端と右端の座標値は，画面４０の最左端の座標を水平方向の原点（すなわち水平方向の座標値０）とした水平方向の座標値であり，画面４０の右側に向かうほど値が大きくなる。また，図７に示すＧＵＩ部品情報において，各ＧＵＩ部品４５の上端と下端の座標値は，画面４０の最上端の座標を垂直方向の原点（すなわち垂直方向の座標値０）とした垂直方向の座標値であり，画面４０の下側に向かうほど値が大きくなる。
【００８９】
ここでは，図７に示すＧＵＩ部品情報が取得され，情報記憶部１１３に記憶されたものとする。図７のＧＵＩ部品情報に示すように，画面４０から取得されるＧＵＩ部品４５の情報は，不規則な数値である部品ＩＤや座標などの情報である。
【００９０】
スクリプト制御エンジン１１において，順序決定部１１２は，取得された各ＧＵＩ部品４５の位置情報に基づいて，制御対象である画面４０上の各ＧＵＩ部品４５の順序を，所定のルールに従って決定する。
【００９１】
具体的には，まず，順序決定部１１２は，情報記憶部１１３に記憶されたＧＵＩ部品情報に含まれる各ＧＵＩ部品４５に対して，仮の順序付けを行う。ここでは，情報が取得された順番に，仮の順序付けを行うものとする。
【００９２】
図８は，本実施の形態によるＧＵＩ部品に対する仮の順序付けが行われた例を示す図である。
【００９３】
例えば，図７に示すＧＵＩ部品情報において，上のレコードから順に各ＧＵＩ部品４５の情報が取得されたものとする。順序決定部１１２は，図８に示すように，図７に示すＧＵＩ部品情報に対して，上のレコードから順に仮の順序付けを行う。
【００９４】
順序決定部１１２は，所定のルールに従うように，各ＧＵＩ部品４５に仮に付けられた順序をソートしていく。ここで説明している具体例では，所定のルールが「横書き文書」の流れに従ったルールであるので，順序決定部１１２は，各ＧＵＩ部品４５の座標の値を利用して，「横書き文書」の流れに従うように各ＧＵＩ部品４５に仮に付けられた順序をソートしていく。
【００９５】
上述したように，一般的に，「横書き文書」のルールでは，文書は，上の行から下の行へ読み進める方向で書かれる。また，「横書き文書」のルールでは，文書は，同じ行において，左から右に読み進める方向で書かれる。このような「横書き文書」のルールに従ってＧＵＩ部品４５に順序付けを行うものとすると，ＧＵＩ部品４５に対する順序付けのルールは，例えば，
・上端の座標が小さいＧＵＩ部品４５の順序がより先になるように順序付けを行う
・上端の座標が同じであれば，左端の座標が小さいＧＵＩ部品４５の順序がより先になるように順序付けを行う
となる。
【００９６】
このようなＧＵＩ部品４５に対する順序付けのルールに基づいた，２つのＧＵＩ部品４５間の順序をソートする条件を示すソート規則は，例えば，次のような条件文で表現できる。
【００９７】
規則Ａ：（Top α＜Top β）and （ｎ＞ｍ）
規則Ｂ：（Top α＝Top β）and （Leftα＜Leftβ）and （ｎ＞ｍ）
規則Ａ，規則Ｂにおいて，α，βは，それぞれ比較を行う２つのＧＵＩ部品４５を表している。また，図７のＧＵＩ部品情報にも示すように，Leftは左端の座標値，Top は上端の座標値を表す。すなわち，Top α，Leftαは，それぞれαのＧＵＩ部品４５の上端座標値，左端座標値を表し，Top β，Leftβは，それぞれβのＧＵＩ部品４５の上端座標値，左端座標値を表す。また，ｎは，その時点でαのＧＵＩ部品４５に付されている順序を示し，ｍは，その時点でβのＧＵＩ部品４５に付されている順序を示す。
【００９８】
順序決定部１１２は，規則Ａ，規則Ｂに示すソート規則の条件を満たす関係にある２つのＧＵＩ部品４５間の順序を入れ替える。規則Ａによるソートでは，α，βの２つのＧＵＩ部品４５について，αの上端の座標値がβの上端の座標値より小さく，αの順序がβの順序より後である場合には，αの順序とβの順序とが入れ替えられる。規則Ｂによるソートでは，α，βの２つのＧＵＩ部品４５について，αの上端の座標値とβの上端の座標値とが同じであるときに，αの左端の座標値がβの左端の座標値より小さく，αの順序がβの順序より後である場合には，αの順序とβの順序とが入れ替えられる。
【００９９】
しかし，ソート規則が規則Ａ，規則Ｂのみだと，目的である人の「横書き文書」へのイメージに合わないケースが発生する。
【０１００】
図９は，人の「横書き文書」に対するイメージに適応したＧＵＩ部品の順序の入れ替えを説明する図である。
【０１０１】
例えば，ＧＵＩ部品４５ｉとＧＵＩ部品４５ｊとの関係が，図９（Ａ）に示すような左下−右上の位置関係であるものとする。このとき，上記の規則Ａ，規則Ｂによって順序のソートを行うと，図９（Ａ）に示すように，ＧＵＩ部品４５ｉの順序（図９（Ａ）では８番目）よりもＧＵＩ部品４５ｊの順序（図９（Ａ）では７番目）の方が先になる。
【０１０２】
しかし，図９（Ａ）に示す例では，ＧＵＩ部品４５ｊの上端の方がＧＵＩ部品４５ｉの上端よりわずかに上であるが，ＧＵＩ部品４５ｉとＧＵＩ部品４５ｊの垂直方向の占有座標は，相互に重なっている。図９（Ａ）に示すような関係でＧＵＩ部品４５が配置されている場合には，ＧＵＩ部品４５ｉの順序がＧＵＩ部品４５ｊの順序より先である方が，人の視覚的な「横書き文書」のイメージに合うものと考えられる。
【０１０３】
ＧＵＩデザイナソフトウェアによる画面４０へのＧＵＩ部品４５の配置では，マウスなどを用いて作業を行うのが一般的で，１ピクセル単位まで精密にＧＵＩ部品４５の位置を合わせることは困難である。そのため，画面４０の設計者が「横書き文書」で同じ行の位置に２つのＧＵＩ部品４５を配置したつもりであっても，２つのＧＵＩ部品４５の垂直方向にずれが発生して，図９（Ａ）に示すような関係になってしまう場合もある。
【０１０４】
そこで，本実施の形態では，垂直方向の占有座標が相互に重なり，互いに左下−右上の関係に配置された２つのＧＵＩ部品４５については，左下のＧＵＩ部品４５の方が先になるように順序付けが行われる。
【０１０５】
このような順序付けのルールに基づいた第３のソート規則は，例えば，次のような条件文で表現できる。
【０１０６】
規則Ｃ：（Top α＜Bottomβ）and （Leftα＜Leftβ）and （ｎ＞ｍ）
ここに示す規則Ｃの条件の記述は，上記の規則Ａ，規則Ｂの条件の記述と同様である。すなわち，規則Ｃにおいて，α，βは，それぞれ比較を行う２つのＧＵＩ部品４５を表している。また，図７のＧＵＩ部品情報にも示すように，Leftは左端の座標値，Top は上端の座標値，Bottomは下端の座標値を表す。また，ｎは，その時点でαのＧＵＩ部品４５に付されている順序を示し，ｍは，その時点でβのＧＵＩ部品４５に付されている順序を示す。
【０１０７】
順序決定部１１２は，規則Ｃに示すソート規則の条件を満たす関係にある２つのＧＵＩ部品４５間の順序を入れ替える。規則Ｃによるソートでは，α，βの２つのＧＵＩ部品４５について，αの上端の座標値がβの下端の座標値より小さく，αの左端の座標値がβの左端の座標値より小さく，αの順序がβの順序より後である場合には，αの順序とβの順序とが入れ替えられる。
【０１０８】
規則Ｃのソート規則に従った順序の入れ替えにより，図９（Ｂ）に示すように，垂直方向の占有座標が相互に重なった左下−右上の関係にあったＧＵＩ部品４５ｉの順序とＧＵＩ部品４５ｊの順序とが，入れ替えられる。これにより，制御プログラム１０による処理で，人の視覚的な「横書き文書」のイメージにより近いＧＵＩ部品４５への順序付けができるようになる。
【０１０９】
図１０，図１１は，本実施の形態によるＧＵＩ部品に付する順序のソート手順を説明する図である。
【０１１０】
図１０，図１１に示す画面４０において，各ＧＵＩ部品４５を示す枠内の点線丸中の数字が，それぞれの段階においてＧＵＩ部品４５に対して付されている順序を示す。
【０１１１】
順序決定部１１２は，図８に示すように，情報が取得された順に，画面４０上のＧＵＩ部品に対して仮の順序付けを行う。この仮に付けられた順序を画面４０上のＧＵＩ部品４５に表すと，図１０（Ａ）に示す通りとなる。図１０（Ａ）に示すように，この段階で各ＧＵＩ部品４５に付されている順序は，人の視覚的にはまったく不規則な順序である。
【０１１２】
まず，順序決定部１１２は，上記の規則Ａを用いて，ＧＵＩ部品４５に付された順序のソートを行う。具体的には，順序決定部１１２は，２つのＧＵＩ部品４５間で座標値や付された順序の比較を行い，規則Ａの条件を満たす場合にそのＧＵＩ部品４５間で順序を入れ替える処理を，すべての２つのＧＵＩ部品４５の組合せについて実行する。これによって，上端の座標値がより小さいＧＵＩ部品４５の順序が先になるように，各ＧＵＩ部品４５に付された順序がソートされる。
【０１１３】
規則Ａを用いたソートの結果を画面４０上のＧＵＩ部品４５に表すと，図１０（Ｂ）に示す通りとなる。人の視覚的に画面４０上でより上に位置するＧＵＩ部品４５の順序が先になるように，各ＧＵＩ部品４５に付された順序が更新されている。
【０１１４】
次に，順序決定部１１２は，上記の規則Ｂを用いて，ＧＵＩ部品４５に付された順序のソートを行う。具体的には，順序決定部１１２は，２つのＧＵＩ部品４５間で座標値や付された順序の比較を行い，規則Ｂの条件を満たす場合にそのＧＵＩ部品４５間で順序を入れ替える処理を，すべての２つのＧＵＩ部品４５の組合せについて実行する。これによって，上端の座標値が同じである場合には，左端の座標値がより小さいＧＵＩ部品４５の順序が先になるように，各ＧＵＩ部品４５に付された順序がソートされる。
【０１１５】
規則Ｂを用いたソートの結果を画面４０上のＧＵＩ部品４５に表すと，図１１（Ａ）に示す通りとなる。人の視覚的に画面４０上でより左に位置するＧＵＩ部品４５の順序が先になるように，各ＧＵＩ部品４５に付された順序が更新されている。ただし，ＧＵＩ部品４５ｄとＧＵＩ部品４５ｅとの間では，データ上ＧＵＩ部品４５ｅの方が上に位置しているため，この段階では，例外的に右側のＧＵＩ部品４５ｅの順序が先になったままである。
【０１１６】
さらに，順序決定部１１２は，上記の規則Ｃを用いて，ＧＵＩ部品４５に付された順序のソートを行う。具体的には，順序決定部１１２は，２つのＧＵＩ部品４５間で座標値や付された順序の比較を行い，規則Ｃの条件を満たす場合にそのＧＵＩ部品４５間で順序を入れ替える処理を，すべての２つのＧＵＩ部品４５の組合せについて実行する。これによって，垂直方向の占有座標が相互に重なっているＧＵＩ部品４５間では，左端の座標値がより小さいＧＵＩ部品４５の順序が先になるように，各ＧＵＩ部品４５に付された順序がソートされる。
【０１１７】
規則Ｃを用いたソートの結果を画面４０上のＧＵＩ部品４５に表すと，図１１（Ｂ）に示す通りとなる。これが，順序決定部１１２による画面４０上のＧＵＩ部品４５に対する順序付けの最終結果となる。図１１（Ｂ）に示す画面４０上のＧＵＩ部品４５に付された順序は，図６（Ａ）に示す，スクリプト１２の作成者が視覚的に「横書き文書」のイメージで画面４０上のＧＵＩ部品４５に付した順序と一致する。
【０１１８】
図１２は，本実施の形態によるＧＵＩ部品に対する順序付けの結果の例を示す図である。
【０１１９】
図１１（Ｂ）に示す画面４０上のＧＵＩ部品４５に対する順序付けの最終結果をデータで表すと，例えば，図１２に示す通りとなる。図１２に示すＧＵＩ部品４５に対する順序付けの結果は，図８に示すＧＵＩ部品情報に付された仮の順序を，上記の規則Ａ〜Ｃを用いて，画面４０を見る人の視覚的な「横書き文書」のイメージに応じた順序に並べ替えたものとなる。
【０１２０】
順序決定部１１２は，画面４０上の各ＧＵＩ部品４５に対して所定のルールに従って順序付けを行った最終結果を，ＧＵＩ部品・順序対応情報として情報記憶部１１３に格納し直す。図１２に示すようなＧＵＩ部品情報にそのまま順序情報を付した情報を，ＧＵＩ部品・順序対応情報として情報記憶部１１３に記憶するようにしてもよい。ＧＵＩ部品情報から部品ＩＤや座標などのＯＳ３０が理解できるＧＵＩ部品４５に固有の識別情報を一部抽出したものと，順序情報との対応情報を，ＧＵＩ部品・順序対応情報として情報記憶部１１３に記憶するようにしてもよい。
【０１２１】
図１３は，本実施の形態によるＧＵＩ部品・順序対応情報の例を示す図である。
【０１２２】
図１３に示すＧＵＩ部品・順序対応情報は，ＯＳ３０が理解できるＧＵＩ部品４５に固有の識別情報として図７に示すＧＵＩ部品情報から抽出された各ＧＵＩ部品４５の部品ＩＤと，各ＧＵＩ部品４５に付された順序との対応が記録されたＧＵＩ部品・順序対応情報の例である。
【０１２３】
スクリプト制御エンジン１１において，ＧＵＩ部品制御部１１４は，情報記憶部１１３に記憶されたＧＵＩ部品・順序対応情報を参照し，制御対象のＧＵＩ部品４５が順序で記述されたスクリプト１２の指示に従って，画面４０上のＧＵＩ部品４５への制御を実行する。
【０１２４】
具体的には，スクリプト制御エンジン１１は，スクリプト１２のファイルを読み込み，スクリプト１２に記述された指示を順に実行していく。このとき，スクリプト１２にＧＵＩ部品４５に対する制御指示があれば，ＧＵＩ部品制御部１１４は，その制御指示に記述された制御対象のＧＵＩ部品４５の特定情報を取り出し，メモリに格納する。このとき取り出される制御対象のＧＵＩ部品４５の特定情報は，例えば図６（Ｂ）のスクリプト１２の記述例に示すような，簡明な順序情報である。
【０１２５】
ＧＵＩ部品制御部１１４は，スクリプト１２から取り出された順序情報で情報記憶部１１３に格納されたＧＵＩ部品・順序対応情報を検索し，その順序情報を，部品ＩＤや座標などのＯＳ３０が理解できるＧＵＩ部品４５に固有の識別情報に変換する。ＧＵＩ部品制御部１１４は，順序情報から変換された部品ＩＤや座標などのＯＳ３０が理解できるＧＵＩ部品４５に固有の識別情報を，パラメータとしてＯＳ３０に渡し，画面４０上の制御対象となるＧＵＩ部品４５への操作を実行する。
【０１２６】
例えば，図６（Ｂ）に示すスクリプト１２の記述例の１行目の制御指示に対する処理において，ＧＵＩ部品制御部１１４は，図１３に示すＧＵＩ部品・順序対応情報を用いて，順序“１”から部品ＩＤ“３２７６８”を取得する。ＧＵＩ部品制御部１１４は，取得された部品ＩＤ“３２７６８”で画面４０上のＧＵＩ部品４５を指定して，テキストボックスに文字列“置換前”を入力する制御を実行する。
【０１２７】
このように，本実施の形態のスクリプト制御エンジン１１は，スクリプト１２に記述された簡明な順序の情報を，部品ＩＤや座標などのＧＵＩ部品４５の固有情報に変換することができる。ＧＵＩ部品４５に固有の識別情報と順序の情報との対応を示すＧＵＩ部品・順序対応情報は，スクリプト制御エンジン１１自身が生成するため，スクリプト１２の作成者等が図４（Ｂ），図４（Ｃ）に示すような対応情報をあらかじめ用意しておく必要はない。また，スクリプト１２の作成者が，スクリプト１２の作成時点でＧＵＩ部品４５に固有の識別情報を知っておく必要もない。
【０１２８】
以下，図１４から図１６のフローチャートを用いて，本実施の形態のスクリプト制御エンジン１１によるＧＵＩ部品制御処理の流れの例を説明する。
【０１２９】
図１４は，本実施の形態のスクリプト制御エンジンによるＧＵＩ部品制御処理フローチャートである。
【０１３０】
スクリプト制御エンジン１１において，ＧＵＩ部品情報取得部１１１は，制御対象の画面４０上の，少なくとも位置情報を含むＧＵＩ部品４５の情報を取得する（ステップＳ１０）。ＧＵＩ部品情報取得部１１１は，取得されたＧＵＩ部品４５の情報を，ＧＵＩ部品情報として情報記憶部１１３に記憶する。
【０１３１】
順序決定部１１２は，画面４０上の各ＧＵＩ部品４５に対して付する順序を，ＧＵＩ部品情報に含まれる各ＧＵＩ部品の位置情報に基づいた所定のルールに従って決定する，ＧＵＩ部品順序決定処理を行う（ステップＳ１１）。ＧＵＩ部品順序決定処理の詳細については，後述する。
【０１３２】
順序決定部１１２は，画面４０上のＧＵＩ部品４５と決定された順序との対応を示す情報を，ＧＵＩ部品・順序対応情報として，情報記憶部１１３に記憶する（ステップＳ１２）。
【０１３３】
ＧＵＩ部品制御部１１４は，情報記憶部１１３に記憶されたＧＵＩ部品・順序対応情報を参照し，順序を用いて制御対象のＧＵＩ部品４５を特定したスクリプト１２の制御指示に従って，制御対象のＧＵＩ部品４５への制御を実行する（ステップＳ１３）。
【０１３４】
図１５は，本実施の形態の順序決定部によるＧＵＩ部品順序決定処理フローチャートである。
【０１３５】
順序決定部１１２は，情報が取得された順番で，情報記憶部１１３に記憶されたＧＵＩ部品情報の各ＧＵＩ部品４５に対して仮の順序を付ける（ステップＳ２０）。
【０１３６】
順序決定部１１２は，ソート規則として上記の規則Ａを用いて，ＧＵＩ部品４５に付された順序をソートするＧＵＩ部品順序ソート処理を行う（ステップＳ２１）。また，順序決定部１１２は，ソート規則として上記の規則Ｂを用いて，ＧＵＩ部品４５に付された順序をソートするＧＵＩ部品順序ソート処理を行う（ステップＳ２２）。また，順序決定部１１２は，ソート規則として上記の規則Ｃを用いて，ＧＵＩ部品４５に付された順序をソートするＧＵＩ部品順序ソート処理を行う（ステップＳ２３）。ＧＵＩ部品順序ソート処理の詳細については，後述する。
【０１３７】
図１６は，本実施の形態の順序決定部によるＧＵＩ部品順序ソート処理フローチャートである。
【０１３８】
順序決定部１１２は，ＧＵＩ部品情報に含まれる全ＧＵＩ部品４５から，２つのＧＵＩ部品４５の組合せを，すべて列挙する（ステップＳ３０）。
【０１３９】
順序決定部１１２は，ＧＵＩ部品４５の組合せを１つ選択する（ステップＳ３１）。
【０１４０】
順序決定部１１２は，選択されたＧＵＩ部品４５の組合せが，ソート規則の条件に合致するかを判定する（ステップＳ３２）。ソート規則の条件に合致する場合には（ステップＳ３２のＹＥＳ），順序決定部１１２は，それら２つのＧＵＩ部品４５に付されている順序を入れ替える（ステップＳ３３）。
【０１４１】
順序決定部１１２は，列挙された一通りのＧＵＩ部品４５の組合せについて処理が終了したかを判定する（ステップＳ３４）。
【０１４２】
まだ列挙された一通りのＧＵＩ部品４５の組合せについて処理が終了していない場合には（ステップＳ３４のＮＯ），順序決定部１１２は，ステップＳ３１に戻って次のＧＵＩ部品４５の組合せの処理に移る。
【０１４３】
列挙された一通りのＧＵＩ部品４５の組合せについて処理が終了した場合には（ステップＳ３４のＹＥＳ），順序決定部１１２は，今回の一通りのＧＵＩ部品４５の組合せに対する処理で，ＧＵＩ部品４５間の順序の入れ替えがあったかを判定する（ステップＳ３５）。
【０１４４】
ＧＵＩ部品４５間の順序の入れ替えがあった場合には（ステップＳ３５のＹＥＳ），順序決定部１１２は，ステップＳ３０の処理に戻り，再チェックを行う。
【０１４５】
ＧＵＩ部品４５間の順序の入れ替えがなかった場合には（ステップＳ３５のＮＯ），順序決定部１１２は，処理を終了する。
【０１４６】
以上説明した本実施の形態によるＧＵＩ部品４５への制御技術により，上述の第一の問題と第二の問題とが解決され，
１）スクリプト１２の作成が可能な時期が早くなる
２）スクリプト１２の作成工数が短くなる
といった効果が得られる。
【０１４７】
まず，１）の効果が得られる理由としては，本実施の形態によるＧＵＩ部品４５への制御技術では，対象プログラム２０やそのソースコードの完成前でも，画面４０のイメージさえ入手できれば，スクリプト１２が作成できることが挙げられる。
【０１４８】
図１７は，本実施の形態によるＧＵＩ部品制御技術の効果を説明する図である。
【０１４９】
図１７のａ）には，図３に示すような，部品ＩＤや座標などのＧＵＩ部品４５に固有の識別情報が直接に記述された，スクリプト１２’を作成する場合の作業手順が示されている。
【０１５０】
図１７のａ）に示すように，直接記述の場合には，作業者は，対象プログラム２０やそのソースコードの入手後に，それらを解析してＧＵＩ部品４５に固有の識別情報を取得してから，スクリプト１２’の作成作業に取り掛かることになる。
【０１５１】
図１７のｂ）には，図４（Ｂ），（Ｃ）に示すような部品識別名とＧＵＩ部品４５に固有の識別情報との対応情報を使用し，図４（Ａ）に示すような部品識別名で記述されたスクリプト１２’を作成する場合の作業手順が示されている。
【０１５２】
図１７のｂ）に示すように，対応情報使用の場合には，作業者は，制御対象の画面４０のイメージを入手した時点で，その画面４０上のＧＵＩ部品４５に対して任意に部品識別名を割り当て，割り当てられた部品識別名を用いて，スクリプト１２’の作成作業を行うことができる。しかし，部品識別名とＧＵＩ部品４５に固有の識別情報との対応情報については，作業者は，対象プログラム２０やそのソースコードの入手後に，それらを解析してからでないと作成できない。
【０１５３】
このように，図１７ａ），ｂ）に示すような直接記述，対応情報使用の場合では，対象プログラム２０やそのソースコードの入手後に，何らかの面倒な作業を行わないと，スクリプト１２’を走行させることができない。図１７ａ），ｂ）に示すような直接記述，対応情報使用の場合には，スクリプト１２’の作成作業は，対象プログラム２０の作成作業に従属する作業となる。
【０１５４】
なお，図１７には示されていないが，上述の実際にマウスなどを動かしたユーザのＧＵＩ部品４５に対する操作を自動的にスクリプト１２’に記録する技術も，対象プログラム２０の実行ファイルが入手されるまではスクリプト１２’の作成ができない。
【０１５５】
図１７のｃ）には，図６（Ｂ）に示すような，制御対象のＧＵＩ部品４５の特定情報が人の視覚的な判断で所定のルールに従って付けられた簡明な順序情報で記述された，本実施の形態のスクリプト１２を作成する場合の作業手順が示されている。
【０１５６】
図１７のｃ）に示すように，本実施の形態の順序記述の場合には，作業者は，制御対象の画面４０のイメージを入手した時点で，すぐに，スクリプト１２の作成作業に取り掛かることができる。また，作業者は，対象プログラム２０やそのソースコードの入手後に，特に面倒な作業を行う必要はなく，すぐにスクリプト１２を走行させることができる。図１７のｃ）に示すような本実施の形態の順序記述の場合には，スクリプト１２’の作成作業は，対象プログラム２０の作成作業と独立した作業となる。
【０１５７】
次に，上記の２）の効果が得られる理由としては，本実施の形態によるＧＵＩ部品４５への制御技術では，スクリプト１２への制御対象のＧＵＩ部品４５を特定する情報の記述に，簡明な順序情報を用いることが挙げられる。
【０１５８】
図３に示すようなＧＵＩ部品４５に固有の識別情報で制御対象のＧＵＩ部品４５を特定する場合には，作成者は，スクリプト１２’に直感的にはわかりにくい数値を入力する必要がある。そのため，わかりにくい数値の確認などで入力速度が遅くなる，わかりにくい数値の入力ミスの修正が多く発生する，といった問題が起こる可能性も高い。図４（Ａ）に示すような部品識別名で制御対象のＧＵＩ部品４５を特定する場合でも，部品識別名の付け方によっては，同様の問題が起こり得る。
【０１５９】
これに対して，図６（Ｂ）に示すような本実施の形態の順序記述の場合には，直感的にわかりやすい順序情報で制御対象のＧＵＩ部品４５を特定するため，入力する情報の確認に時間が取られず，作業者によるスクリプト１２の入力速度が大幅に向上する。また，簡明な順序情報の入力なので，作成者の入力ミスも減り，その修正による時間の無駄をなくすことができる。このような効果が見込まれるため，本実施の形態の順序記述によって，スクリプト１２作成の工数が短くなる。
【０１６０】
以上，本実施の形態について説明したが，本発明はその主旨の範囲において種々の変形が可能であることは当然である。
【０１６１】
例えば，本実施の形態では，人が視覚的にわかりやすい，ＧＵＩ部品４５への順序付けのルールとして，「横書き文書」のルールを用いたＧＵＩ部品４５への順序付けが行われているが，必ずしも「横書き文書」のルールである必要はない。例えば，元来の日本語文書の記述方向に従った「縦書き文書」のルールが用いられてもよい。ＧＵＩ部品４５に対する制御を順序情報で記述する側と，その順序情報をもとにＧＵＩ部品４５を特定して制御を実行する側とで，共通のＧＵＩ部品４５に対する順序付けのルールが用いられれば，問題はない。
【０１６２】
図１８は，順序を決定するルールのバリエーションを示す図である。
【０１６３】
図１８において，ソート方向は，順序を決定する方向を言葉で表したものであり，矢印図は，順序を決定する方向を矢印で表したものである。ソート規則は，αとβの２つのＧＵＩ部品４５間で，付された順序の入れ替えが発生する条件である。
【０１６４】
なお，図１８に示す各ルールにおけるソート規則では，図７のＧＵＩ部品情報にも示すように，左端の座標値がLeftで，右端の座標値がRight で，上端の座標値がTop で，下端の座標値がBottomで表わされている。また，ソート規則において，ｎはαのＧＵＩ部品４５に付されている順序を示し，ｍはβのＧＵＩ部品４５に付されている順序を示す。
【０１６５】
また，本実施の形態では，ＧＵＩ部品４５への制御の例として，テキストボックスのＧＵＩ部品４５への制御の例を挙げているが，アイコン，ボタン，チェックボックスなど，他のＧＵＩ部品４５への制御も，本実施の形態と同様に可能である。
【０１６６】
また，本実施の形態では，順序を示す情報として数字（１，２，... ）を用いているが，例えばアルファベット（Ａ，Ｂ，... 等）やかな文字（い，ろ，... 等），文字・数字の組合せ（Ａ１，Ａ２，... 等），単語（ｏｎｅ，ｔｗｏ，... 等）など，順序を表すことができれば何を用いてもよい。
【０１６７】
また，本実施の形態では，画面４０上のＧＵＩ部品４５を「横書き文書」のルールで順序付けするために用いるソート規則として，
規則Ａ：（Top α＜Top β）and （ｎ＞ｍ）
規則Ｂ：（Top α＝Top β）and （Leftα＜Leftβ）and （ｎ＞ｍ）
規則Ｃ：（Top α＜Bottomβ）and （Leftα＜Leftβ）and （ｎ＞ｍ）
を用いる例を説明したが，必ずしもこれらのソート規則に限るものではない。
【０１６８】
例えば，規則Ａにおいて（Top α＜Top β）の代わりに（Bottomα＜Bottomβ）を用いてもよいし，規則Ｂにおいて（Top α＝Top β）の代わりに（Bottomα＝Bottomβ）を用いてもよい。また，規則Ｂ，規則Ｃの（Leftα＜Leftβ）のかわりに（Right α＜Right β）を用いてもよい。また，ＧＵＩ部品４５が重なり合わないことが条件であれば，規則Ｂ，規則Ｃの（Leftα＜Leftβ）のかわりに（Right α＜Leftβ）を用いてもよい。
【０１６９】
また，本実施の形態では，対象プログラム２０が有するＧＵＩ部品４５を，スクリプト１２等を用いて制御する例について説明したが，ＧＵＩ部品４５を有するプログラムと，ＧＵＩ部品４５を制御するプログラムとの関係は，必ずしもこの例に限られるものではない。本実施の形態の例は，あるプロセスが有するＧＵＩ部品４５を別のプロセスから制御する例である。
【０１７０】
これ以外にも，あるプログラムが有するＧＵＩ部品４５を，別のプログラムから制御する様々な形態が考えられる。例えば，
・あるスレッドが表示するＧＵＩ部品４５を，同じプロセスの別のスレッドから制御する
・ある関数が表示するＧＵＩ部品４５を，別の関数から制御する
・あるクラスが表示するＧＵＩ部品４５を，別のクラスが制御する
・あるコンピュータのプロセスが表示するＧＵＩ部品４５を，ネットワークで接続された別のコンピュータのプロセスから制御する
などの様々な形態が考えられる。ここに挙げたすべての例では，前者のプログラムが本実施の形態の対象プログラム２０に相当し，後者のプログラムが本実施の形態の制御プログラム１０に相当する。いずれの形態でも，制御を行う後者のプログラムには，所定のルールで決定された順序で制御対象のＧＵＩ部品４５を特定した制御命令と，取得されたＧＵＩ部品４５の位置情報から所定のルールで画面４０上のＧＵＩ部品４５の順序を決定する機能とが含まれる。
【０１７１】
例えば，アプリケーションソフトの開発において，アプリケーションソフトに含まれるある関数により表示される画面４０上のＧＵＩ部品４５を，同じアプリケーションソフトに含まれる別の関数から制御する例について考える。このとき，後者の関数の開発では，前者の関数により表示される画面４０上の制御対象のＧＵＩ部品４５を特定した制御命令をプログラムしなければならない。本実施の形態の順序情報を用いたＧＵＩ部品４５への制御技術を後者の関数の開発に用いれば，前者のＧＵＩ部品４５を表示する関数の開発と，後者のＧＵＩ部品４５を制御する別の関数の開発とを，同時並行的に行うことができる。このように，同じ１つのアプリケーションに含まれる，あるプログラムにより表示されるＧＵＩ部品４５を，別のプログラムから制御する場合でも，本実施の形態の順序情報を用いたＧＵＩ部品４５への制御技術を適用することが可能である。
【０１７２】
また，本実施の形態では，順序情報を用いたＧＵＩ部品４５への制御技術を，対象プログラム２０の動作検証に使用する例を説明したが，他にも様々な用途に使用可能である。
【０１７３】
例えば，順序情報を用いたＧＵＩ部品４５への制御技術を，スクリプト１２の記載手順に従って対象プログラム２０のオートデモンストレーションを行う場合に使用することも可能である。また例えば，順序情報を用いたＧＵＩ部品４５への制御技術を，自分が開発するソフトウェアのＧＵＩ部品４５に影響を与えるルーチンの内部処理に使用することも可能である。また例えば，順序情報を用いたＧＵＩ部品４５への制御技術を，キーボードショートカットで「横書き文書」の順に画面４０の操作対象のＧＵＩ部品４５を移動していく処理などを有するプログラムにも使用可能である。
【０１７４】
以上説明した本実施の形態の特徴を列挙すると以下のとおりである。
【０１７５】
（付記１）
あるプログラムが表示する画面のＧＵＩ部品を制御する別のプログラムであって，
コンピュータに，
少なくとも前記ＧＵＩ部品の前記画面上の位置情報を含む，前記画面の前記ＧＵＩ部品の情報を取得する手順と，
前記ＧＵＩ部品の前記画面上の位置情報に基づいて，前記画面の前記ＧＵＩ部品の順序を所定のルールで決定する手順と，
前記ＧＵＩ部品と決定された順序との対応情報を，前記コンピュータがアクセス可能な記憶装置に記憶する手順と，
前記順序を用いて制御の対象となる前記ＧＵＩ部品を特定した指示に対して，前記記憶装置に記憶された前記ＧＵＩ部品と順序との対応情報を参照して制御の対象となる前記ＧＵＩ部品を特定し，前記画面の前記ＧＵＩ部品への制御を行う手順とを
実行させるためのＧＵＩ部品制御プログラム。
【０１７６】
（付記２）
前記所定のルールは，前記画面において，より位置が上となるＧＵＩ部品の順序が先になるように，さらには垂直方向の占有座標が互いに重なるＧＵＩ部品間ではより位置が左となるＧＵＩ部品の順序が先になるように，前記ＧＵＩ部品の順序を決定するルールである
ことを特徴とする付記１に記載のＧＵＩ部品制御プログラム。
【０１７７】
（付記３）
前記所定のルールは，前記画面において，前記ＧＵＩ部品が展開される平面座標系を，垂直方向座標成分を上から下に向かって増加することと定め，水平座標成分を左から右に向かって増加することと定め，さらに，座標成分のどちらか一方を第一座標，他方を第二座標と定めたとき，より第一座標成分が減少する方向に位置するＧＵＩ部品の順序が先になるように，さらに第一座標成分方向の占有座標が互いに重なるＧＵＩ部品間では，より第二座標成分が減少する方向に位置するＧＵＩ部品の順序が先になるように，前記ＧＵＩ部品の順序を決定するルールである
ことを特徴とする付記１に記載のＧＵＩ部品制御プログラム。
【０１７８】
（付記４）
前記所定のルールが，付記３に記載の説明を，垂直方向成分の増分方向を下から上とした場合，および水平成分の増分方向を右から左とした場合，およびそれらの両方の方向を反転した場合それぞれにおける，付記１に記載のＧＵＩ部品制御プログラム。
【０１７９】
（付記５）
あるプログラムが表示する画面のＧＵＩ部品を，別のプログラムから制御するＧＵＩ部品制御方法であって，
前記別のプログラムを実行するコンピュータが，
少なくとも前記ＧＵＩ部品の位置情報を含む，前記画面の前記ＧＵＩ部品の情報を取得する過程と，
前記ＧＵＩ部品の位置情報に基づいて，前記画面の前記ＧＵＩ部品の順序を所定のルールで決定する過程と，
前記ＧＵＩ部品と決定された順序との対応情報を，前記コンピュータがアクセス可能な記憶装置に記憶する過程と，
前記順序を用いて制御の対象となる前記ＧＵＩ部品を特定した指示に対して，前記記憶装置に記憶された前記ＧＵＩ部品と順序との対応情報を参照して制御の対象となる前記ＧＵＩ部品を特定し，前記画面の前記ＧＵＩ部品への制御を行う過程とを実行する
ことを特徴とするＧＵＩ部品制御方法。
【０１８０】
（付記６）
あるプログラムが表示する画面のＧＵＩ部品を，別のプログラムにより制御するＧＵＩ部品制御装置であって，
少なくとも前記ＧＵＩ部品の位置情報を含む，前記画面の前記ＧＵＩ部品の情報を取得するＧＵＩ部品情報取得部と，
前記ＧＵＩ部品の位置情報に基づいて，前記画面の前記ＧＵＩ部品の順序を所定のルールで決定する順序決定部と，
前記ＧＵＩ部品と決定された順序との対応情報を記憶する情報記憶部と，
前記順序を用いて制御の対象となる前記ＧＵＩ部品を特定した指示に対して，前記情報記憶部に記憶された前記ＧＵＩ部品と順序との対応情報を参照して制御の対象となる前記ＧＵＩ部品を特定し，前記画面の前記ＧＵＩ部品への制御を行うＧＵＩ部品制御部とを備える
ことを特徴とするＧＵＩ部品制御装置。
【符号の説明】
【０１８１】
１  コンピュータ
１０  制御プログラム
１１  スクリプト制御エンジン
１１１  ＧＵＩ部品情報取得部
１１２  順序決定部
１１３  情報記憶部
１１４  ＧＵＩ部品制御部
１２  スクリプト
２０  対象プログラム
３０  ＯＳ
４０  画面
４５  ＧＵＩ部品
【図１】
2011107949.tif 000003
【図２】
2011107949.tif 000004
【図３】
2011107949.tif 000005
【図４】
2011107949.tif 000006
【図５】
2011107949.tif 000007
【図６】
2011107949.tif 000008
【図７】
2011107949.tif 000009
【図８】
2011107949.tif 000010
【図９】
2011107949.tif 000011
【図１０】
2011107949.tif 000012
【図１１】
2011107949.tif 000013
【図１２】
2011107949.tif 000014
【図１３】
2011107949.tif 000015
【図１４】
2011107949.tif 000016
【図１５】
2011107949.tif 000017
【図１６】
2011107949.tif 000018
【図１７】
2011107949.tif 000019
【図１８】
2011107949.tif 000020