エミュレーション文字列送信ハイブリッド進化版
VBSのSendKeysで、エミュレーションや文字列送信のテリトリー外にリーチできるという情報です。
ほんの少しですが、スクリプトの加工を含みます。
サポート外で自己責任になることを納得したうえで、興味本位か冷やかし程度でお試しいただけると幸いです。
長々と書いてますが、ミニマムで作り方の2.まで読めば試せます。
この投稿をきっかけに調べました。
https://winactor.com/questions/question/エミュレーション時にenterキーの区別をつける/
ここの伏線を回収する格好でもあります。
https://winactor.com/questions/question/でコピーした文字をexcelにペーストする際、貼り付/
もしかしたらここにも応用が利くのかも。
作り方
- プチライブラリをベースにする
Excelファイルの値のみペーストするライブラリ
https://winactor.biz/library/2018/11/09_417.html
実際のライブラリ名:Excel操作(値のみペースト(ショートカット)))
※ 閉じ括弧が1つ余分みたい↑
-
スクリプトのキーボード操作部分を可変にする
修正前 "%HVV"
修正後 !SendKeys!
-
ライブラリ名の先頭に「【改】SendKeys -」を付けておく(オプション)
→ メンテの引き継ぎとかで便利
SendKeysに指定するキーボード操作部分の書式は、リファレンスを参照
https://www.google.com/search?q=VBS+SendKeys
SendKeys ステートメント (VBA) | Microsoft Docs
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/sendkeys-statement
- 良さげなリファレンスサイトの情報を[注釈]タブに載せておく(オプション)
→ それらしい雰囲気を醸し出せる
ここも網羅的に解説してくれてる
第5回 WshShellオブジェクトの詳細(1) (4/4):Windows管理者のためのWindows Script Host入門 - @IT
https://www.atmarkit.co.jp/ait/articles/0407/08/news101_4.html
注意点
- アプリによっては効かないかも
winapi - アプリケーションがVBS SendKeysを無視する
https://stackoverrun.com/ja/q/3901246
→ Caps LockをOFFにしておくことで回避した模様
- キーのマッピングをカスタマイズしてる場合は、その考慮も必要
1063-0 | SendKeysが効かないものと効くもの - VB初心者友の会 - VBスクリプト掲示板過去ログ
http://www.gizcollabo.jp/vbtomo/log/archive/vbscript_1063_0.html
高速化
- [設定]タブ内でSendKeys1、SendKeys2、、みたいに分けておけば、人は読みやすい
Mr. Magic氏によると、まとめて送ったほうが速いとのこと(順当)
→ 上の修正後でおっけーということ
vbscript - sendKeysをより速くする
https://stackoverrun.com/ja/q/12427027
- 場合によっては、タイミングの調整を要する
→ 適宜ライブラリを直列で並べる
VBSで起動中プロセスにSendkeys
https://teratail.com/questions/107114
テスト内容
- メモ帳
- Enter送信
結果の想定
- 改行される
結果
- 【改】SendKeys - Excel操作(値のみペースト(ショートカット)))
◎ 想定通りに改行された
◎ 一括処理(1行内で順次処理)・・・▲ 1行に繋げて書くと人は読みにくい
◎ 考え得るキーにはすべて対応している模様
★ 日本語(2バイト文字)送信は別途の工夫が必要っぽい ← 最強版へのカギ
- エミュレーション(Enter↓/Enter↑)
◎ 想定通りに改行された
▲ 順次処理
〇 118キーに対応している模様
▲ 日本語の送信にはクリップボードあたりの組み合わせが必要
- エミュレーションで文字送信
× Enterは送信できなかった
※ メモ帳から複数の改行をコピーして送信文字列に張り付けてみたものの、実行するとスペースっぽいものが貼り付いた
※ サクラエディタでも試し、貼り付いたのはスペースと特定
▲ 半角の英数字のみ対応 → 結果的にスペースは送信できた
× 日本語の送信には使えない
- 文字列送信
▲ リターンキー送信をオンにしても、値⇒空欄のままでは改行されず
※ 長い文字列を指定したら、10文字毎の改行になった(10文字毎にリターンキーが送信された)
文字列:値⇒ああああああああああああああああああああああ(22文字)
文字列:値⇒1234567890123456789012(22文字)
◎ 日本語を送信できる
▲ リターンキーとうまく付き合うことが必要
★VBS版SendKeysの課題
- VBAなら日本語文字列もSendKeysで送信できるという情報
VBA 【SendKeys】キーを押したことにする | E-VBA
https://e-vba.com/sendkeys/
- VBSでは日本語(≒2バイト文字)だとIMEがオンになり、変換可能な状態で文字化けって送信された
※ 成功イメージは「文字列送信」
IMEにリーチできてて、何かを送信できてるということは、望みがあるということ
- Clipコマンドを併用して、Ctrl+Vで貼り付ければ文字化けしないという情報
WSHで文字化けさせずにSendKeysで日本語を貼り付ける - Corredor
https://neos21.hatenablog.com/entry/2016/07/10/000000
- 【改】SendKeys - Excel操作(値のみペースト(ショートカット)))とのハイブリットで最強を目指せそう
今日は力尽き、、
ハイブリッド化に成功次第、続報予定
最近ツワモノさんが増えてるので、きっと製作委員会式でクリアできそう
参考
- 標準ライブラリの「Excel操作(値のみペースト)」は、Excelどうしのコピペで使用可能
- プチライブラリとハイブリッドのライブラリにアップデートされれば、使い分ける必要がなくなって、多くのユーザーがハッピーになれそう