アプリ版:「スタンプのみでお礼する」機能のリリースについて

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以外で文字を送る技を期待しています。

A 回答 (3件)

こういうのはクリップボード経由でやります。


本ソースをどこで拾ったか忘れちゃいましたが、どっかに落ちてました。
以下のようなやりかたでたいてい問題ないと思います。

'ここから

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~"したりして使います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/03/13 22:06

なかなか難しいですね



NO.1の方がおっしゃる通り
>(受け取る側の)アプリ側で何らかの受け入れ窓口を作らない限りはsendkeyしかありません。
ですよ
NO.2の方のクリップボード経由も常套手段ですが、IEから警告が出たとなると、おそらく他の方法もすべて引っ掛かります
(我々が思い付く程度のセキュリティホールがあるとも思えないので)

そもそも2バイト関係なく、sendkey自体だめだったんじゃ…

もしこの「セキュリティを変更せずに、データの送受信」が可能であれば、
緊急度『高』のとんでもないセキュリティホールですよ
と言うか、これまでどの穴塞いでたんだ?ってもんです
VBSで開発されている位ですからお分かりですよね?

仮にsendkeyが使えるのであれば、俺が思い付くのは、文字コードをsendkeyで入力させるように指定する
のはいかがでしょう?

設定がめんどくさそうですが(笑)
    • good
    • 0

おそらく抜本的なところで仕様を変える必要が出てくるのでしょうが(本当にnotepadに送りたいわけではないんですよね?)、テキストファイルに書き出して、そのアプリ側で起動時にそのテキストファイルを読み込んで起動とか。


結局のところ、そのアプリ側で何らかの受け入れ窓口を作らない限りはsendkeyしかありません。

あるいはVBや.Netならsendkeyで日本語も送れるので、そちらで作られたDLLを利用したこういう手もあります。
http://blog.hirsky.com/changelog/2006-08-04-1.html
    • good
    • 0
この回答へのお礼

ありがとうございます。DLLを入れる方法はできないのです。
指摘のとおりnotepadに送りたいのではなく、他人のPCに自動で文字を送りたいアプリがあるのです。

DLLを他人のPCにインストールするわけにはいかないので申し訳ありませんがこの手は遠慮させていただきます。

お礼日時:2008/03/13 20:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!