4

VBscriptSendKeysが Unicode をサポートしていないことがわかりました。A-65 などの一部はサポートされていますが、ヘブライ語のアルファベットの Aleph (א) などの外国語の文字はサポートされていません。サポート範囲外の可能性があります。128+ の 10 進値の可能性があり、「?」が表示され、ASCII 範囲のみがサポートされます。

Windows XP を使用しているコンピューターで、ヘブライ文字を入力して表示できます。そのため、キャラクターの OS サポートがあり、セットアップされています。私のソースコードは、行以来、それを示しています

msgbox Chrw(1488)

Aleph 文字が表示されます。メモ帳と MS Word で表示しました。

認識できない文字に対して疑問符を送信しているように見えます。MS Word やメモ帳で文字の表示に問題があった場合 (たとえば、フォントが文字をサポートしていない場合)、疑問符ではなくボックスが表示されると思います。確かにとにかくメモ帳の場合。だから、それは問題のように見えますSendKeys。何か案は?回避策はありますか?

Dim objShell

Set objShell = CreateObject("WScript.Shell")

objShell.Run "notepad" ''#can change to winword

Wscript.Sleep 2000

msgbox Chrw(1488)  ''#aleph

objShell.SendKeys ("abc" & ChrW(1488) & "abc")  ''#bang, it displays a ? instead of an aleph

WScript.Quit
4

3 に答える 3

4

VBscriptSendKeysが Unicode をサポートしていないというあなたの推測はおそらく正しいでしょう。


によって実行された Windows API 関数呼び出しの監視SendKeys(英語の米国、ロシア語、およびヘブライ語のキーボードを備えたロシア語 Windows XP でAPI MonitorおよびBlade API MonitorSendKeysを使用) は、 Unicode に対応していないことを示しています。具体的にSendKeysは、次のことを行います。

  1. 関数の ANSI (Unicode ではない) バージョンを呼び出しVkKeyScanます — VkKeyScanA— 送信する文字の仮想キー コードを取得します。この関数は文字をVK_SHIFT+VK_OEM_2に変換するため、処理前または処理中に Aleph 文字が別の ANSI 文字に変換されるようです。

  2. Aleph 文字の代わりに+キーストロークSendInputを送信する関数を呼び出します。VK_SHIFTVK_OEM_2

ここでの主な問題は、Unicode 文字を送信するにはSendInput、フラグを使用して呼び出す必要がKEYEVENTF_UNICODEあり、問題の文字を関数パラメーターを介して渡す必要があることです — 実験では、このどれも当てはまらないことが示されています。また、 Unicode 文字の場合は、それ自体が Unicode 入力を処理VkKeyScanするため、実際には必要ありません。SendInput


このため、VBScript からアプリケーションに Unicode 入力を送信する唯一の方法は、SendInput適切に使用するカスタム ユーティリティまたは COM コンポーネントを作成し、スクリプトからこのユーティリティ/コンポーネントを呼び出すことです。(VBScript には、Windows API にアクセスするためのネイティブな手段がありません。)

barlop によって追加されたメモ

vbscript の obj.SendKeys(..) は Unicode に対応していませんが、VB の SendKeys.Send(..) は対応しています。

于 2010-07-09T18:34:49.353 に答える
-2

メモ帳でフォントをMicrosoft Sans Serifに設定してみてください。

于 2010-07-08T08:35:57.950 に答える