質問 |
||
| 質問者:WHATSS | 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以外で文字を送る技を期待しています。 |
|
質問投稿日時:08/03/13 00:03 質問番号:3857799 |
||
回答 |
|
| 回答者:pulsa | なかなか難しいですね NO.1の方がおっしゃる通り >(受け取る側の)アプリ側で何らかの受け入れ窓口を作らない限りはsendkeyしかありません。 ですよ NO.2の方のクリップボード経由も常套手段ですが、IEから警告が出たとなると、おそらく他の方法もすべて引っ掛かります (我々が思い付く程度のセキュリティホールがあるとも思えないので) そもそも2バイト関係なく、sendkey自体だめだったんじゃ… もしこの「セキュリティを変更せずに、データの送受信」が可能であれば、 緊急度『高』のとんでもないセキュリティホールですよ と言うか、これまでどの穴塞いでたんだ?ってもんです VBSで開発されている位ですからお分かりですよね? 仮にsendkeyが使えるのであれば、俺が思い付くのは、文字コードをsendkeyで入力させるように指定する のはいかがでしょう? 設定がめんどくさそうですが(笑) |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/03/17 04:12 回答番号:No.3 |
|
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答良回答20pt |
|
| 回答者:yambejp | こういうのはクリップボード経由でやります。 本ソースをどこで拾ったか忘れちゃいましたが、どっかに落ちてました。 以下のようなやりかたでたいてい問題ないと思います。 'ここから 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~"したりして使います。 |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/03/13 12:15 回答番号:No.2 |
|
| この回答へのお礼 | かなり核心にせまる内容ですがスクリプトを走らせると 「このWEBページがクリップボードへアクセスするのを許可しますか?」 と出て文字送りがされませんでした。 調べてみるとURLのバーにパスワードを読み取られたりするのを防ぐためにセキュリティがブロックしているようです。IEのセキュリティ設定は変更したくはないので、他の方法はございませんか? 申し訳ないのですがよろしくお願いします。 |
回答良回答10pt |
|
| 回答者:popesyu | おそらく抜本的なところで仕様を変える必要が出てくるのでしょうが(本当にnotepadに送りたいわけではないんですよね?)、テキストファイルに書き出して、そのアプリ側で起動時にそのテキストファイルを読み込んで起動とか。 結局のところ、そのアプリ側で何らかの受け入れ窓口を作らない限りはsendkeyしかありません。 あるいはVBや.Netならsendkeyで日本語も送れるので、そちらで作られたDLLを利用したこういう手もあります。 http://blog.hirsky.com/changelog/2006-08-04-1.html |
|---|---|
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| |
回答日時:08/03/13 01:12 回答番号:No.1 |
|
| この回答へのお礼 | ありがとうございます。DLLを入れる方法はできないのです。 指摘のとおりnotepadに送りたいのではなく、他人のPCに自動で文字を送りたいアプリがあるのです。 DLLを他人のPCにインストールするわけにはいかないので申し訳ありませんがこの手は遠慮させていただきます。 |