見出し画像

切りの良いところで止めたい【UWSC】

ループ処理を行っている最中にマクロを停止したい場合など、停止はさせたいものの処理の途中では停止させたくない。切りの良いところで止めたいということがあります。

切りの良いところで止める方法

そこで、切りの良いところで止める方法について考えてみました。

PUBLIC STOP_F

//----------------------------------------------------------------------
Dim 開始秒 = GetTime()
//----------------------------------------------------------------------
// アクティブにする、なければ起動する
if GETID("電卓","ApplicationFrameWindow", 0.1) < 0 then EXEC("calc")
id=GETID("電卓","ApplicationFrameWindow",-1)
ACW(ID, 100, 100)


REPEAT
SLEEP(0.02)
CTRLWIN(id, ACTIVATE) // IDの画面をアクティブにする
UNTIL STATUS(id, ST_ACTIVE) // IDの画面がアクティブなるまで待機

//----------------------------------------------------------------------
THREAD STOP_SW
//----------------------------------------------------------------------

WHILE TRUE

clkitem(id,"項目をクリア",CLK_ACC) //初期化 Win10
clkitem(id,"クリア",CLK_ACC) //初期化 Win11
for n =1 TO 9
clkitem(id,n,CLK_BTN)
SLEEP(1.0)
NEXT

if STOP_F = 0 THEN
//何もしない
ELSE
//停止する
MSGBOX("完了しました!")
//----------------------------------------------------------------------
Dim 現在秒 = GetTime()
print 現在秒-開始秒 +"秒"
//----------------------------------------------------------------------
EXITEXIT
ENDIF

WEND


//************************************************************************
PROCEDURE STOP_SW
//************************************************************************
CONST vbOKOnly = 0
 
DIM WshShell = CREATEOLEOBJ("WScript.Shell")
 
SELECT WshShell.Popup("停止をリクエストします。<#CR> _
		(処理の完了後に停止します。)", 0 , , vbOKOnly)
	// 中止
	CASE 1
		PRINT "【停止のリクエスト】"
		STOP_F=1
 		Fukidasi("処理の完了後に停止します。")
SELEND

//************************************************************************
FEND
//************************************************************************

上記のサンプルコードは、電卓を起動し初期化(クリア)してから、1秒ごとに1から9までの数値入力を繰り返します。

その際、事前に「停止をリクエスト」する仕組みをスレッド起動させておきます。そうすることで数値入力を繰り返す処理と並行して、「停止のリクエスト」の入力を待機させます。

「停止のリクエスト」が入力されたかどうかの判断は処理の最後にあるため、どのタイミングで「停止のリクエスト」が入力されても、停止するのは処理の最後になるという仕組みになります。

マクロの停止ボタンで停止させると押したタイミングで停止しますが、「停止のリクエスト」を押した場合には必ず「9」を入力した後に停止します。

切りの良いところで止めたかったけど上手く設定できなかった方など、この記事が皆さんのお役に立てば幸いです。

有料エリアには何も情報がありません
記事を評価してくれた方はサポートもお願いします

誰もが無料でWindows自動化を始め、生産性を向上し続けられるようにする」

ここから先は

15字

¥ 100

この記事が気に入ったらサポートをしてみませんか?