0

キーストロークをアプリケーションに送信することにより、レポート生成を自動化しようとしています。アプリを前面に出すことはできますが、SendKeysコマンドはすべて無視されます。何が問題ですか?次に何を試してみるべきですか?これは私のコードです:

    Const App_Title = "AccountRight Plus"  ' Window title
    Dim Wsh, win_title
    ' Create the WshShell object, which Run and AppActivate require.
    Set Wsh = WScript.CreateObject("WScript.Shell")
    Wsh.AppActivate App_Title
    WScript.Sleep 800
    Wsh.SendKeys "^i"
    WScript.Sleep 800
    Wsh.SendKeys "{TAB}"
    WScript.Sleep 800
    Wsh.SendKeys "{TAB}"
4

1 に答える 1

0

Caps Lock キーとストローク "^i" を混同している可能性があります。とにかく仮説だけ。そうでない場合は、少なくとも私を判断しないでください。

そこで、ここでテストできるコードを作成して、私の意味を説明しました。

Set Wsh = WScript.CreateObject("WScript.Shell")
Wsh.Run "notepad"
Wsh.AppActivate "Untitled - Notepad"
WScript.Sleep 100
Wsh.SendKeys "111..."
WScript.Sleep 100
Wsh.SendKeys "^a" ' (ctrl+a) Select All command

Caps Lock キーがオフの場合、上記のコードはすべてのテキストを選択しますが、Caps Lock がオンの場合、ストローク "^a" (または "^(a)") は失敗します。逆に、"^A" を使用すると、caps lock がオフになり失敗します。

VBScript で Caps Lock (またはその他のキー) の状態を取得する方法はありませんが、2 つの回避策が見つかりました。

  1. 少し奇妙な方法は、SendKeys コマンドを複製することです。

    Wsh.SendKeys "^a" : Wsh.SendKeys "^a"

  2. Caps Lock に事前にストロークを送信します。

    Wsh.SendKeys "{CAPSLOCK}" : Wsh.SendKeys "^a"

于 2013-01-21T11:45:59.557 に答える