WSH 日本語ファイル名の認識についての解決方法は?

このQ&Aのポイント
  • WSHを業務で使用しようとしていますが、日本語のファイル名や件名を使うと文字化けしてしまい、正常に動作しません。SendKeysを使用していることが原因でしょうか?解決方法を教えてください。
  • WSHを使ってメールの自動化を試みていますが、日本語のファイル名や件名を使用すると文字化けしてしまいます。SendKeysを使用していることが問題なのでしょうか?どのように対処すれば良いですか?
  • WSHを業務で利用しようとしていますが、日本語のファイル名や件名を使用すると文字化けしてしまい、正常に動作しません。SendKeysを使用しているのが原因なのでしょうか?対処方法を教えてください。
回答を見る
  • ベストアンサー

WSH 日本語ファイル名の認識

こんにちは、WSHを業務使おうと考えております。 まだ始めたばかりで、いろいろ調べてはみたのですが、検索方法が悪いのか解消方法が見つかりません。 以下のスクリプトにてメール作成を自動化しようとしておりますが、日本語のファイル名、件名に日本語を使うと文字化け?してしまい、思ったようにうまくいきません。 そもそもSendKeysを使っているのが悪いのでしょうか ご教授いただけないでしょうか?よろしくお願いいたします。 set WshShell = WScript.CreateObject("WScript.Shell") 'メーラー立ち上げ' WshShell.Run "MSIMN.EXE" WScript.Sleep 5000 '新規メール作成' WshShell.SendKeys "%{F}" WshShell.SendKeys "N" WshShell.SendKeys "M" 'ファイル添付' WshShell.SendKeys "%{I}" WshShell.SendKeys "A" WshShell.SendKeys "C:\業務週報.xls" WshShell.SendKeys "%{A}" WshShell.SendKeys "ITODPC02@gmail.com" WshShell.SendKeys "{TAB 2}" WshShell.SendKeys "業務週報送信" WshShell.SendKeys "{TAB 2}" WshShell.SendKeys "今週の業務週報を送信します。" WshShell.SendKeys "%{F}" WshShell.SendKeys "{E}" 'メーラー終了' WshShell.SendKeys "%{F4}"

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

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

WSHではSendKeysは、日本語はおくれませんね。 クリップボード経由でやってみてください。 例)メモ帳に「C:\業務週報.xls」という文字を書き込む set WshShell=wscript.createObject("Wscript.shell") WshShell.Run("notepad") Set oClip=New Clipboard oClip.Text="C:\業務週報.xls" WSHShell.SendKeys "^V~",true Set oClip=Nothing 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" 'WScript.Sleep 10 oIE.Sleep 10 Loop End Sub Private Sub Class_Terminate() oIE.Quit Set oIE=Nothing End Sub Public Default Property Get Text ' 既定プロパティ 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

komahiro
質問者

お礼

回答ありがとうございます。 SendKeysでは日本語は送れないのですね。 回答いただきましたスクリプトはまだまだ理解不足ですので、すぐには分からないのですが、クリップボード経由でやってみます。 ありがとうございました。

その他の回答 (2)

  • iriyak
  • ベストアンサー率48% (40/82)
回答No.3

こんにちは。 同様の問題領域 (Windows 自動化) に対して適用可能なソフトウェアとして UWSC Pro がありますのでご紹介します。 QNo.4021626『VBSでファイルの自動保存』 こちらで UWSC Pro のスクリプト例を掲載しています。SENDSTR 組み込み手続きを用いて日本語ファイル名も設定可。(QNo.4021626 で言えば、SENDSTR(wid2, "test.txt") の "test.txt" を "あいう.txt" としても動作する、という意) ご参考まで。

参考URL:
http://okwave.jp/qa4021626.html, http://www.uwsc.info/
komahiro
質問者

お礼

ありがとうございます。 なんとか解決することができました。 ソフトウェアにつきましては、参考にさせていただきます。 ありがとうございました。

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

#1の方の書いた方法は、IEのインターネットゾーンのセキュリティーを強めていると使えません。 その場合はWindowsの標準機能だとどうしても駄目です。 もしOfficeがインストールされていれば以下の方法でクリップボードを使うことが出来ます。 Set uf=CreateObject("Forms.Form.1") Set tb=uf.Controls.Add("Forms.TextBox.1").Object tb.Text="ペーストしたい文字列" tb.SelStart=0 tb.SelLength=tb.TextLength tb.Copy Set tb=Nothing Set uf=Nothing で、クリップボードに文字列が入るので、そのあと、^V をSendKeysすればいいです。 SendKeysは「文字」を送るのじゃなくてあくまで「キー」を送るので日本語は駄目ですね。もし「IMEオン」の「キー」がサポートされていれば、かなくらいは可能でしょうけど、漢字は何回「変換キー」を送らないといけないかわからないのでいずれにせよ無理。

komahiro
質問者

お礼

分かりやすい回答ありがとうございます。 SendKeysはあくまでキーを送るのですね。 ご教授いただきました構文でおぼろげですが、理解できました。 改めて作成してみます。 ありがとうございました。

関連するQ&A

  • 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による複写コマンドの記述

  • WSHスクリプトでブラウザ更新

    教えてください。 WSHスクリプトでブラウザの更新をF5ではなくてControl + Rしたいのです。 Set WshShell = WScript.CreateObject("WScript.Shell") WScript.Sleep 2000 WshShell.AppActivate "テスト" WScript.Sleep 2000 WshShell.SendKeys "^R" WScript.Sleep 2000 WScript.Echo "終了" 最初の一回目の実行時はできるのですが、それ以降更新してくれません。 よろしくお願いいたします。

  • キー操作 (WSH:コピー&ペースト)

    ホームページ上のデータをクリップボードに取り込んで メモ帳に写したいです。 キー操作でのコピー&ペーストがうまくいきません。 どこがいけないのでしょうか(WSHを使ってます)。 set WshShell = WScript.CreateObject("WScript.Shell") WshShell.SendKeys "^A" '「Ctrl」を押しながら「A」を押す WshShell.SendKeys "^C" '「Ctrl」を押しながら「C」を押す WSHShell.Run "notepad.exe" 'メモ帳を開く WshShell.SendKeys "^V" '「Ctrl」を押しながら「V」を押す よろしくお願いします。

  • VBSのsendkeysで日本語を出力したいです

    WshShell.Run "explorer" WScript.Sleep 100 WshShell.AppActivate "explorer" WScript.Sleep 100 WshShell.SendKeys "C:\Users\Default\" WScript.Sleep 100 WshShell.SendKeys "デスクトップ" WScript.Sleep 100 WshShell.SendKeys "{ENTER}" WScript.Sleep 100 *.VBS ファイルに書き込んで、直接実行したいのですが、エラーになります。 どんなコマンドを足すといいのですか?

  • VBS(WSH)で開いたIEのウィンドウがアクティブにならない

    VBSでタイトルバーのみのIEウィンドウを開き、 SendKeyでtestと入力するスクリプトを作成しています。 ですが、開いたIEのウィンドウがアクティブにならず、 SendKeyがIEに送信されません。 VBSについては全くの初心者でして、ウィンドウがアクティブにならないのが 環境の問題なのか、プログラムの問題なのか判断できません。 どなたかご教授をお願いします。 IEのバージョンは8、OSはWinXPです。 以下、ソースです。 -------------------------------------------------- 'タイトルバーのみのIEを起動する Set WshShell = WScript.CreateObject("WScript.Shell") Set objIE = WScript.CreateObject("InternetExplorer.Application") objIE.Navigate("http://www.google.co.jp/") objIE.MenuBar = False objIE.StatusBar = False objIE.ToolBar = False objIE.AddressBar = False objIE.Visible = True '表示待ちループ Do While objIE.Busy WScript.Sleep 100 Loop '[test]で検索 WshShell.SendKeys("test") WScript.Sleep(100) WshShell.SendKeys("{TAB}") WScript.Sleep(100) WshShell.SendKeys("{ENTER}") --------------------------------------------------

  • WSHで自動化ソフトを作りたいけど、エクセルとの連携、エラー防止はどうすれば?

    以下の業務を自動をするために、WSHでプログラムを作っていますが、4点困っていることがあります。 ●●●業務内容●●● 1、業務のメールボックスをactivateする。 2、sendkeys("{Enter}")を使って、メールを開く。 3、AlTからEditツールのEDIT、を選択し、メールを編集状態にする。 4、CTRL+Fで、文字列検索。(「発表日」を検索します。) 5、「発表日」の下に発表される日時が8桁で表示されているので、sendkeysを使い、コピー。 6、業務に使うエクセルファイルをactivateする。 ■■ここでVBAを使いたいのですが、WSH内のプラグラム内で、VBAを入力することは可能でしょうか?■■ 7、エクセルファイルを開いたら、発表日がある列の空白セルのひとつにペースト。(上のセルから順にペーストしていくので、 i=1 activate.cells(F,i) i=i=1 do while i=10のようにコマンドするつもりです。) 8、業務のメールボックスを再びActivateする。 ■■(業務のメールボックスは新しいメールをタブでふぴじする仕組みになっているので、どうのようにActivateすればいいか困っています。)■■ 9、開いてあるメールを閉じる。(Sendkeysで閉じる予定です)(これから処理する全てのメールを開いたまま、プログラムを実行すれば、確実にエラーが起きるような数のメールなので。) 10、メールボックスに戻るので、{down}と{enter}で次のメールを開く。 繰り返し。 ●●●困っていること●●● 1、sendkeysをなるべく使わずに実行したい。 sendkeysでは、たとえば他のプラグラム(セキュリティーソフトなど)が実行された場合でも、そのまま実行され続けるので、リスクが大きい。 2、仮に1で書いたような事態が起きた場合、プログラムを自動的に停止するようにしたいが、どのやってコンピューターにエラーが起きていると判断させるかわからない(違うメールやプログラムを開いている場合に呈する等)。 3、エクセルと連携させて、Sendkeysを減らしたい。 4、繰り返し処理はこの場合、どうやって命令するのか。 ●●●今のコード●●● var WShell = WScript.CreateObject("WScript.Shell"); WShell.AppActivate("業務に使うメールソフト(別のウィンドウに開いてある必要があります)"); WShell.Sendkeys("{ENter}"); WScript.sleep(100); WShell.sendkeys("%"); WScript.sleep(100); WShell.sendkeys("a"); WScript.sleep(100); WShell.sendkeys("d"); WScript.sleep(100); WShell.sendkeys("^F"); WScript.sleep(100); WShell.sendkeys("検索したい文字列"); WScript.sleep(100); WShell.sendkeys("{ESC}"); WShell.sendkeys("{DOWN}"); WScript.sleep(100); WShell.sendkeys("+{RIGHT}{RIGHT}{RIGHT}{RIGHT}{RIGHT}{RIGHT}{RIGHT}{RIGHT}"); WScript.sleep(100); WShell.sendkeys("^c") WScript.sleep(100); WShell.AppActivate("EXCEL"); WScript.sleep(10000); WShell.sendkeys("セルまで移動") WShell.sendkeys("^V"); WShell.AppActivate("業務に使うメールソフト"); WShell.sendkeys("%"); WShell.sendkeys("w"); WShell.sendkeys("window がある番号"); WShell.sendkeys("%"); WShell.sendkeys("^W"); WShell.sendkeys("{DOWN}"); WScript.Echo "作業が完了しました。"

  • WSH ドロップしたファイルのファイル名に作成日を

    こんにちは WSHの質問です。 ドロップしたファイルのファイル名に作成日を追加するには どうゆう記述になりますでしょうか? Wscript.Arguments.Item  を使うまではわかったのですが それ以降さっぱりわからないです。 http://www.relief.jp/docs/wsh-get-files-name-wscript-arguments.html とかが参考にしているところです。 流れ的には次のような感じでしょうか? ドロップされた 個数を数える ファイルのフルパスを取得 ファイルの作成日を取得 ファイル名を書き換える よろしくお願いいたします。

  • 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・・・・略 うまく操作できる方法を教えてください。 よろしくお願いします。

  • WSH動作しない!!(WScript.SleepとSendKeys?)

    WSHが動作しなくて困っています。 動作するコードとしないコードは次のとおりです。 いずれも@ITに掲載されているサンプルコードをそのままです。 動作しないコードについても,notepadの起動まではできます。 どうやら,sleepとsendkeysが動いてくれないようです。 <正常に動作するコード> Set objShell = WScript.CreateObject("WScript.Shell") WScript.Echo "メモ帳を起動します。" objShell.Run "notepad.exe" http://www.atmarkit.co.jp/fwin2k/operation/wsh03/wsh03_02.html <動作しないコード> Set objShell = WScript.CreateObject("WScript.Shell") objShell.Run "notepad.exe" WScript.Sleep 1000 objShell.SendKeys "hello" http://www.atmarkit.co.jp/fwin2k/operation/wsh05/wsh05_04.html ■動作環境 Win XP Pro IE 6.0 ちなみに,WSHファイルに対する実行権限はあります(フルコントロールです)。 以上なのですが,何か点検するべき事項などありましたらご教示ください。

  • [WSH] ファイルのコピーができない

    こんにちは。 次のようなスクリプトでFTPフォルダにファイルをコピーしようとしたのですが、カレントフォルダにファイルがコピーされてしまうようです。 どうすれば、FTPフォルダにファイルをコピーできるのでしょうか? var objShell = WScript.CreateObject("Shell.Application"); var objFolder = objShell.NameSpace("ftp://user:password@sitename/directory/"); objFolder.CopyHere("C:\\WINNT\\win.ini"); WScript.Sleep(6000); ※下記のページを参考にさせていただき作成しました。http://homepage3.nifty.com/aya_js/wsh/wsh25.htm