日記

UWSCで変数に入っている数字をKBD関数を使って送信する方法

UWSCで変数に入っている数字をKBD関数を使って送信する方法

詰将棋動画やWordPressで解説記事のサムネイルにはちょっとしたこだわりがあって、問題番号ごとに図面を変えています。
前は編集が面倒だからと全部同じにしていたのですが、いざやってみたら違う方が見やすいなぁと感じました。

局面図をインポートしたり、サイズを変更したりするのにUWSCを使って自動化しています。
ところが、問題番号の編集がなかなかうまくいきません。
通常であれば、文字列を送信するのに「SENDSTR関数」を使いますが、私の使っているドローソフトで上手く指定する方法が分かりませんでした。
「KBD関数」でひとつひとつ仮想キーを指定すれば入力できることは分かっていたものの、変数に入っている数字を送るにはどうしたらよいのか?

ちょっとした発想の転換で出来たので、忘れないうちにまとめてみました。
 

変数の内容を「KBD関数」で送るには?

数字の仮想キーを配列に入れるとできます。
変数内の数値を桁ごとの取得し、添字に使うことで仮想キーを指定します。

Dim VK_NumKey[10]=VK_NUMPAD0,VK_NUMPAD1,VK_NUMPAD2,VK_NUMPAD3,VK_NUMPAD4,VK_NUMPAD5,VK_NUMPAD6,VK_NUMPAD7,VK_NUMPAD8,VK_NUMPAD9
DIM I = INPUT("3桁までの数字を入力してください?")
 
// 【入力したい位置をクリックする命令を入れる】
 
//  1の位取得
DIM IntOnesPlace = I MOD 10
 
// 10の位取得
DIM IntTensPlace = INT(I / 10) MOD 10
 
//100の位取得
DIM IntHundredsPlace = INT(I / 100) MOD 10 
 
//100の位が1以上ならキーを押す
IFB IntHundredsPlace > 0 Then   
    KBD(VK_NumKey[IntHundredsPlace])
    KBD(VK_NumKey[IntTensPlace])
// 10の位が1以上なら1キーを押す
ELSEIF IntTensPlace > 0 Then
    KBD(VK_NumKey[IntTensPlace])
ENDIF
KBD(VK_NumKey[IntOnesPlace])  //  1の位のキーを押す

 

まとめ

ちょっとした知識を知っているか知らないかでガラッと変わるのが、プログラミングの難しいところであり、面白いところです。
これができずに断念したことが多くあり、あれもこれも効率化できると多くのアイディアが頭を駆け巡っています。

ちなみにUWSCによるサムネイル作成風景をタブレットで撮影してみたのがこちら↓

-日記
-, , , , , , , , ,