DEF_DLL

DEF_DLL

DLL(API等)の関数を使用

DEF_DLL 関数名(型, 型, …): 戻り型: DLL名
int
long
bool
uint
hwnd
string
Wstring
float
double
word
dword
byte
char
pchar
Wchar
pWchar
boolean
longlong
Extended
SafeArray

・64bitのDLLは呼び出し不可
・参照引数(値変更あり)の場合はVar 宣言が必要
※関数名( var double, var int )
  ・構造体:型を { } に展開して記述
※関数名( double, {int, int, int} )
・配列の場合は型に [] を付記
※関数名( double[], int[] )
(※)int=long= bool(4byte)
(※)dword=uint=hwnd
(※)char=boolean(1byte)
(※)ヌルポインタを渡す時は NULL定数を使用

タグ

2012年9月30日 | コメントは受け付けていません。 |

カテゴリー:構文・制御文

マルチステートメント

マルチステートメント

;(セミコロン)

複数の命令を1行に記述できる

マルチステートメントとは

通常は1行で1命令を記述することが原則となります。
ただしマルチステートメントを記述することで1行中に複数の命令を記述することができます。

A = 100; B = 200; PRINT A + B

スクリプトの行数を減らしたいときに使う

マルチステートメントを使用することで複数の命令を1行に記述することができます。
たくさん変数を記述したいけど、
複数行も費やすのがいやと感じる場合はマルチステートメントを使用するのもいいでしょう。
ただし、このマルチステートメント、
スクリプトの可読性が落ちるとされるため(読みにくくなるため)
あまり使用する人はみかけません。
自身では利用を控え、
もし誰か別の人が使用して記述している場合は
それがマルチステートメントであると判別できればよい程度です。
マルチステートメントと普通の記述を並べて見ました。 以下のようになります。どちらが見やすいでしょうか。

この投稿の続きを読む »

タグ

2012年9月25日 | コメントは受け付けていません。 |

カテゴリー:構文・制御文

TRY-ENDTRY

TRY-FINALLY-ENDTRY

例外処理をする
TRY
  処理1
[EXCEPT]
  処理2
[FINALLY]
  処理3
ENDTRY

・TRY・・・処理1には例外が発生する可能性のある処理を記述
・EXCEPT・・・処理2には例外が発生した場合の処理を記述(FINALLYとの同時記述は不可)
・FINALLY・・・処理3は例外が発生する、しないにかかわらず必ず実行される処理を記述(EXCEPTとの同時記述は不可)
・ENDTRY・・・例外処理の終了

例外とはエラーのこと

例えば、値を初期化していない変数を出力しようとした場合、
UWSCではエラーとなってしまいます。
他にも、ある数値を0で割ろうとした場合(ゼロ除算)、
同様にエラーが発生します。
このようにプログラム中は予期しないエラーが発生するケースが
多々あります。
TRY-ENDTRYはそのような可能性のある箇所に記述することで
例外発生時の処理を記述することができ、
プログラムを異常終了することなく
継続させることができます。

VAL = INPUT("1以上の数値を入れてください※と指示しても0やら文字列やらを入力する人はいる","あああああああ")
//エラーが発生する可能性があるので例外処理を記述
TRY
  PRINT 100 / VAL
EXCEPT
 //例外が発生した場合
 MSGBOX("正しい値が入力されていないようです")
ENDTRY

例外発生時の情報も取得可能

TRY_ERRMSGにはエラーの情報が
TRY_ERRLINEにはエラー発生した行数が格納されています。
下記のようにして出力してみましょう。

この投稿の続きを読む »

タグ

2012年9月22日 | コメントは受け付けていません。 |

カテゴリー:構文・制御文

HASHTBL

HASHTBL

連想配列を宣言する
・HASHTBL 変数 = HASH_CASECARE
・HASHTBL 変数 = HASH_SORT
・変数[キー, HASH_EXISTS]
・変数[キー, HASH_REMOVE]
・変数[順列番号, HASH_KEY]
・変数[順列番号, HASH_VAL]
・変数 = HASH_REMOVEALL

・HASH_CASECARE・・・大文字小文字を区別する(デフォルト区別無し)
・HASH_SORT・・・順列で呼び出す際にキーがソートされている
・HASH_EXISTS・・・キーが存在する場合Trueを返す
・HASH_REMOVE・・・キー、値を削除する。成功時にはTrueを返す
・HASH_KEY・・・キーを返す
・HASH_VAL・・・値を返す
・HASH_REMOVEALL・・・中身をクリアする

連想配列とは何か

配列は通常、キーに数字を指定します。
連想配列とは、そのキーが数字ではなく、任意の文字列が利用できるものです。
たとえばARRAY[0]、ARRAY[1]としていたものが
ARRAY["NAME"]、ARRAY["TEL"]として値を取り扱えるようになるのです。

//連想配列MYARRAYを宣言、大文字小文字は区別し、ソートする
HASHTBL MYARRAY = HASH_CASECARE or HASH_SORT

//値の代入
MYARRAY["NAME"] = "山本山太郎"
MYARRAY["TEL"] = "090-9999-77777"

//値の呼び出し
PRINT MYARRAY["NAME"]
PRINT MYARRAY["TEL"]

//キーが存在するか
PRINT MYARRAY["ONAMAE", HASH_EXISTS]
PRINT MYARRAY["NAME", HASH_EXISTS]

//キーNAMEを削除
PRINT MYARRAY["NAME", HASH_REMOVE]
PRINT MYARRAY["NAME"]

値とキーをセットで考える際に便利

配列はキーが数字なので、意味はそれ以上もそれ以下もありません。
しかし、連想配列は文字列をキーに取れるので、ある値が格納されているキーに
意味を持たせることができます。
例えば人の名前を変数に格納する際に、その人たちの役職をキーにすると、
人名と役割のセットが出来上がります。
以下のスクリプトで見てみましょう。

この投稿の続きを読む »

タグ

2012年9月20日 | コメントは受け付けていません。 |

カテゴリー:構文・制御文

TEXTBLOCK-ENDTEXTBLOCK

TEXTBLOCK-ENDTEXTBLOCK

TEXTBLOCK 変数名
・・・・・・・・
・・・・・・・・
ENDTEXTBLOCK

・複数行にわたる文字列を変数に格納します

特殊文字を入れなくても改行を反映

TEXTBLOCK-ENDTEXTBLOCKを使うことにより
特殊文字の改行を記述しなくても、
改行を変数に挿入できます。

PRINT HELLOTEXT
TEXTBLOCK HELLOTEXT
こ
ん
に
ち
は
ENDTEXTBLOCK

OPTION SPECIALCHAR

ちなみにOPTION指定を指定するとTEXTBLOCKの特殊文字は変換されなくなります。
下記のようになります。

この投稿の続きを読む »

タグ

2012年9月20日 | コメントは受け付けていません。 |

カテゴリー:構文・制御文

WITH-ENDWITH

WITH-ENDWITH

モジュール、クラス、COMオブジェクトの表記などのドット構文にて指定部分を省略して表記できる
WITH ドット構文共通部
.変数 = < 値>
.関数()
ENDWITH

・ドット構文共通部・・・ドットで区切られた部分の省略したい箇所
・変数・・・ドットを付けて変数を記述することで呼び出し可能
・関数・・・ドットを付けて関数を記述することで呼び出し可能

何度も同じ表記をするのは面倒くさい時に

上級者編で述べているCOMオブジェクトなどはドットで区切られた構文を多様します。
理解が進むと、段々感じてくると思いますが、
記述内容の繰り返しが多く出てきます。
まとめて同じドット以下に処理をしたい場合はWITH-ENDWITHを使いましょう。
以下、簡単な使い方です。

IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.visible = True
IE.navigate("http://www.yahoo.co.jp")
REPEAT
 SLEEP(0.1)
UNTIL !IE.busy AND IE.readyState = 4

WITH IE.document
  .TITLE = "やっほー"
ENDWITH

必要に応じて使おう

上の例ですと、ブラウザがアクセスしたページのタイトルだけ変えています。
こういう場合は大した威力は発揮できませんが、
数が多い場合には是非とも活用して下さい。
次に、MODULE-ENDMODULE、CLASS-ENDCLASSで説明した
サンプルスクリプトを WITH-ENDWITHで呼び出してみましょう。
以下のようになります。

この投稿の続きを読む »

タグ

2012年9月16日 | コメントは受け付けていません。 |

カテゴリー:構文・制御文

XLACTIVATE

Excel シートの選択
戻値 = XLACTIVATE( Excel, Sheet名, [Book名] )
引数
Excel
ExcelのCOMオブジェクト
Sheet名
アクティブにするシート名(順番での指定も可)
Book名
アクティブにするブック名
戻値
TRUE
正常
FALSE
処理不能

EXCELのシートを変更する

この関数はPro版のみ使用可能です。
XLOPENでCOMを生成して、シートを指定して制御が可能になります。

UWSC XLACTIVATE EXCELサンプルファイル

EXCELサンプルファイル

EXCELファイルはこのようなイメージです。
拡大して確認してみてください。
以下のサクリプトで、シートが順次変更していきます。

スクリプト

PATH	= "C:\\TEST.xls"
Excel	= XLOPEN(PATH)
Excel.application.displayalerts = false

MSGBOX("シート名を確認してください<#CR>シートを変更します")

SHEETNAME = "animal"
SS = XLACTIVATE( Excel,SHEETNAME)

IFB SS = 1
	PRINT SHEETNAME
ENDIF

MSGBOX("シート名を確認してください<#CR>シートを変更します")

SHEETNAME = "Sheet1"
SS = XLACTIVATE( Excel,SHEETNAME)

IFB SS = 1
	PRINT SHEETNAME
ENDIF

MSGBOX("シート名を確認してください<#CR>シートを変更します")

SHEETNAME = "Sheet2"
SS = XLACTIVATE( Excel,SHEETNAME)

IFB SS = 1
	PRINT SHEETNAME
ENDIF

MSGBOX("終了します")

タグ

2012年9月15日 | コメントは受け付けていません。 |

カテゴリー:関数一覧

MODULE-ENDMODULE、CLASS-ENDCLASS

MODULE-ENDMODULE、CLASS-ENDCLASS

モジュール化、クラス化して、スクリプトを意味のあるグループにまとめます
MODULE
  CONST 変数
  PUBLIC 変数
  DIM 変数
  PROCEDURE モジュール名
  PROCEDURE 関数名()
  FUNCTION 関数名()
ENDMODULE
または・・・
CLASS
  CONST 変数
  PUBLIC 変数
  DIM 変数
  PROCEDURE クラス名
  PROCEDURE 関数名()
  FUNCTION 関数名()
ENDCLASS
MODULEもCLASSも同義

・CONST 変数・・・名前.変数名で外部からアクセス可
・PUBLIC 変数・・・名前.変数名で外部からアクセス可
・DIM 変数・・・外部からアクセス不可
・PROCEDURE モジュール名/クラス名・・・コンストラクタ
・PROCEDURE 関数名()
・FUNCTION 関数名()

変数、関数をセットにした1つのグループを定義する際に使用

例えば、HUMANというオブジェクトがあったとします。
このオブジェクトには、NAMEという変えられない定数、
FEELINGという変数、そしてSPEAKという関数や
WALKという関数が備わっているとします。
これらの定数、変数、関数をバラバラに定義することも可能ですが、
HUMANというオブジェクトの中に収め、意味のあるグループで
まとめるたほうがよい場合が多々あります。
※メンテナンスがしやすい
※スクリプトの可読性が高まる
※変更してよい変数、してはいけない変数が明確になり、改修や影響調査がしやすい
などなど
もしオブジェクト指向という情報技術の一分野を学ぶ際には、
こういった考え方を知っておくのは大変役に立つでしょう。
まずは上のHUMANというオブジェクトを組み立ててみましょう。

//まずは喋らせてみる
MSGBOX(HUMAN.SPEAK())

//気分を変えてみる
HUMAN.FEELING = "I feel so bad"

//もう一度喋らせてみる
MSGBOX(HUMAN.SPEAK())

//歩かせて見ます
HUMAN.WALK()
//もう一度歩かせて見ます
HUMAN.WALK()
//もう一度歩かせて見ます
HUMAN.WALK()
//もう一度歩かせて見ます
HUMAN.WALK()

//MODULE-ENDMODULEとしてもよい
CLASS HUMAN
 CONST NAME = "John"
 PUBLIC FEELING = "I'm Happy"
 DIM STEPS
 PROCEDURE HUMAN()
  THIS.STEPS = 10
 FEND 
 FUNCTION SPEAK()
  RESULT = "My name is " + THIS.NAME + " " + THIS.FEELING
 FEND
 PROCEDURE WALK()
  THIS.STEPS = THIS.STEPS + 1
  PRINT THIS.STEPS + "歩目を踏み出しました"
 FEND
ENDCLASS

使い方

たとえば、汎用的な作業を別ファイルに書き出すとします。
UWSCではCALLを使うことで、
外部スクリプトを呼び出せますので、
よくある処理をまとめておけば、再度開発する手間が省けます。
こういう場合に、同じ名前の変数(関数)を使った/作ってしまった、
というケースは割とあります。
また、変数や関数が意味もなく、羅列してあるので収集がつかなくなったり
スクリプトのメンテナンス性が著しく悪くなってしまったりするケースもあります。
こういう場合にMODULEやCLASSを導入することで、
名前の被り(MODULE名やCLASS名が異なれば、内部の変数は被っても大丈夫)
意味のない関数、変数の乱雑さを抑止することができます。
下記のスクリプトは先ほどのスクリプトに一つ一つコメントを入れたものです。
導入する際のメリットになれば幸いです。

この投稿の続きを読む »

タグ

2012年9月15日 | コメントは受け付けていません。 |

カテゴリー:構文・制御文

THREAD

THREAD

THREAD 関数名()

スレッドを生成し、指定した関数を実行する

並列で作業させたい場合に活用

THREADはコンピューターの処理単位の1つだと思ってください。
通常、コンピューターは上から順番に処理をして行きますが、
THREADを実行することにより、その関数は別プロセス(別スレッド)で立ち上がり
独自に処理されていきます。
簡単な例を下に記します。
実行させてみるとわかりますが、
最初のA部とB部は1つ1つ処理されますが、
後半のC部とD部は並行処理されます。

FOR A = 1 TO 5
 SLEEP(1)
 FUKIDASI("A:" + (5 - A),G_MOUSE_X,G_MOUSE_Y,0,20)
NEXT


FOR B = 1 TO 5
 SLEEP(1)
 FUKIDASI("B:" + (5 - B),G_MOUSE_X,G_MOUSE_Y,0,20)
NEXT

MSGBOX("AとBが順番に処理されました。続いてTHREADで実施します。")


THREAD ExecuteC()

FOR D = 1 TO 5
 SLEEP(1)
 FUKIDASI("D:" + (5 - D),G_MOUSE_X,G_MOUSE_Y,0,20)
NEXT


PROCEDURE ExecuteC()
 FOR C = 1 TO 5
  SLEEP(1)
  FUKIDASI("C:" + (5 - C),G_MOUSE_X + 50,G_MOUSE_Y + 50,0,20)
 NEXT
FEND

並列で処理させてみよう

以下のスクリプトでは、メモ帳を立ち上げ、片方には英語、もう一方には日本語を書き込みます。
THREADですので、同時に実行されます。

この投稿の続きを読む »

タグ

2012年9月9日 | コメントは受け付けていません。 |

カテゴリー:構文・制御文

特定の画像を見つける

画像オブジェクトの情報を読み込みながら、特定の画像を見つけてみます。

順次ページにアクセスしていき、指定画像が出現したらメッセージを表示するスクリプトを動画で実演しています。

タグ


2012年9月8日 | コメントは受け付けていません。 |

カテゴリー:動画

このページの先頭へ