はじめに
この記事は、産技品川 Advent Calendar 2025 19日目の記事です。
産技品川の人(在校生、OB/OG、教員など)はぜひ参加してください!!
https://qiita.com/advent-calendar/2025/tmcit_s
タイトルにもある通り、自分がUWSCを触ってみて面白かったところやできることを語ろうと思う。
自堕落な生活を送っていた自分が初めて自らの手で一から言語の学習に取り組んでみて躓いたことや助かったことも書いて行けたらなと思っています。よろしくお願いします。
UWSCについて
UWSCは無料版と有料版がありますが、今回自分は無料版で遊んでます。フリー版はvectorでインストールできます。
vector
UWSCは独自の言語ではありますが、CやC++をマスターしていればすぐに飲み込める程度の言語になっているらしいです。
自分はCやC++をマスターしていないので全然わかりませんでした。
参考にしたサイト
UWSC辞典
基本的にこのサイトを参考にしながら作りました。それぞれの関数でその関数を用いたスクリプトが載せられていたりして便利でした。
UWSCで作ってみたもの
UWSCはそこまで高度な操作ができるマクロではないので、試しにdiscordで予約投稿できるスクリプトを書いてみました。
DIM YOYAKU = STRCONV(INPUT("予約したい文字列を入力してください。"),SC_UPPERCASE)
DIM SEC = INPUT("何秒後に入力しますか?")
MSGBOX(YOYAKU)
SPLIT(YOYAKU, "",FALSE, FALSE)
DIM ID = GETID("Discord")
ACW(ID, 0, 0)
BTN(LEFT, CLICK, G_SCREEN_W / 3, G_SCREEN_H /10,1000)
SLEEP(SEC)
For INDEX IN YOYAKU
KBD(ASC(INDEX),CLICK)
Next
KBD(VK_RETURN,CLICK,1000)
このスクリプト、実は半角英字の入力で躓いています。aと入力しようとすると1と入力されてしまいます。これはASC関数でKBDにデータを与えているためです。ASCは引数から文字コードに変換する関数です。詳しくは以下リンクから確認してください。
ASC
問題は、KBDにデータを与える際に、仮想キーとaを変換しようとするとなぜか1が入力されてしまうことです。これはKBDに与えるデータが仮想キーコードもしくはUNICODEで入力できるためです。ASCで文字コードに変換しているのですが、これは16進数で定義されているのですが、aは16進数のUNICODEでは61で、10進数で97になります。しかし、UWSCの仮想キーコードでは97はキーコードがキーパッドの1に対応するため今回の問題はおきました。しかもなぜか大文字のAを入力しようとすると小文字になったりならなかったりでかなり苦痛でした。しかし、これは入力した状態がCapsの有無でした。
この問題を解決したのはSTRCONV関数です。STRCONV関数で小文字を大文字に変換することで解決しました。なので英字を入力するとき、状態は半角全角、CAPSLOCKがかかっているかどうかになりますね。
大文字小文字の区別をして予約投稿する実装を考えてみたのですが、思いつきませんでした。大文字小文字を区別する関数がないか、調べてみましたがなかったので自分で実装するしかなさそうですがそんな実力もないので諦めました。STRCONVが大文字小文字を認識できているので、リストの文字列の大文字を認識してそのインデックスのループ回だけshiftを押し込むみたいな操作でできるのかなと考えてるのですがいまいち想像がつかないし無知を晒すだけになりそうです。
予約文字列にひらがな、カタカナ、半角カタカナ、漢字は対応しています。
テストケースとして以下の文章を試してみましたが、すべて問題なく入力できました。
・こんにちは
・お疲れ様
・ハイ
・イイエ
今回、実装をサボっているのですが、英字をしっかり英字として送信するための動作としGETKEYSTATE関数を使った方がよさそうです。トグルキーの状態を確認してくれる関数になります。この関数を用いてトグルキーの状態を確認して一律で半角にした方が幸せです。
今回サボったことについて
UWSCの本体は実はChkImgX関数です。これは公式に実装されている関数ではありません。公式に実装されているCHKIMGが完全に一致した画像でないと見つけてくれないため生まれた関数と言っていいでしょう。以下リンクでダウンロードの方法など書かれてます。
ChkImgX
これは読み込んだ画像を検索してくれるというものになります。完全一致している必要はなく、指定した割合で適合していれば見つけてくれます。
今回作成した簡素なスクリプトはもともとChkImgXを利用してメッセージボックスの座標を特定してその座標をクリックするという実装を予定していたのですが、いまいちChkImgXで画像一致の割合を下げてみても認識してもらえなかったので諦めました。
あとがき
UWSCに出会ったのは小学生だか中学生のころにソシャゲで自動周回マクロを作成、販売している動画に出会ったことがきっかけでした。ゲームが好きだったのでそれを目指してUWSCに触ってみたこともありましたが、昔は知識がなさ過ぎて諦めましたね。今回アドベントカレンダーに参加してその話題作りとして触れてみましたが、改めて、いつもながらに自分の惰性を自覚しました。それでも触ってみて、学習してみて面白いと感じたのである程度継続的に触りたいと考えています。
昔は利用規約とかそういう概念が欠如していたので何も考えずに「マクロ買うのは嫌だから作ってみよう」みたいな気持ちでUWSCに触ろうとした記憶がありますが、やる気も知識もなかったので成功しませんでした。今となってはサードパーティー製のソフトを使うのは利用規約で禁止されているゲームがほとんどというか100%だと思うので自分は現在作る気がありませんが。
とりあえずこれで終わりです。読んでいただきありがとうございました。