ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者: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にインストールするわけにはいかないので申し訳ありませんがこの手は遠慮させていただきます。
 
最新から表示回答順に表示良回答のみ表示