質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VirtualBox

VirtualBoxは、現在米オラクル社が開発している、 x86仮想化ソフトウェア・パッケージの一つです。

WSH

WSH(Windows Script Host)とは、Windows上でテキストファイルに記述したJavaScriptやVBScriptなどのスクリプトを実行するホスト環境のことです。COMを通じたレジストリ操作やWMIへのアクセスが可能で、複雑な処理も行うことができます。

Q&A

解決済

1回答

1152閲覧

VirtualBoxのゲストOS側ウインドゥを、SendKeysで制御できない

mmemxi

総合スコア9

VirtualBox

VirtualBoxは、現在米オラクル社が開発している、 x86仮想化ソフトウェア・パッケージの一つです。

WSH

WSH(Windows Script Host)とは、Windows上でテキストファイルに記述したJavaScriptやVBScriptなどのスクリプトを実行するホスト環境のことです。COMを通じたレジストリ操作やWMIへのアクセスが可能で、複雑な処理も行うことができます。

0グッド

0クリップ

投稿2018/08/18 09:04

Windows10 ProでVirtualbox5.2.16を利用しています。
ゲストOSを起動した後、ゲストOS側のウインドゥに対して、WSHからSendKeysを使って制御を行ないたいのですがうまくいきません。
書き方が間違っているのでしょうか。それとも、他の方法でないと動かないのでしょうか。
教えてください。

前提・実現したいこと

実現したいこと:
ゲストOS側のウインドゥに対するホストキー(例えばHost+Fでフル画面化)を自動的に押してやりたい

発生している問題・エラーメッセージ

送ったキーストロークが、「ゲストOSを開いているウインドゥ」ではなく「ゲストOS」に渡されているらしく、ホストキーの操作として認識されない
(例えばHost+Fでフル画面化したいのに、ゲストOS側で「Alt+F」が押されたとしか認識していない様子)

該当のソースコード

WSH(JScript)で以下のように書いています。
(※HostキーはAltキーに割り当てています)

WshShell=new ActiveXObject("WScript.Shell");
WshShell.AppActivate("ゲストOS");
WScript.Sleep(1000);
WshShell.SendKeys("%f");

試したこと

上記のソースコードで、ゲストOS側のウインドゥはきちんとアクティブになっています。
その状態で、実際にキーボードでAlt+Fを押すと、フル画面化されます。
なお、コマンドラインからvbmanage.exeでkeyboardputscancodeオプションを使い、キーストロークを直接送信してみることもしましたが、同様に「ゲストOSの中で入力された」動作になってしまうだけで、「ゲストOSのウインドゥに対するキーストローク」にはなってくれませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

VirtualBoxは使ったこと無いですが、VMwareでは、ウィンドウをアクティブにしただけではゲスト内のウィンドウはイベント受け取れず、一度ウィンドウ内部をマウスクリックする必要があります。
同じようなことになっているのではないでしょうか。

VirtualBoxがアクティブでない状態で、ALT-TabなどでVirtualBoxをアクティブにした直後の状態で、キーを押してゲストOSにイベントが送られますか?

投稿2018/08/18 12:49

otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mmemxi

2018/08/18 14:41

回答ありがとうございます。 上記のWSHを実行した直後、ゲストOSのウインドゥはアクティブになっています。 スクリプト実行直後に(何も操作せずそのまま)Alt+Fを押すと、きちんとフル画面化されます。つまり、該当するウインドゥはアクティブになっているわけです。 ところが、スクリプト内にあるSendKeysは何も動作していないわけでして… 問題は、該当ウインドゥがアクティブになっているのに (1)キー操作によるAlt+F (2)WSHのSendKeysによるAlt+F が同じ動きをしない、という点です。 こうなると、ゲストOSのウインドゥはSendKeysによるキー操作とは「別の方法」で(もっとハードウェア寄りの方法で)キー入力を受け取っていることになるのでは…と思った次第です。
otn

2018/08/18 14:59

回答を読んでもらっていないのでしょうか? 質問内容を繰り返し書かれても、これ以上書くことが無いです。
imihito

2018/08/18 15:18

横から失礼します。 otnさんの回答はウィンドウ内のゲストOSにキーを送る場合の話で mmemxiさんの質問はホストOSのウィンドウにキーを送る話(ゲストOSには送りたくない)、 と話が食い違っている気がしますがどうでしょうか?
otn

2018/08/18 15:36 編集

> ゲストOS側のウインドゥに対して、WSHからSendKeysを使って制御を行ないたい と、二人とも、ゲストOS内のウィンドウへ送る話だと思いますか?
otn

2018/08/18 15:38

その上で、「WSHだと無理ではないか。UWSCのようなツールが必要では?」というところに持って行きたいのですが、そこまで話が行かないで停滞しています。
imihito

2018/08/18 15:45

申し訳ありません。私の読み取りミスです。 しゃしゃり出てすみませんでした。
mmemxi

2018/08/18 17:06

>otnさん 回答が言葉足らずだったようで申し訳ありません。 >VirtualBoxがアクティブでない状態で、ALT-TabなどでVirtualBoxをアクティブにした直後の状態で、キーを押してゲストOSにイベントが送られますか? とのことですが、これに対する返答は「ホットキーだけ挙動が異なる」です。 VirtualBoxのウインドゥがアクティブである前提で、 (1)キーボードによる通常キー入力→ゲストOSが受け取る (2)キーボードによるホットキー入力→ゲストOSのウインドゥが受け取る (3)SendKeysによる通常キー入力→ゲストOSが受け取る (4)SendKeysによるホットキー入力→ゲストOSが受け取る というのが現状です。 (4)の動作を(2)と同じにしたい。私の意図は理解して頂いていることと思います。 UWSCによるキー操作のエミュレーションのような方法なら、WSHのSendKeysとは本質が違うので、試してみる価値がありそうだということでしょうか? それは試みていませんでしたので、検討してみます。
otn

2018/08/18 21:30

そうですか。VMwareと同じでは無いですね。 VMwareだと、ゲストOS内のウィンドウにキー入力を送るためには、ゲストOSのALT+Tabによるアクティブ化だけでなく、「ゲストOS内でクリック」が必須なので、UWSCでクリックをすれば良いかと思ったのですが、そういうことでは無さそうです。 失礼しました。
mmemxi

2018/08/21 05:49

いろいろ試行錯誤してみた結果、UWSCで「ゲストOSのウインドゥのタイトルバー」をクリックしてやり、その上でキー入力を送るとホットキーが動作しました。 「ゲストOSのウインドゥ内部」をクリックすると、キーボードやマウスがゲストOS側に取り込まれてしまうので(マウス統合)結局「ゲストOS内で」のキー操作になってしまうのですが、「タイトルバー」をクリックするのがミソだったようですね。 VMWareでの挙動がヒントになりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問