【UWSC】の部品化はCLASS化して呼び出す

目次

UWSCで連続処理を行うジョブを実行するにはCLASS化して呼び出す

adono

この記事を読めば【UWSC】で外部モジュールから
共通部品を呼び出すことが出来るよぉ~
これで、連続したバッチ処理もUWSCで書けるようになるね ❣

一つのプログラムを作成し、共通化部品をサブプログラムにして呼び出すといった標準化の作成方法は
昔からあるが、多少その言語に慣れてからでないと、何を書いているのか?言っているのか?

自分の知識から紐解こうとするので、その知識が逆に邪魔をして手を止める原因になるといったことは
特に、珍しいことではない。

私は、現役時代から「先ずは動けばいいんでしょ!」

という考えで、自分の今ある知識でプログラムを組んで、壁に当たったら調べる。といったやり方をしてきた。

このやり方は少人数でスピードを出すには的確な方法だが、多人数でシステムを組む場合には
プログラム仕様の標準化に時間が掛かるので、私のような人間がパッケージ開発とか汎用ソフトの開発チーム
に入ると、、、デバッグ時間増大の可能性が大きく

システムトータルの納品時間が結果的に多く掛かってしまう!

という弊害もある。

【WordPress】のMysqlを自動セーブするUWSCモジュールを作成する

このブログのレンタルサーバーはロリポップであり、phpMyAdminを手動で起動しデータベースをセーブ
しなければいけない仕様なのである。

月額¥330-払えば、自動保存してくれるんだけどねぇ~
このブログで毎月レンタルサーバー費用ぐらい稼いでくれれば、さっさと払うんだけどねぇ~😏

UWSCでテストプログラム作成したら、案外楽しくプログラミング出来たので、今WordPressで作成している分
(枠だけのモノもあるけど…)4つほど連続処理してバッチ処理するモジュールを作成した次第だ。

その過程で今回、UWSCのCLASS化(部品化)をしてみたので、記載しておく。

ACW(GETID("phpMyAdmin - Google Chrome","Chrome_WidgetWin_1"),-1,-8,1922,1041,0)
ID=GETID("phpMyAdmin","chrome")
PATH="C:\XXXXXXXXXX\uwsc5302\Lolipop\img24\"
Timer=0.5
CTRLWIN(ID,max)
sleep(timer)
//TextBlockのデータを配列初期値として代入
GAZOU = SPLIT( 画像 , "<#CR>")

//ここからphpMyAdmin
		sleep(timer)
		SENDSTR(0, "ユーザ名") //クリップボードに文字を送る
		sleep(Timer*2)

		// 文字列検索し該当文字列ならばオレンジ色
		ifb keyboard_cpy() = 1 then
			ifb CHKIMG(PATH + GAZOU[0]+".bmp") then
					x=G_IMG_X +10      // 画像の座標をxへ代入
					y=G_IMG_Y +35  // 画像の座標をyへ代入
					sleep(Timer)
					BTN(LEFT, CLICK, x, y)	//目的位置をクリック
					sleep(Timer)
			else
				exit
            endif
		endif

		IF GETKEYSTATE(TGL_IME) then KBD(VK_KANJI, CLICK)
		KBD(VK_TAB,CLICK,40)
		KBD(VK_DELETE,CLICK,40)
		KBD(VK_SHIFT,DOWN,40)
		KBD(VK_TAB,CLICK,0)
		KBD(VK_SHIFT,UP,40)
		KBD(VK_DELETE,CLICK,40)
		sleep(timer)
		//ユーザー名
    SENDSTR(0, "xxx") //クリップボードに文字を送る
~省略
		//ここからパスワード
		KBD(VK_TAB,CLICK,40)
    SENDSTR(0, "yyy") //クリップボードに文字を送る
~省略

		sleep(timer)

//phpMyAdmin データベース選択-実行
    ifb CHKIMG(PATH + GAZOU[4]+".bmp") then
					x=G_IMG_X // 画像の座標をxへ代入
					y=G_IMG_Y // 画像の座標をyへ代入
					sleep(Timer)
					BTN(LEFT, CLICK, x, y)	//確認画像をクリック
					sleep(Timer)
		else
			exit
		endif
		sleep(1.5)
//phpMyAdmin エクスポート
    ifb CHKIMG(PATH + GAZOU[5]+".bmp") then
					x=G_IMG_X // 画像の座標をxへ代入
					y=G_IMG_Y // 画像の座標をyへ代入
					sleep(Timer)
					BTN(LEFT, CLICK, x, y)	//確認画像をクリック
					sleep(Timer)
		else
			exit
		endif
		sleep(1.5)
//phpMyAdmin エクスポート実行
        ifb CHKIMG(PATH + GAZOU[6]+".bmp") then
					x=G_IMG_X // 画像の座標をxへ代入
					y=G_IMG_Y // 画像の座標をyへ代入
					sleep(Timer)
					BTN(LEFT, CLICK, x, y)	//確認画像をクリック
					sleep(Timer)
		else
			exit
		endif
exit

TextBlock 画像
selore01
dbsv01
dbsv02
dbsv03
dbsv04
dbsv05
dbsv06
dbsv07
EndTextBlock

Function keyboard_cpy()
  Result = 0
		timer=0.5
    KBD(VK_CTRL,DOWN)
		KBD(VK_F,DOWN)
		sleep(Timer)
		KBD(VK_CTRL,UP)
		KBD(VK_F,UP)
		sleep(Timer)
		KBD(VK_CTRL,DOWN)
		KBD(VK_V,DOWN)
		sleep(Timer)
		KBD(VK_CTRL,UP)
		KBD(VK_V,UP)
		sleep(Timer)
	Result = 1	
Fend

※上記プログラムはこのままでは動作致しません!

このプログラム中の

  • ユーザー名
  • パスワード

を4つ分作成し、連続処理するUWSCを作成する。

メッセージボックスに”Ok”と”CANCEL”で必要分4つのモジュールを実行!

//Wordpress Mysqlを自動セーブ
msg=MSGBOX("WordPress Mysql-save", BTN_OK OR BTN_CANCEL)

IF (msg=BTN_CANCEL)  THEN exit

call sql1.uws
call sql2.uws
call sql3.uws
call sql4.uws
exit

ここで良い感じで、エラーが出る!多重定義エラーらしい!

TextBlock 画像
selore01
dbsv01
dbsv02
dbsv03
dbsv04
dbsv05
dbsv06
dbsv07
EndTextBlock

Function keyboard_cpy()
  Result = 0
		timer=0.5
    KBD(VK_CTRL,DOWN)
		KBD(VK_F,DOWN)
		sleep(Timer)
		KBD(VK_CTRL,UP)
		KBD(VK_F,UP)
		sleep(Timer)
		KBD(VK_CTRL,DOWN)
		KBD(VK_V,DOWN)
		sleep(Timer)
		KBD(VK_CTRL,UP)
		KBD(VK_V,UP)
		sleep(Timer)
	Result = 1	
Fend

この命令が4つあるので、多重定義ということらしい。

ここでFunction,Procedure呼出しとかで、色々ググったわけだよw

Function,ProcedureともほぼExcel同様の使い方ができるみたい。
私は後で関数利用しやすいように無理やりResult値を入れて、全てFunction作成している。

これを4つのUWSC [sql1,sql2,sql3,sql4] で共通で使えるように書き換える必要がある。

UWSCでどのモジュールからでも呼び出すようにCLASS記述する

CLASS COMMONPROC
Function keyboard_cpy()
    Result = 0
		timer=0.5
    KBD(VK_CTRL,DOWN)
		KBD(VK_F,DOWN)
		sleep(Timer)
		KBD(VK_CTRL,UP)
		KBD(VK_F,UP)
		sleep(Timer)
		KBD(VK_CTRL,DOWN)
		KBD(VK_V,DOWN)
		sleep(Timer)
		KBD(VK_CTRL,UP)
		KBD(VK_V,UP)
		sleep(Timer)
	Result = 1	
Fend

TextBlock 画像
selore01
dbsv01
dbsv02
dbsv03
dbsv04
dbsv05
dbsv06
dbsv07
EndTextBlock

ENDCLASS

CLASS-ENDCLASSで綴じるだけ~( 一一)

ただ呼出し方が分からん!

どうするねん。。。Excelで他ブックとか呼出すのに”!”とか”.”で繋ぐのかな?

と思ったので、とりあえず試してみると、”.”で繋ぐと動いたよwウケるw

UWSCで外部モジュールからアクセスできるように準備する

  1. 共通部品を [CLASS-ENDCLASS] もしくは [MODULE-ENDMODULE] で綴じる
  2. 綴じた [CLASS-ENDCLASS] に名前を付ける [CLASS COMMONPROC-ENDCLASS]
  3. [CLASS COMMONPROC-ENDCLASS] をCOMMON.uwsという名前で保存する

UWSCで外部モジュールからアクセスする方法

  1. CALL COMMON.UWS //共通クラスの呼出しを宣言する
  2. 呼ぶ出す側は、[名前.変数名] に変数名を変更するだけ
    • [COMMONPROC.画像]
    • [COMMONPROC.keyboard_cpy()]
  3. 同一フォルダーに格納する

上記call sql1.uws~call sql4.uwsをCLASS化し記述変更する

  • 変更1:CALL COMMON.UWS //共通クラスの呼出し
  • 変更2:GAZOU = SPLIT( COMMONPROC.画像 , “<#CR>”)
  • 変更3:ifb COMMONPROC.keyboard_cpy() = 1 then
  • 変更4:文末CLASS化した文字列を削除
ACW(GETID("phpMyAdmin - Google Chrome","Chrome_WidgetWin_1"),-1,-8,1922,1041,0)
ID=GETID("phpMyAdmin","chrome")

//共通クラスの呼出し  //変更1
CALL COMMON.UWS

PATH="C:\XXXXXXXXXX\uwsc5302\Lolipop\img24\"
Timer=0.5
CTRLWIN(ID,max)
sleep(timer)
//TextBlockのデータを配列初期値として代入
GAZOU = SPLIT( COMMONPROC.画像 , "<#CR>")  //変更2

//ここからphpMyAdmin
		sleep(timer)
		SENDSTR(0, "ユーザ名") //クリップボードに文字を送る
		sleep(Timer*2)

		// 文字列検索し該当文字列ならばオレンジ色
		ifb COMMONPROC.keyboard_cpy() = 1 then  //変更3
			ifb CHKIMG(PATH + GAZOU[0]+".bmp") then
					x=G_IMG_X +10      // 画像の座標をxへ代入
					y=G_IMG_Y +35  // 画像の座標をyへ代入
					sleep(Timer)
					BTN(LEFT, CLICK, x, y)	//目的位置をクリック
					sleep(Timer)
			else
				exit
            endif
		endif

		IF GETKEYSTATE(TGL_IME) then KBD(VK_KANJI, CLICK)
		KBD(VK_TAB,CLICK,40)
		KBD(VK_DELETE,CLICK,40)
		KBD(VK_SHIFT,DOWN,40)
		KBD(VK_TAB,CLICK,0)
		KBD(VK_SHIFT,UP,40)
		KBD(VK_DELETE,CLICK,40)
		sleep(timer)
		//ユーザー名
    SENDSTR(0, "xxx") //クリップボードに文字を送る
~省略
		//ここからパスワード
		KBD(VK_TAB,CLICK,40)
    SENDSTR(0, "yyy") //クリップボードに文字を送る
~省略

		sleep(timer)

//phpMyAdmin データベース選択-実行
    ifb CHKIMG(PATH + GAZOU[4]+".bmp") then
					x=G_IMG_X // 画像の座標をxへ代入
					y=G_IMG_Y // 画像の座標をyへ代入
					sleep(Timer)
					BTN(LEFT, CLICK, x, y)	//確認画像をクリック
					sleep(Timer)
		else
			exit
		endif
		sleep(1.5)
//phpMyAdmin エクスポート
    ifb CHKIMG(PATH + GAZOU[5]+".bmp") then
					x=G_IMG_X // 画像の座標をxへ代入
					y=G_IMG_Y // 画像の座標をyへ代入
					sleep(Timer)
					BTN(LEFT, CLICK, x, y)	//確認画像をクリック
					sleep(Timer)
		else
			exit
		endif
		sleep(1.5)
//phpMyAdmin エクスポート実行
        ifb CHKIMG(PATH + GAZOU[6]+".bmp") then
					x=G_IMG_X // 画像の座標をxへ代入
					y=G_IMG_Y // 画像の座標をyへ代入
					sleep(Timer)
					BTN(LEFT, CLICK, x, y)	//確認画像をクリック
					sleep(Timer)
		else
			exit
		endif
exit
//変更4 以下削除

※上記プログラムはこのままでは動作致しません!

phpMyAdmin自動セーブ用使用画像

phpMyAdmin自動セーブ用使用画像
Windowsマクロテクニック: 超速!!(UWSCの使い方)

Windowsマクロテクニック: 超速!!

  1. マクロの基礎知識
  2. 実践!サンプルマクロ集
  3. UWSCで使える関数や制御文
  4. 他のアプリケーションの高度な制御方法
  5. マクロをもっと使いこなそう
  • あとがき
  • 付録
  • 索引

※UWSCの書籍として今も購入可能なモノは2種のみなので、その点を考慮すると★5になるが運よく中古があれば500円以下で購入可能!
Amazonレビューは★3.9

私のKindle-Unlimited評価は★3

Windowsを自動化!UWSC逆引き本 Kindle版

Windowsを自動化!UWSC逆引き本 Kindle版

  1. はじめに
  2. UWSCについて
  3. UWSCスクリプトをつくる
  4. 文字を操作する
  5. 配列を操作する
  6. ファイルを操作する
  7. ウィンドウを操作する
  8. システムを制御する
  9. ブラウザを操作する
  10. Officeスイートを操作する
  11. 高度な操作

Kindle販売なので在庫がなくなることはない?
UWSCの読み物として暇なときに見るようにしている
Amazonレビューは★3.9

私のKindle-Unlimited評価は★3

編集後記

2024.1.24時点でもWin11上でUWSCは使えているが、今後AIの進化!さしずめ ChatGPT , Microsoft365 Copilot , Power Automate が、2024年は更に加速度的に相乗効果でMicrosoft一強へ動き出すかもしれない🦆

それでは、またね~😎

目次