※当サイト一部記事にはP Rが含まれます

UWSCの共通処理は、別ファイルにクラス化しておくと非常に便利ですよ。

TIPS
この記事は約8分で読めます。

共通処理は別ファイルに部品化しておくと、実装やメンテナンスが効率化できます。

UWSCでスクリプトを作成すると「.UWS」形式のファイルを作成するかと思います。

通常は、目的とする全ての処理をこの「.UWS」のファイルに記述します。

なので、「1つの目的・操作」=「1つのUWSファイル」となりがちです。

 

しかし、

「他のスクリプトで書いた処理を、もう一回書くのは面倒だなぁ・・・」

「共通のPROCEDUREを別ファイルにしておきたいなぁ・・・」

「処理を修正したいけど、全部のスクリプトをメンテするのは面倒・・・」

なんて思うことはないでしょうか?

 

UWSCでは「CLASS~ENDCLASS」の記述をすることでクラス化し、スクリプトを意味のあるグループにまとめることができます。

これを利用することで、効率的にスクリプトを作成することができます。

 

例えば、ポイントサイト関連などのスクリプトを作成する場合、以下のような良く使う処理などはまとめておくと便利です。

IEを起動する。

IEの画面遷移後のウェイト処理。

画面の最大化。

全IEのクローズ。

などなど。

 

また、昨今は外部提供のゲームや1円アンケートなど、ポイントサイト間で同じコンテンツが導入されていることが多いです。

このようなコンテンツを自動化する場合も、スクリプトをクラス化しておくと非常に便利です。

 

1つのコンテンツの自動化スクリプトを共通クラスに準備しておけば、複数のサイトで呼び出して共通的に使うことができます。

さらに、コンテンツの仕様変更などがあった場合、クラス化したファイルのみを修正するだけで、全スクリプトに修正を反映することができるわけです。

メンテナンスの手間が省けるわけですね!(∩´∀`)∩

 

 

「CLASS~ENDCLASS」の記述をしておくだけで、簡単に共通部品化することができます。

共通化・部品化するのは非常に簡単です。

「CLASS~ENDCLASS」の記述したうえで、共通PROCEDUREの処理などを記述したファイルを用意するだけです。

 

例えば、以下の3ファイルがあると仮定します。

共通部品ファイル:COMMON.UWS

スクリプト①:SAMPLE1.UWS

スクリプト②:SAMPLE2.UWS

20160316_uwsc

「共通部品ファイル:COMMON.UWS」に、「CLASS~ENDCLASS」でクラス定義し、共通処理を記述します。

すると、「スクリプト①:SAMPLE1.UWS」、「スクリプト②:SAMPLE2.UWS」の両方から共通の処理を呼び出すことができるわけです。

 

具体的にソースを見てみます。

 

共通処理側のプログラム(共通部品ファイル:COMMON.UWS)

「COMMON.UWS」に「CLASS~ENDCLASS」の記述でクラスを定義しました(クラス名=COMMONPROC)。

その中にIE起動、ウェイト処理、最大化処理、IEクローズの4つのPROCEDURE/FUNCTIONを記述しました。

処理の書き方は普段通りでOKです。

処理全体を「CLASS~ENDCLASS」で括るだけですね。(*^-^*)

CLASS COMMONPROC

	DEF_DLL SendMessageA(Hwnd, Long, Long, Dword): bool: user32
	CONST WM_ACTIVATE = $06

	// IE起動
	FUNCTION CREATEIE()
	  TRY
	   IE = CREATEOLEOBJ("InternetExplorer.Application")
	  EXCEPT
	   EXEC("C:\Program Files\Internet Explorer\iexplore.exe")
	   IE = GETACTIVEOLEOBJ("InternetExplorer.Application")
	  ENDTRY
		IE.visible = true
		RESULT = IE
	FEND

	// 遷移ウェイト
	PROCEDURE BUSYWAIT(IE)
		SLEEP(0.5)
		ClkItem(GetID("Windows", "#32770", 1), "OK")
		ClkItem(GetID("Windows", "#32770", 1), "このページから移動")
		ClkItem(GetID("Windows", "#32770", 1), "プログラムを終了します")
		ClkItem(GetID("Windows", "#32770", 1), "プログラムを再起動します")
		ClkItem(GetID("ページからのメッセージ", "#32770", 1), "OK")
		ClkItem(GetID("ページからのメッセージ", "#32770", 1), "このページから移動")
		ClkItem(GetID("ページからのメッセージ", "#32770", 1), "プログラムを終了します")
		ClkItem(GetID("ページからのメッセージ", "#32770", 1), "プログラムを再起動します")
		CONST TIME_OUT = 60
		tm = Gettime()
		REPEAT
			SLEEP(1)
			ifb Gettime() - tm > TIME_OUT
				break
			endif
		UNTIL (! IE.BUSY) AND (IE.READYSTATE=4)
		SendMessageA(IE.Hwnd, WM_ACTIVATE, 0, 0)
		SLEEP(0.5)
	FEND

	// 画面の最大化
	PROCEDURE MAXIMIZE(SITE)
		CTRLWIN(GETID(SITE), MAX)
		CTRLWIN(GETID(SITE), ACTIVATE)
		SLEEP(0.5)
	FEND

	// 全IEクローズ
	PROCEDURE CLOSINGIE()
		for i = 0 to GETALLWIN()-1
			if POS("iexplore.exe", STRCONV(STATUS(ALL_WIN_ID[i], ST_PATH),SC_LOWERCASE)) <>  0 then CTRLWIN(ALL_WIN_ID[i], CLOSE)
		next
	FEND

ENDCLASS

 

呼び出し側のプログラム(スクリプト①:SAMPLE1.UWS)

次に呼び出し側のプログラムになります。

 

まずは、「共通部品の呼び出し」を行います。

呼び出しは、「CALL 共通部品名.UWS」と最初に記述することで、共通部品内のPROCEDURE/FUNCTIONを使えるようになります。

これを忘れてしまい、「呼び出せないお・・(´・ω・`)」となる人が多いのでご注意ください(;^ω^)。

 

次に、実際のPROCEDURE/FUNCTIONの呼び出しは「クラス名.PROCEDURE/FUNCTION名」となります。

通常のPROCEDURE/FUNCTIONの呼び出しの頭に「クラス名.」を付けるだけです。

こちらは共通部品の「ファイル名」ではなく「クラス名」なのでご注意ください。

// 共通クラスの呼び出し
CALL COMMON.UWS

// IE起動
IE = COMMONPROC.CREATEIE()

// 遷移ウェイト
IE.Navigate("https://www.google.co.jp/")
COMMONPROC.BUSYWAIT(IE)

// 画面の最大化
COMMONPROC.MAXIMIZE("Google")

// 全IEクローズ
COMMONPROC.CLOSINGIE()

 

共通化すると、ソースコードが大変スッキリしますw。

 

 

まとめ。UWSCでも汎用的な処理は共通化しておくと、効率がグッとアップしますよ~。

というわけで、UWSCでも汎用的な処理は共通化しておくことが推奨されます。例えば以下みたいな感じ。

UWSCのプログラム時、画面を閉じる処理を共通化しておくと非常に便利です。
「ウィンドウ(画面)を閉じる処理」はよくあるパターンなので、共通化すると便利ですね。ウェブサイトを操作するプログラムなどを作ると、画面(ウインドウ)を閉じる処理を記述することは頻繁にあります。もちろん、IEでセオリー通りにブラウザを起動した...
UWSCスクリプトのIE11向けBUSYWAIT処理(コピペOK・ポップアップ対応済)。
UWSCスクリプトのCLKITEMやIESETDATAでボタンやリンクをクリックした後のBUSYWAIT処理は重要。UWSCスクリプトでウェブサイトの自動化をする際に、「サイトを開く」「CLKITEMでリンクをクリックする」「IESETDA...

 

同じ処理を何度も書かなくても済む。

修正が発生した場合も、共通部品の1か所の修正で済む。

ソースコードがめっちゃスッキリ。

などのメリットがあります。

先々を考えて、効率的な開発ができるように、共通部品を設計しておくことは大事ですよね。

UWSC関連の記事あります!

UWSC関連の記事もたくさん書いてます^^。良かったら読んでくださいね。自動化ライフの実現に一歩近づくテクニックがあるかもしれませんよ?(嘘ですwありませんw)

UWSCで画像認識できないときに読む。CHKIMGの使い方&便利関数&トラブル解決。
初心者でもわかる? ネットゲームなどのマクロスクリプト作成に利用されているUWSC画像認識入門。本ブログではUWSCのTIPS記事などもたまに投稿していたりするのですが、記事のアクセス流入の検索キーワードなどを分析すると、どうやらネットゲー...
UWSCでリンクがクリックできないときに読む。どんなリンクもクリックしちゃう5つの方法。
「なんかリンクがクリックできないよ・・・」を解決します。UWSCでIE操作を行う場合、「リンクのクリック」をしたいことはよくあります。特にポイントサイトの場合、画面の遷移だけでなく、クリックポイントや検索ポイントを取得する際にも必要ですしね...
UWSCでCOMエラーが出たら、初心者が確認すべきチェックリスト。原因不明でもタスクキルで改善する場合もある。
マクロ・スクリプトとしてUWSCを使ってIE処理していると、たまにアプリのCOM_Error、フリーズ、クラッシュ、強制終了などが発生する場合がある。IEなどの操作をUWSCで実行していると、以下のような現象が発生する場合があります。「CO...