LoginSignup
0
2

UWSCRの組み込み関数:システム系

Last updated at Posted at 2023-12-18

システム系組み込み関数の変更および新規追加された関数についての解説です。

変更点

kindofos

戻り値に対応した定数を新たに定義しました。

定数
OS_WIN2000 12
OS_WINXP 13
OS_WINSRV2003 14
OS_WINSRV2003R2 15
OS_WINVISTA 20
OS_WINSRV2008 21
OS_WIN7 22
OS_WINSRV2008R2 27
OS_WIN8 23
OS_WINSRV2012 24
OS_WIN81 25
OS_WINSRV2012R2 26
OS_WIN10 30
OS_WINSRV2016 31
OS_WIN11 32

とはいえUWSCRがWindows 10以降でしか動作しないので大半は無意味となりました。
一応Windows 11の判定もしてはいますが、正しく判定されるかどうかはわかりません。またServer 2016よりあとのServer OSには対応していません。

加えて、OS情報を得るための数値引数に対応した定数も定義しています。

定数 解説
OSVER_MAJOR OSのメジャーバージョンを返す
OSVER_MINOR OSのマイナーバージョンを返す
OSVER_BUILD OSのビルド番号を返す
OSVER_PLATFORM OSのプラットフォームIDを返す
筆者環境による例
print kindofos(OSVER_MAJOR)    // 10
print kindofos(OSVER_MINOR)    // 0
print kindofos(OSVER_BUILD)    // 19045
print kindofos(OSVER_PLATFORM) // 2

これはUWSCの隠し機能を正式に採用したものです。

powershell

第四引数をTRUEにすることで$PROFILEを読み込まずに実行(-NoProfile)できるようになりました。$PROFILEの読み込みが原因でエラーが発生する場合はこれを利用してください。デフォルトはFALSEです。

cmd = "ls *.txt"
print powershell(cmd,,,TRUE) // $PROFILEを読み込まない

0.14.0で動作しません

base64エンコード処理に問題がありpowershell関数が正常に動作していませんでした。この問題は0.15.0で修正されます。

sound

BEEP指定によるビープ音再生が廃止されました。
また、現時点では再生デバイスの指定ができません。(制限事項)

getkeystate

UWSCではTGL_KANALOCKTGL_IMEが正常に動作していませんでした。これはUWSCがウィンドウ毎のIME状態取得に対応していなかったためです。UWSCRは第二引数にidを指定することでこれらの状態を正確に取得できるようになりました。idが未指定の場合はアクティブウィンドウを対象とします。

id = getid("qiita")
print getkeystate(TGL_KANALOCK, id)
print getkeystate(TGL_IME, id)

sethotkey

UWSCではsethotkeyに関数名を渡していましたが、UWSCRでは関数名に加えてユーザー定義関数自体を渡せるようになりました。

uwsc
sethotkey(VK_A, , "proc")

procedure proc()
    print HOTKEY_VK
fend
uwscr
procedure proc()
    print HOTKEY_VK
fend

// 関数名
sethotkey(VK_A, , "proc")
// 関数自体を渡す
sethotkey(VK_B, , proc)

poff

poff(P_UWSC_REEXEC)で第二引数を省略した場合のデフォルト値がTRUEになりました。

gettime

基準日時に対する補正値の単位指定と、戻り値をミリ秒にするオプションが追加されました。単位は第三引数に定数で指定します。デフォルトはG_OFFSET_DAYSです

定数 補正値の単位
G_OFFSET_DAYS 日数
G_OFFSET_HOURS 時間
G_OFFSET_MINUTES
G_OFFSET_SECONDS
G_OFFSET_MILLIS ミリ秒
datetime = "2023/12/25 12:25:25"

// 1日進める
sec = gettime(1, datetime, G_OFFSET_DAYS)
print format(sec, "%+") // 2023-12-26T12:25:25+09:00

// 2時間戻す
sec = gettime(-2, datetime, G_OFFSET_HOURS)
print format(sec, "%+") // 2023-12-25T10:25:25+09:00

// 35分進める
sec = gettime(35, datetime, G_OFFSET_MINUTES)
print format(sec, "%+") // 2023-12-25T13:00:25+09:00

// 25秒戻す
sec = gettime(-25, datetime, G_OFFSET_SECONDS)
print format(sec, "%+") // 2023-12-25T12:25:00+09:00


// 123ミリ秒進める
// 第四引数TRUEでミリ秒を返す
milli = gettime(123, datetime, G_OFFSET_MILLIS, TRUE)
print format(milli, "%+", TRUE) // 2023-12-25T12:25:25.123+09:00

また、G_TIME_WWと比較するための曜日を示す定数が追加されました。

定数 曜日
G_WEEKDAY_SUN
G_WEEKDAY_MON
G_WEEKDAY_TUE
G_WEEKDAY_WED
G_WEEKDAY_THU
G_WEEKDAY_FRI
G_WEEKDAY_SAT

新規

env

環境変数を展開します。

print env("ProgramFiles") // C:\Program Files

uwscr.exeのプロセス環境変数から読み取ります。

wmi

WQLを指定してWMIから情報を得ます。結果はUObject配列として返ります

wql = 'select name, processid, commandline from Win32_Process where name = "uwscr.exe"'
for process in wmi(wql)
    print tojson(process, TRUE)
next

shexec

ShellExecuteを行います。「ファイル名を指定して実行」やstartコマンドのように動作します。execとは異なりidは返しません。

// execと異なりmsedgeと入れるだけでMSEdgeが起動できる
shexec("msedge", "http://example.com")

pwsh

powershell関数がWindows PowerShellを実行するのに対し、pwsh関数はPowerShell (Core)を実行します。

PowerShell (Core) がインストールされていない場合は動作しません。

cmd = "ls *.txt"
print pwsh(cmd,,,TRUE)

0.14.0で動作しません

base64エンコード処理に問題がありpwsh関数が正常に動作していませんでした。この問題は0.15.0で修正されます。

beep

ビープ音を再生するための関数です。sound関数から機能が切り離されました。周波数や再生する時間、繰り返し再生の回数を指定できます。

// 1800ヘルツで0.4秒間の再生を3回繰り返す
beep(400, 1800, 3)
バックグラウンド再生
thread beep(200, 2000, 5)
msgbox("threadでビープ音をバックグラウンド再生")
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2