「UWSC」カテゴリーアーカイブ

UWSCでリストを読み込んで処理させる

例 エクセルで抽出して2列のデータを読み込む
エクセルで2列を選択して、テキストエディタへ貼り付けるとTAB区切りとなる

リストファイル読み込み例
list_file = “c:\work\list.txt”

ID = FOPEN(list_file,F_READ OR F_TAB) // F_TAB指定しない時はカンマ区切り

n_end = FGET(ID,F_LINECOUNT) // 最終行を取得
n = 0
// **** ループ ****
WHILE(n < n_end) // 最終行まで繰り返す
n = n + 1
str = FGET(ID,n,1) // 1列目読み込み
SENDSTR(0,str) // クリップボードへセット

// 位置を選択した後、貼り付ける
// 貼り付け位置は記録機能で調べる
BTN(LEFT,CLICK,**,**,**)
SCKEY(0,VK_CTRL,V)

str = FGET(ID,n,2) // 2列目読み込み
SENDSTR(0,str) // クリップボードへセット

// 位置を選択した後、貼り付ける
// 貼り付け位置は記録機能で調べる
BTN(LEFT,CLICK,**,**,**)
SCKEY(0,VK_CTRL,V)

// 処理記述

WEND // WHILEループ

UWSCでフォームへデータを記入

SENDSTRでテキストを記入できるフォームと出来ない場合があり、KBDでタイプさせる手もあるが、クリップボードを使うと汎用性が高い


str = “記入したい文字”
// IDを0指定にするとクリップボードへセット
SENDSTR(0,str)

記録で貼り付けたい位置を選択して調べる

BTN(LEFT,CLICK,441,484,300)

位置を選択後、貼り付け
SCKEY(0,VK_CTRL,V) // ペースト

UWSCでTaskkill

// Close操作の例
ID = GETID(“Chrome”)
IFB ID <> -1 Then // Chromeが表示されている時
CTRLWIN(GETID(“Chrome”),CLOSE)
ENDIF

// taskkillですべてのプロセス指定(子プロセスも含む必要があるときは /T も指定)
ID = GETID(“Chrome”)
IFB ID <> -1 Then // Chromeが表示されている時
DosCmd(“taskkill /F /IM <#DBL>CHROME.EXE<#DBL>”,TRUE,FALSE)
ENDIF

SLEEP(1)

ID = GETID(“Edge”)
IFB ID <> -1 Then // Edgeが表示されている時
DosCmd(“taskkill /F /IM <#DBL>msedge.EXE<#DBL> /T”,TRUE,FALSE)
ENDIF

UWSCを再起動

スケジュールで実行しているスクリプトを修正したら、記述ミスでエラーメッセージが表示されて以降のスケジュールも停止した。

スケジュール設定で、別プロセスで実行にチェックを入れておけば、エラーメッセージが出たスクリプトは、そのままで次のスケジュールが実行できる

エラーメッセージを解除するために、UWSCを再起動する

DosCmd(“uwsc_restart1.bat”) // 再起動batを実行

uwsc_restart1.batは、
@echo off
start “” “C:\ProgramData\tools\uwsc_restart2.bat”

uwsc_restart2.batは
@echo off
ping localhost -n 3 > nul
taskkill /im UWSC.exe /F /T

ping localhost -n 5 > nul
start “” C:\ProgramData\tools\uwsc.exe
exit

※UWSCの特徴として、UWSCスクリプトが終了(本体を終了も同様)させると、実行中のものも終わってしまうことがある

uwsc_restart1.batのみで、uwsc_restart2.batの内容を実行すると、taskkill 以降の処理は実行されずに、batファイルが終わってしまう

そこで、startで別にbatファイルを実行すると、uwsc_restart1.batが終わっても、uwsc_restart2.batは独立して実行されるので、うまくいく

※それぞれのスクリプトは別プロセスで実行すること

この様なBATファイルを使わなくても、UWSCには、POFF( コマンド )という便利な機能があるが、別プロセスで実行しても、該当プロセス以外は対応できない。

同一プロセスだとエラーメッセージにOKをクリックしないと停止したままなので、上記のBATファイルでの処理が必要

// UWSC再起動
POFF(P_UWSC_REEXEC)
// UWSC再起動 スクリプト再実行
POFF(P_UWSC_REEXEC,TRUE)

SOUNDで音を鳴らす時の注意

SOUND(“BEEP”)やSOUND(“音ファイル名.wav”),SOUND(“音ファイル名.mp3”)でuwscは音を鳴らせるが、デフォルトは処理終了を待たないFalseになっている

その為、次の処理でMSGBOXの様に待機コマンドが無いと、再生前にUWSC自体が終了してしまい、再生が止まるので注意

ほとんど場合、TRUE指定が必要

MSGBOXで、OKをクリックするまで、再生が続き、OKをクリックするとUWSCが終了するので、再生が止まることが確認できる例

fileName = “アラーム.wav”
SOUND(fileName)

MSGBOX(“OK”)

ショートカットキーで操作

ショートカットキーを登録して操作できるアプリで有用

例 タスクトレイ格納を通常表示に戻して、キー登録したアプリ終了のショートカットキーを操作

ID = GETID(“Tablacus Explorer”)
IFB ID <> -1 Then
CTRLWIN(id, NORMAL)
ENDIF

ACW(GETID(“Tablacus Explorer”))

// 操作中フォルダでタイトルが変化する為か、ID指定で動作しない場合があるので、アクティブにした後で、ID0指定でキーを送る
SCKEY(0, VK_CTRL,VK_ALT,E) // ALT+CTRL+Eで終了

// SCKEY(0,VK_ALT,VK_F4) // ALT+F4キー操作で強制終了

状態が確認出来るまで繰り返す

<条件>

アプリケーションにメニュー画面が通常とコンパクトの表示があり、起動時にコンパクト設定が無い為、スタートアップでコンパクトボタンをクリックする

メニュー画面が表示されても、完全に起動するまで、操作できない

コンパクト表示に出来るまで、繰り返す

// メインメニュー表示待ち
While GETID(“メインメニュー (フル表示)”) = -1
SLEEP(1)
WEnd

// 画像ボタンの為、アドレス指定でコンパクトクリック
// アドレスは記録モードで操作して、調べる
ACW(GETID(“メインメニュー (フル表示)”)
BTN(LEFT,CLICK,800,150,0)

// 実際には、操作可能になるタイミングが不定でSLEEPを入れて繰り返しが必要

// コンパクト表示するまで繰り返し タイトルの違いで識別
// コンパクト表示では、”メインメニュー”にタイトルが変化する
While STATUS( GETID(“メインメニュー”), ST_TITLE ) <> “メインメニュー”
ACW”メインメニュー (フル表示)”)
BTN(LEFT,CLICK,800,150,0)
SLEEP(5)
WEnd

空白を含むパスを記述

<#DBL>記述するとダブルクォーテーションに置き換えられる

ID = GETID(“スライド”)
IFB ID <> -1 Then
DosCmd(“taskkill /F /IM <#DBL>POWERPNT.EXE<#DBL> /T”,TRUE,FALSE)
ENDIF

APP = “C:\Program Files\FastCopy\fcp.exe /cmd=sync /acl=FALSE /force_close /error_stop=FALSE /skip_empty_dir=FALSE /Exclude=<#DBL>Thumbs.db;desktop.ini;<#DBL>  <#DBL>” + “パスを記述” + “\*.ppsx<#DBL> /to=<#DBL>” + “パスを記述” + “<#DBL>”

DosCmd(APP,FALSE,FALSE) // 待つ、プロンプト非表示