UWSCの関数からWin32APIを推測してみる

VBAでできませんか、という質問を見たので、推測を書き連ねる。



GETID/GETALLWIN/G_MOUSE_X/G_MOUSE_Y

EnumChildWindowsで良さそう。
ウインドウタイトルやクラス名の取得には、GetWindowText/GetClassName。
アクティブウインドウやポインタ位置からの取得では、
GetForegroundWindow/GetCursorPos/WindowromPointが必要。

CLKITEM

CLK_BACKは、PostMessageと思われる。
MSAAは知らない。
コントロールの探し方に工夫が必要。
移動は、低レベル関数を使いまわして。

CTRLWIN/ACW

基本は、ShowWindow。
ACWもあるしTopMost制御があるので、SetWindowPos。
Activateは、SetForegroundWindowか。
あとは、万能なPostMessage。

SENDSTR/GETSTR

通常は、SendMessage。
Clipboard系は、OpenClipboard/CloseClipboard/EmptyClipboard/SetClipboardData/GetClipboardDataに、
GlobalAlloc/GlobalFree/GlobalLock/GlobalUnlock/GlobalSizeと必要。
カレントのエディットボックスって、どうやって取得するのだろう?

STATUS

ST_TITLE/ST_CLASSは、GETIDでもやる。
GetWindowInfoにほとんどの条件がつまっている。
GetParent/GetWindowThreadProcessIdが必要。
ST_BUSY/ST_PATH/ST_WIN64は、まだ思いついてない。

PEEKCOLOR

GetWindowDC/GetPixel/ReleaseDCだね。
座標処理は前述。

KBD/MMV/BTN

SendInput。
GetSystemMetricsが必要かもしれない。
丁寧にやるなら、GetMessageExtraInfoやMapVirtualKeyが必要と思われる。
MOUSEORGの直接指定は、PostMessageだろうね。

備考

上記は全てざっと動作確認した。(いろいろ不備はあるけど)
Excel VBAにモジュールとして張ると、かなりUWSCライクなことができる。


でも、これの用途って、おそらくなんらかの手段でセキュリティの厳しいところにテキストとして持ち込んで、スクリプトを書く、ということでしょう?
それなら、.NETの方が良いと思われる。
「バイナリーはダメ。テキストだけ」だって?
ちっちっちっ、.NETにはもれなくコンパイラーがついているのです。
ソース(テキスト)があれば、コンパイルはし放題。
Powershellが入っている環境なら、ますます容易ですね。


え、サーバーだから.NET入ってない?
、、、なら、Officeも入ってないでしょう、、、。


良心が痛むかもしれなけど、ADODB.Streamが使える環境なら、WSHでバイナリーを作成できる。
→バイナリーをテキストにして持ち込んで、バイナリーに復旧可能。
上で書いたようなVBAモジュールを持ち込むというのは、それと同義ですけどね。


ADODB.Streamを制限されると、流石に困るかな。