• ベストアンサー

VBSで2バイト文字の送り方の質問です。

VBSで質問です。環境はXP Proです。 InputBoxで入力した日本語を他のアプリケーションに入力をしたいのですが、Sendkeysが2バイト文字は不可とわかり頓挫しました。sendkeys以外で使える技を教えてくださいませ。下記のコードを考えてましたが挫折しました。 -------------------------------------------------- Option Explicit Dim Name Name = InputBox("名前を入力してください") 'シェルを用意 Dim objWshShell Set objWshShell = Wscript.CreateObject("Wscript.Shell") 'notepad起動 objWshShell.Exec "notepad.exe" 'notepadアクティブにする objWshShell.AppActivate "objWshShell.Exec.ProcessID" wscript.sleep 1000 'notepadに名前を入力する objWshShell.Sendkeys Name ***sendkeys以外で文字を送る技を期待しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

こういうのはクリップボード経由でやります。 本ソースをどこで拾ったか忘れちゃいましたが、どっかに落ちてました。 以下のようなやりかたでたいてい問題ないと思います。 'ここから Dim Name Name = InputBox("名前を入力してください") Dim objWshShell Set objWshShell = Wscript.CreateObject("Wscript.Shell") objWshShell.Exec "notepad.exe" objWshShell.AppActivate "objWshShell.Exec.ProcessID" Set oClip=New Clipboard oClip.Text=Name objWshShell.SendKeys "^V~",true Class Clipboard Private oIE, bSuccess Private Sub Class_Initialize() Set oIE=CreateObject("InternetExplorer.Application") oIE.Navigate "about:blank" Do While oIE.Busy Or oIE.Document.ReadyState <> "complete" oIE.Sleep 10 Loop End Sub Private Sub Class_Terminate() oIE.Quit Set oIE=Nothing End Sub Public Default Property Get Text Text=oIE.Document.ParentWindow.clipboardData.getData("Text") End Property Public Property Let Text(sData) bSuccess=oIE.Document.ParentWindow.clipboardData.setData("Text", sData) End Property End Class ’ここまで 私の場合、よくファイルを開いたりする時につかっています。 objWshShell.SendKeys "%FO",true などしてから.SendKeys "^V~"したりして使います。

WHATSS
質問者

お礼

かなり核心にせまる内容ですがスクリプトを走らせると 「このWEBページがクリップボードへアクセスするのを許可しますか?」 と出て文字送りがされませんでした。 調べてみるとURLのバーにパスワードを読み取られたりするのを防ぐためにセキュリティがブロックしているようです。IEのセキュリティ設定は変更したくはないので、他の方法はございませんか? 申し訳ないのですがよろしくお願いします。

その他の回答 (2)

  • pulsa
  • ベストアンサー率57% (34/59)
回答No.3

なかなか難しいですね NO.1の方がおっしゃる通り >(受け取る側の)アプリ側で何らかの受け入れ窓口を作らない限りはsendkeyしかありません。 ですよ NO.2の方のクリップボード経由も常套手段ですが、IEから警告が出たとなると、おそらく他の方法もすべて引っ掛かります (我々が思い付く程度のセキュリティホールがあるとも思えないので) そもそも2バイト関係なく、sendkey自体だめだったんじゃ… もしこの「セキュリティを変更せずに、データの送受信」が可能であれば、 緊急度『高』のとんでもないセキュリティホールですよ と言うか、これまでどの穴塞いでたんだ?ってもんです VBSで開発されている位ですからお分かりですよね? 仮にsendkeyが使えるのであれば、俺が思い付くのは、文字コードをsendkeyで入力させるように指定する のはいかがでしょう? 設定がめんどくさそうですが(笑)

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.1

おそらく抜本的なところで仕様を変える必要が出てくるのでしょうが(本当にnotepadに送りたいわけではないんですよね?)、テキストファイルに書き出して、そのアプリ側で起動時にそのテキストファイルを読み込んで起動とか。 結局のところ、そのアプリ側で何らかの受け入れ窓口を作らない限りはsendkeyしかありません。 あるいはVBや.Netならsendkeyで日本語も送れるので、そちらで作られたDLLを利用したこういう手もあります。 http://blog.hirsky.com/changelog/2006-08-04-1.html

WHATSS
質問者

お礼

ありがとうございます。DLLを入れる方法はできないのです。 指摘のとおりnotepadに送りたいのではなく、他人のPCに自動で文字を送りたいアプリがあるのです。 DLLを他人のPCにインストールするわけにはいかないので申し訳ありませんがこの手は遠慮させていただきます。

関連するQ&A

  • メモ帳を、IME入力モード「あ」で開く構文について

    メモ帳を起動したとき、IMEの入力モードが、通常、半角英数「A」で開くようになっています。そのメモ帳を、IMEの入力モードが、ひらがな「あ」で開くようにしたいのですが、何度、試しても、うまくできません。 次の(1)に、(2)を、どこに、どのように、追加すればよいか、お教えください。 構文が、間違っておりましたら、ご指摘くださいますよう、お願いいたします。 よろしく、お願いいたします。 (1) Option Explicit Dim objWshShell Set objWshShell = WScript.CreateObject("WScript.Shell") objWshShell.Run "C:\Windows\System32\notepad.exe" Set objWshShell = Nothing (2) Sub IMEの初期入力モードをひらがなに設定する() If IMEStatus <> vbIMEModeHiragana Then SendKeys "{kana}", True End If End Sub

  • VBSを使用して、ブラウザにて表示されたメッセージボックスを消す方法

    VBSでブラウザを立ち上げ、IDとPWを入力しボタンをクリックするまではスクリプトを使って出来たのですが、ボタンを押した後にメッセージボックスが出てきてしまい、どうしてもそこで止まってしまいます。 ---- Set objWshShell = Wscript.CreateObject("Wscript.Shell") objWshShell.Sleep(1000) objWshShell.SendKeys("{ENTER}") ---- なども使ってみたのですが、うんともすんとも言わない・・・ Web上を探し回ったのですが全く見つからず、回答はほとんどが無理というものばかりで、本当に解決する方法は無いのでしょうか? 基本同じと思いますがVBAで解決ができるのであれば、そちらでもOKなのですが・・・

  • vbsでアプリを自動終了する

    notepadを起動せさ、「Hello」とキーボードより入力させてから自動的に終了させるvbsで作成しましたが、キーボード入力させるところまで成功しましたが、notepadを自動的に終了させる部分が成功しておりません。(イメージはユーザは何もせずnotepadを保存せずに自動終了させます。)下記のとおり 途中なのですがアドバイスをお願い致します。 ----------------------------------------------------------- Set objShell = WScript.CreateObject("WScript.Shell") objShell.Run "notepad.exe" WScript.Sleep 1000 objShell.SendKeys "hello ,"

  • VBSでファイルの自動保存

    vbs初心者です。自分なりに調べたのですが、うまくいかず、アドバスを願い致します。目的は、ファイルを自動保存したいのです。 以下のように記載して、最後にカレントデレクトリイに「test.txt」と名前をつけて保存させたいのです。よろしくお願い致します。 Set objShell = WScript.CreateObject("WScript.Shell") WScript.Sleep 1000 objShell.Run "notepad.exe" objShell.SendKeys "hello "  objShell.SendKeys "%{F4}" objShell.SendKeys "%y"  

  • VBSファイルを定期的に自動実行する方法

    毎日同時刻に下記のVBSファイルを自動実行したいと思います。 タスクスケジューラで実行すると download.exe は起動しますが 表示されたダイアログがアクティブ状態にならないため (タイトルバーが灰色のまま、タスクバーのボタンが点滅)、 文字入力ができないまま、処理が終了してしまいます。 1.ダイアログをアクティブにし、正常に処理を実行させるには   どのように記述すれば良いですか? 2.このVBSファイルをユーザーがログオフされている状態で   実行することは可能ですか? 恐れ入りますが、ご存じの方がおられましたら、ご教示願います。 <環境> Windows 2008 Server R2 standard (64ビット) <D:\aaa.vbs> Set objShell = WScript.CreateObject("WScript.Shell") 'ダウンロードEXEを実行 Set objExec = objShell.Exec("D:\download.exe") WScript.Sleep 1000 objShell.AppActivate(objExec.ProcessID) 'ファイルのダウンロード先を指定し、実行(ENTER) WScript.Sleep 1000 objShell.SendKeys "D:\data.txt~"

  • VBS で IE ウィンドウがアクティブにならない

    Inputbox で URL 文字列の一部を打ち込むと、IE オブジェクトがある場合には新規タブを作成し、当該サイトへアクセスするスクリプトを作っています。 後述がサンプルです。 スクリプトの最後にウィンドウをアクティブにするコードを入れているのですが、スクリプト自体はエラーなく完了するものの、IE ウィンドウをアクティブにすることができません。 Win10+IE11 を使っているのですが、何かコードが足りなかったりするのでしょうか。。。 それとも、Win10 + IE11 環境ではそもそも VBS で IE ウィンドウをアクティブにすることはできないのでしょうか。。。 アドバイスを下さると幸いです。 よろしくお願いいたします。 -------------------------------------------------------------------- Dim linknum dim objIE dim spurl linknum=Inputbox("リンク番号を入力してください。") spurl="https://xxxx" & linknum 'Shell.Applicationオブジェクトの作成 Set objShell = CreateObject("Shell.Application") 'IEウィンドウの個数をカウント lngCount = 0 For Each objWindow In objShell.Windows lngCount = lngCount + 1 Next With objShell.Windows 'IE オブジェクトがないときは、新しく作成する If lngCount = 0 Then .Item.Navigate2 spurl lngCount = lngCount + 1 objIE.FullScreen = True objIE.Visible = True 'IE オブジェクトがあるときは、タブを操作する(新しいタブを作成) Else .Item(lngCount - 1).Navigate2 spurl,&H800 IE ウィンドウをアクティブにする Set WshShell=Wscript.CreateObject("Wscript.Shell") WshShell.AppActivate "ページタイトル" WshShell.SendKeys "%( )" WshShell.SendKeys "R" End If End With -------------------------------------------------------------------------------

  • WSHを使いTELNETで%USEPROFILE%\デスクトップにファイルを複写したい

    WSHをはじめたばかりです。TELNETで接続した現在の相手のデスクトップにファイルを複写させたいと考えています。 DOSのように指定したのですがカナ文字や%がうまく渡されていないようなのですがどのように設定すればよいか教えてください。 下記のように作成しています。 よろしくお願いします。 set WshShell = WScript.CreateObject("WScript.Shell") WshShell.AppActivate "確認" WScript.Sleep 1000 adr = InputBox("端末IPアドレスを入力してください。", 1) adr = "telnet " & adr & "~" rem telnet ホスト名 WshShell.SendKeys adr WScript.Sleep 2000 rem ユーザー名 WshShell.SendKeys "administrator~" WScript.Sleep 1000 rem パスワード WshShell.SendKeys "administrator~" WScript.Sleep 1000 rem コマンド WshShell.SendKeys "cd %USEPROFILE%\デスクトップ~" WScript.Sleep 3000 rem あとCOPYによる複写コマンドの記述

  • VBSでレジストリキー名に円マークをつける

    「SQL\INSTANCE」という名前のキーをレジストリに作成したいのですが、円マークを入れると階層化されてしまうので、困っています。 カンタンな質問かもしれませんがどなたか教えてください。 以下、VBSで作成 Option Explicit On Error Resume Next Dim objWshShell ' WshShell オブジェクト Set objWshShell = WScript.CreateObject("WScript.Shell") If Err.Number = 0 Then objWshShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\SQL\INSTANCE", "SQL", "REG_SZ" WScript.Echo "ODBC設定変更:完了" Else WScript.Echo "エラー: " & Err.Description End If Set objWshShell = Nothing

  • VBSでブラウザ上のテキストボックスに文字列を打ち込み、ボタンを押す方法

    VBSでブラウザ上のテキストボックスに文字列を打ち込み、ボタンを押す方法を教えてください。 現在、下のような方法で行っているのですが応用が利かないので改善したいと思っています。 Set IE = CreateObject("InternetExplorer.Application") Set WshShell = CreateObject("WScript.Shell") IE.Visible = True IE.Navigate("https://サイトのURL") Do Until IE.Busy = False WScript.Sleep 1000 WshShell.SendKeys "y" Loop '(セキュリティの警告が出るため) WScript.Sleep 100 WshShell.SendKeys "{TAB}" WScript.Sleep 100 WshShell.SendKeys "loginid" WScript.Sleep 100 WshShell.SendKeys "{TAB}" WScript.Sleep 100 WshShell.SendKeys "password" WScript.Sleep 100 WshShell.SendKeys "{TAB}" WshShell.SendKeys "{ENTER}" 操作したいページのソースの一部を抜粋すると下記のようになっています。 テキストボックス <INPUT type="text" name="loginId" class="Necessary" size="20" maxlength="5" value="" tabindex="20"> ボタン <INPUT class="button10" type="button" name="sentaku" value="認証" onClick="javascript:execute・・・・略 うまく操作できる方法を教えてください。 よろしくお願いします。

  • VBSのSendKeysでクリックができない

    音声認識アプリケーションからvbsを実行できるのですが、ここで一度だけマウスクリックしたい状況が出てきて困っています。 Dim WSHShell As Object Set WSHShell = CreateObject("Wscript.Shell") WSHShell.AppActivate "操作したいアプリケーション名" WSHShell.SendKeys "{TAB}" 'OK WSHShell.SendKeys "{ENTER}" 'OK WSHShell.SendKeys "{CLICK LEFT, 10, 10}" 'NG TABキーやENTERキーは動作するのですが、3番目のマウスクリックがExceptionといわれエラーになってしまいます。Sendkeysでマウスクリックを送信するにはどうしたらよいのでしょうか?ネットで調べたリファレンスだと上記のような書き方で良さそうなのですが・・・ 音声認識アプリケーションはドラゴンスピーチ11Jで、OSはWin 7 ProとWin 8、どちらも64ビットです。