むたぐちさん、ありがとうございました。
確かにLesson12に書いてありましたね(^^;
Microsoftからダウンロードした、HelpにはArgumentsプロパティについて
特に書いてありませんね。
こういう書かれていない機能ってけっこうあるんでしょうか?
そうそう。ちなみに昨日アクセスしたときはカウンターが
11144でしたよ。
平成11年11月11日、11111アクセスは実現したんだろうか?
11111を取った方は、「いつ取ったか」とともにご報告ください(笑)
To: noboru さん
>その際、オプションを付けて引数として取りこむことは可能でしょうか?
>いろいろ調べたのですが、どうも載っていないようだったので・・・
私のページはまだお調べになっていないようですね(^^;
Lesson12をどうぞ。
WSHArgumentsオブジェクト(WScriptオブジェクトのArgumentsプロパティが返す)にオプションの
一覧が格納されています。Countプロパティでオプションの総数が、Itemプロパティ(引数は、0から
Countプロパティの値-1まで)で各項目が参照できます。
L12にはすべてのオプションを参照する例しかないですが、
一つ目のオプションを調べるにはこんな感じです:
If WScript.Arguments.Count>0 Then
MsgBox WScript.Arguments.Item(0)
End If
WSH2.0ではVBSファイルにファイル・フォルダをドラッグアンドドロップでき、ファイル名を
オプションにするスクリプトの実行が容易になりました。
>MS-DOSのバッチファイルでは、Command [/option]のように指定したオプションを
>"%1"などの記号を使用して参照できたのですが、WHSには無いのでしょうか?
バッチファイルほど簡単には書けませんが、なれると楽勝です。
はじめまして、
WHSを使用してバッチを組もうと思っているのですが、
起動はコマンドラインから行う予定です。
その際、オプションを付けて引数として取りこむことは可能でしょうか?
いろいろ調べたのですが、どうも載っていないようだったので・・・
MS-DOSのバッチファイルでは、Command [/option]のように指定したオプションを
"%1"などの記号を使用して参照できたのですが、WHSには無いのでしょうか?
まだ始めたばかりなので、調べ方が甘いのかもしれませんが、
もしご存知でしたらお教えください。よろしくお願いします
テクニック集をアップしました。
こういう感じでやっていきたいと思います。
To: YOU さん
>と言っても、ダイアルアップを制御する方法がわからず(WSH でできるのかな?)
これは誰かが作成したコントロールを探せば、おそらく可能です。
また、R-connectなどのダイヤルアップ接続ソフトを使ってもいいでしょう。
標準機能だけでは難しいですね。
>作ってみて思ったのですが、インターネットにつなぐだけならスクリプトを書く必要は無いな、
>という気がします。ダイアルアップを起動するのもスクリプトを起動するのも、手間はあまり変わらないので。
そうですね。私もそう思います。
しかし、標準機能だけでのやり方を考えてみましょう。
rundll.exeを使う方法:
rundll.exe rnaui.dll,RnaDial 接続名
がダイヤルアップのコマンドです。
ただし、UIはシステム標準のダイヤルアップダイアログと異なる上、自動処理ができません。
接続名をスクリプトから参照するには、HKEY_CURRENT_USER\RemoteAccessキーの、
InternetProfile(IEでの接続先)の値を読んでやればいいでしょう。
Set WSHShell = WScript.CreateObject("WScript.Shell")
ap=WSHShell.RegRead("HKCU\RemoteAccess\InternetProfile")
WSHShell.Run "rundll.exe rnaui.dll,RnaDial " & ap,1,True
これはシステム標準ではない?ですが、
Winsockを使う方法:
Winsockは、VBに同梱されるActiveXコントロールの一つです。
VB6のランタイムをインストールしている方は試していただけないでしょうか?
動いた、もしくは動かなかった報告、お待ちしております。
Set ws=WScript.CreateObject("MSWinsock.Winsock")
ws.Connect
キャンセル終了するとエラーが発生するので、エラー処理が別途必要です。
また、自動接続のフラグはレジストリのどこかにあると思いますが
未確認です。現在の自動接続のフラグを読み込んでおき、自動接続のフラグをyesにし、
接続し、終了後フラグを元に戻すと、自動接続が可能になると思います。
YOU(悠)です。
自動ダイアルアップのスクリプトを作ってみました。
スクリプトの中からダイアルアップを起動して相手のネットワークにつなぐ、というやつです。
と言っても、ダイアルアップを制御する方法がわからず(WSH でできるのかな?)
結局 WshShell.Run での起動になってしまいました。
今回は、こういう方法でやりました。
1.「ダイアルアップ」を開いて、[接続]−[設定] をクリックし、[ダイアル前に情報入力を促す] のチェックを外す。
2.ダイアルアップの設定をする。
3.できた設定をスクリプトファイルを置く予定のフォルダにドラッグする。
#これで、ダイアルアップのエクスポートファイルができます。接続名.DUN
3.エクスポートファイルを起動するスクリプトを書く。
Set WshShell= CreateObject("Wscript.Shell")
WshShell.Run "接続名.DUN", 1, Flse
作ってみて思ったのですが、インターネットにつなぐだけならスクリプトを書く必要は無いな、
という気がします。ダイアルアップを起動するのもスクリプトを起動するのも、手間はあまり変わらないので。
今回なぜこれを作ったのかと言うと、本社のネットワークにつなぐ時に、いくつか処理をしてから
(アプリケーションの起動ですが)ダイアルアップを起動する、という事をしたかったからです。
一応これで使っていますが、やっぱり WshShell.Run ではなく、まともに制御できないかな、と思っています。
良いやり方、どなたか知りませんか。
To: よっさん
>一応思っていたものは出来たんですけど教えてもらったものの礼儀として、
>どんなものを書いたのか返信しようと思ったのですが掲示板に書き出すのは、
>恥ずかしいし、(間違いだらけで笑われそうで)メールは迷惑だろうし、
>感謝だけでいいですか?
では感謝だけいただきます(笑)
でも、スクリプトはそんなにファイルサイズも大きくないので、メールで送っていただいても
構いませんよ。> All
この掲示板に書いていただいても結構です。長いのは適当に端折っていただくといいかと思います。
>PS.WSH は(ワッシュ)てよむんですか?
いつか出ると思ったこの質問ですが、なんて読むのがいいのでしょうね。
「ウィンドウズスクリプティングホスト」は長すぎるし、「ダブリューエスエイチ」も
つまらないしちょっと言いにくい。「ワッシュ」だと、SH部分はSHellの略ではないし、BASH(はっしゅ?)など
UNIX系のシェルと紛らわしいような気もします(私だけ?)。
どなたかいい読み方があったら教えてください(^^;
一応思っていたものは出来たんですけど教えてもらったものの礼儀として、
どんなものを書いたのか返信しようと思ったのですが掲示板に書き出すのは、
恥ずかしいし、(間違いだらけで笑われそうで)メールは迷惑だろうし、
感謝だけでいいですか?
PS.WSH は(ワッシュ)てよむんですか?
To: よっさん
>詳しく教えていただき感謝!
いえいえどうも。お答えした内容はLessonに流用しますので(汗)
>はじめて、一月半、基礎ができてないんです。
私もWSH、最初は全然わからない時期がありまして、全然思い通りの
スクリプトが書けず、投げ出してしまったことがあるのです(^^;
#ニュースに「わかりにくいし、あまり使っていません」という負け惜しみ的
#投稿をしたことも…。
とくに「オブジェクト」がなんだかよくわからなかったのです。(VBをちょっとやっていたのに)
>一月近く待ってましたが待ちきれませんでした。ごめんなさい。
ああー、お待たせして申し訳ありませんm(__)m
もう1ヶ月になりますか…。なんとかせねば!
中島です。
詳しく教えていただき感謝!
ソースにコメントの入れ方もよくわからないサルなんです。
はじめて、一月半、基礎ができてないんです。
>「さん」がダブるので一つにしておきました(^^;
おてすうかけます。m(__)m
>Set f=Fs.GetFile("C:\test.txt")
>f.Attributes=1
なるほど、なるほど。
>こういう話は、今作成中のLessonで取り上げる予定です。
一月近く待ってましたが待ちきれませんでした。ごめんなさい。
今後も活躍を期待してます。
カウンタがえらいことになってる!!
Frontpage Expressで保存したとき、リンク情報が消えてしまったようです。
オンライン状態で保存したためでしょう。
直しておきました…。
前にこの掲示板で書いた、レス書きツール、やっぱり公開することにしました。
結構面白いスクリプトだと思うので、実用性はともかくとして一度見てみてください。
最終的にブラウザで「書き込む」ボタンを押さなければ、実際に書き込まれることは
ないので、試しに使ってみても問題はないです。
To: abuku さん
>一万ヒットおめでとうございます!
>これからもより良いHPを楽しみにしています。
どうもありがとうございます。アクセス数なんてただの数字なんですけど、やっぱり
嬉しいもんですねえ。
To: 太郎 さん
>「★半角カナは使わないでくださいね。」と書いてあるのに使ってしまいました。
>すいません。あやまります。もいちど書かせてもらいます。
なるほど、半角を使うと文字化けするんですね。(って私も知りませんでした(^^;)
今度からうっかり「デスクトップ」を半角で書かないように気をつけよう。
>え〜とですね、今、WindowsDNA勉強してます。勉強する材料は「VBS」と「ASP」
WindowsDNAというのは名前は聞きますが、内容はよくわかりませんねえ(^^;
11/10のMSのテクニカルコンファレンスには行かれますか?
>と「PWS」と「テキストエディタ」だけでやろうとしてます。今ですね、「ASPファイル」を起動する「VBS」で分からないとこがあるのですけど・・・
>ここで質問して良いことですか?もし畑違いでしたらごめんなさい。
ちょっと畑違いかもしれませんねえ。VBSの文法ならお答えできますが、WSH以外で使うVBSは
苦手です。答えられるかは別問題として、お聞きしてもいいですか?
言うの忘れました・。
一万ヒットおめでとうございます!
これからもより良いHPを楽しみにしています。
>私もあんまりよくわかってないですが、CPUというのはクロック数を上げてスピー
>ドアップさせることができるのです。詳しい話はASCIIとかにいっぱい載ってます>(笑)
>Celeronは333MHzというのはあるのですが、336はないと思うので、3MHzアップさ>せた?ってそんなわけねーじゃん(爆)ということが言いたかったのです。
なるほど・・・勉強になりました。
「★半角カナは使わないでくださいね。」と書いてあるのに使ってしまいました。
すいません。あやまります。もいちど書かせてもらいます。
プログラマ経験6年ですが「VB経験3ヶ月、VBS経験1ヶ月の初心者です。
え〜とですね、今、WindowsDNA勉強してます。勉強する材料は「VBS」と「ASP」
と「PWS」と「テキストエディタ」だけでやろうとしてます。今ですね、「ASPファイル」を起動する「VBS」で分からないとこがあるのですけど・・・
ここで質問して良いことですか?もし畑違いでしたらごめんなさい。
始めまして、太郎といいます。
採湶餅杆湫老亳械暁C任垢泙VB経験3ヶ月、VBS経験1ヶ月の初心者です。
え〜とですね、今、WindowsDNA勉強してます。勉強する材料は「VBS」と「ASP」
と「PWS」と「歎縦潅洶澄廚世韻任笋蹐Δ隼廚辰討泙后C修海如ヨASP箕荷」起動
の「VBS」で分からないとこがあるのですけど・・・
ここで質問して良いことですか?もし畑違いでしたらごめんなさい。
10000アクセス突破です(^^)
PerlScriptですが、5.5MByteもあるのでダウンロードを断念しました(T_T)
なぜこんなに大きいか。VBS+JSのスクリプトエンジンは数百KByteなのに…。
あと、日本語が使えるかちょっとわからないので、それもDLを躊躇させる一因ですね。
そもそもPerlは、日本語版のJPerlというのがあるくらいで、日本語独自の拡張が
ないと使いものにならないっぽい雰囲気を醸し出していますし…。
Perlは文字列を扱うのが得意な言語なので、肝心の文字列が扱えなければ意味がないわけです。
To: よっさん
↑「さん」がダブるので一つにしておきました(^^;
>ファイルの属性を変更するには、どするのがよろしいですか?
>例題
>C:\test.txt 読み取り専用にするには?
Fileオブジェクトを取得し、そのプロパティを設定してやります。
Set Fs=WScript.CreateObject("Scripting.FileSystemObject")
Set f=Fs.GetFile("C:\test.txt")
f.Attributes=1
Attributesプロパティ
0(標準),1(読みとり専用),2(隠し),4(システム),32(アーカイブ)…以上値の変更可
8(ディスク),16(フォルダ),64(ショートカット),128(圧縮)…以上取得のみ
#よくわからない属性もありますね。
フォルダの場合は、GetFolderメソッドをかわりに使います。
複数の属性をつけるには、これらの値を足し算します。
例:
f.Attributes=3
(読みとり専用で隠し)
逆に、既存のファイルの属性を読みとるには少し工夫が要ります。
以下は私が考案した方法で、あまりエレガントではありません(^^;
というか、本当にこんな面倒なことをする必要があるか、甚だ疑問です(^^;
たぶんもっといい方法があるはずですが、私にはわかりません…。
#またニュースで質問してみようかな…。
Dim str,tmp
Set Fs=WScript.CreateObject("Scripting.FileSystemObject")
Set f=Fs.GetFile("C:\test.txt")
tmp=f.Attributes
For I=8 To 0 Step -1
If 2^I <= tmp Then
tmp=tmp - 2^I
Select Case 2^I
Case 1 str=str & "読み取り専用 "
Case 2 str=str & "隠しファイル "
Case 4 str=str & "システム "
Case 8 str=str & "ディスク "
Case 16 str=str & "フォルダ "
Case 32 str=str & "アーカイブ "
Case 64 str=str & "ショートカット "
Case 128 str=str & "圧縮 "
End Select
End If
If tmp=0 Then Exit For
Next
msgbox str,,f.Name
こういう話は、今作成中のLessonで取り上げる予定です。こういうことを一つ一つ
取り上げていくと、今までのLessonの5,6個分にはなりそう…いつできるでしょう…。
>右クリックしろと言われそうな気がしましたので追加です。
そんなこと言いませんって(^^;
To: abuku さん
> ちなみにハードには(ソフトも)疎いもので、おっしゃっている事が良く分かり
>ません・・。情けないっす・・。
私もあんまりよくわかってないですが、CPUというのはクロック数を上げて
スピードアップさせることができるのです。詳しい話はASCIIとかにいっぱい載ってます(笑)
Celeronは333MHzというのはあるのですが、336はないと思うので、3MHzアップさせた?
ってそんなわけねーじゃん(爆)ということが言いたかったのです。
再び 中島です。
Windows Scripting Host で行う方法です。
右クリックしろと言われそうな気がしましたので追加です。
はじめまして、中島です。
ファイルの属性を変更するには、どするのがよろしいですか?
例題
C:\test.txt 読み取り専用にするには?
訂正です・・・。
CPUはceleron300でした。
>3MHzオーバークロックですか(笑)
>というか、私はMMX200MHzです。
ちなみにハードには(ソフトも)疎いもので、おっしゃっている事が良く分かり
ません・・。情けないっす・・。
To: abuku さん
> 今からCを勉強するんだったらPerlをやったほうがいいですね。
Perlを覚えると、Linuxもより楽しく便利になるし、CGIスクリプトが書けるようになるし、
WSHからも使えていいことずくめですね。
まずはリファレンスを探さないといけませんね。本を買った方が早いかな?
>マシンのスペックが悪すぎます。メモリ64M、celeron336(?)ではち
>ょっと無理があるかなぁ・・。もっと良いマシンが欲しい・。。
3MHzオーバークロックですか(笑)
というか、私はMMX200MHzです。
むたぐちさん、こんにちは。←自信を持って「は」にできます。
>やっぱりCはかじっとくべきですか(笑)
今からCを勉強するんだったらPerlをやったほうがいいですね。
回り道する羽目になりますからね。まあCにも対応できるとういわ
れればそれまでですが。。。(^_^;)
この頃WSHを触ってないです。ACCESSばっかりで頭が痛くなりそう
です、あのクエリーのレスポンスと言ったら・・・5分は遅すぎで
しょう。。。まあサーバのDBにリンクしてるからなんですが、マシ
ンのスペックが悪すぎます。メモリ64M、celeron336(?)ではち
ょっと無理があるかなぁ・・。もっと良いマシンが欲しい・。。
私専用掲示板レス書きツールをWSH2.0対応にしてさらに機能アップ!
でも私専用なので配布しません(^^;
To: まつお さん
>今回はSql Serverを併用しているので、Sql Server側の関数
>DataLengthを用いて回避しました。スマートな解決策でない為
>非常に情けないのですが、納期の問題もあったので・・・。
納期ですか。何だか大変そうですね。私は完全に趣味でスクリプトを
作っているので、気楽なものなんですが(^^;
右詰テキストボックスですが、ActiveXコントロールを開発しなくても、
VBのテキストボックス?をobjectタグで呼び出して使うという手もありそうです。
といってもやったことがないのでよくわかりません。昔、ActiveX コントロール パッド
というツールを使ってやったような記憶があるのですが…。
To: abuku さん
>幸いCを少しかじっていた経験があるので
やっぱりCはかじっとくべきですか(笑)
>「こんにちは」「こんにちわ」
「こんにちは」ですね。お節介なIMEだと指摘してくれると思います。
まともに変換できないのに、偉そうに「何とかの誤用」とかいわれるとむかつきますが(笑)
むたぐちさん、こんにちは。
>Perlは覚えて損はない言語でしょうね。私も習得したいなあ。
>掲示板を自分で作れるようになるし。preタグが使える掲示板を作りたいですね
幸いCを少しかじっていた経験があるので、多少は流れつかみやすそうです。
でも一体いつになるのやら・・・・。
余談ですが、「こんにちは」「こんにちわ」どちらが正解なのでしょうか?
To:管理人むたぐち さん
LenB関数なんですが、色々調べたかったのですが時間が無かった為、
今回はSql Serverを併用しているので、Sql Server側の関数
DataLengthを用いて回避しました。スマートな解決策でない為
非常に情けないのですが、納期の問題もあったので・・・。
Windows Script Componentsの話題を「技術情報」に書いてみました。
「スクリプトレット」と呼ばれていた技術ですが、なんか最近見かけないよな、
と思っていたら、「スクリプトコンポーネント」と改名されていたようです。
今まで気づきませんでした(^^;
そういえば、私のサイト全体に言えることですが、内容が半年ほど遅れていましたね(爆)
だいぶ追いついてきましたが。
↓補足ですが、MSはActiveX Scriptingの仕様を公開しているようで、
それを利用してActiveStateが作成したのがPerlScriptである、というのが
真相のようです。それをMSはさも自分が作成したかのように書くわけです。
ああ、なんだかなあ。
#↑私の認識不足で、とんでもないデタラメを書いている可能性あり(爆)
To: まつお さん
LenB関数はどうなりました? (^^;
>テキストボックス内の文字列を右詰にしたいのです。
方法はないのでは?
inputエレメントに、そういうプロパティはないようなので。
独自のテキストボックスコントロールを開発するしかなさそうです。
>自動的にカンマ区切りにさせる方法はありますか?
onchangeイベントが実行されたときに、テキストの内容を変化させれば
いいのではないでしょうか。
>簡単なことかも知れませんが、始めたばかりなので
>右も左もわからない状態です。
私だってDynamicHTMLは始めたばかりなんですよ(^^;
HTMLでテキストボックスを貼り付けたのですが
テキストボックス内の文字列を右詰にしたいのです。
何か良い方法はありますか?
また、金額を入力させた場合、
自動的にカンマ区切りにさせる方法はありますか?
簡単なことかも知れませんが、始めたばかりなので
右も左もわからない状態です。良きアドバイスをお願いします。
WSH2.0新機能をまとめた文章をアップしました。
記述漏れやミスがあったら教えてくださいね。
To: abuku さん
>人に聞いた話ではPerlはOKだそうですね。
いまでもあるにはあるのですが、MS公認じゃないはずです。
ActiveState社がフリーで提供しているスクリプトエンジンです。
…と思っていたのですが、ドキュメントにはPerlScriptのサンプルが
ありますね。でも動作しませんでした。どういうことなんでしょう?
ActivePerlをインストールしたら使えるんでしょうか。
>また勉強せねばならぬ言語が増えた。
Perlは覚えて損はない言語でしょうね。私も習得したいなあ。
掲示板を自分で作れるようになるし。preタグが使える掲示板を作りたいですね。
To: チャブーン さん
ご無沙汰しております。すっかりWin9x系のNGへの投稿をやめてしまいました(^^;
別のニュースグループにはたまに出没しています。
マイブーム(笑)は、microsoft.public.scripting.wshへの投稿です。現在4通投稿達成(笑)。
しかし本当に、英語って書けないですね。
>そして、ログオン/ログオフ時にWSHスクリプトを簡単に
>実行できるように管理者設定ができるのです。
これは結構魅力ですね。起動履歴とかが簡単にとれますね。
>Win2kはむたぐちさん向けなのは間違いないですね(^^;
私の所有マシン向けでないのが問題(; ;)
>#batファイルよさようなら〜、ってわけでもありませんが
とはいえDOSはどんどん形骸化していくでしょう。Win2000にはDOSプロンプトさえ
ないはずですよ。(NTのコマンドプロンプトはDOSではなくDOSのエミュレータです)
ただ、CUI環境をなくしてしまうというのも問題だと思います。効率の点では
GUIに遙かに勝りますし。
#私のLinuxに対する評価は、微妙に変化しています(爆)
#Laser5Linux6.0が割と好感触だったのです。
>あと、青空文庫ですが、Webサイトで公開していますよ。
ですね。まあ、私などインターネットにつながっている時間がごくわずかな
人にはオンラインで読む(ダウンロード)のはちょっと大変なので、雑誌収録はうれしいです。
どうも、お久しぶりです。
Win2kとか、再インストールしてしまって(笑)
さて、WSHのWin2kでの仕様についてですが、多分2.0が
標準だったと思います。
そして、ログオン/ログオフ時にWSHスクリプトを簡単に
実行できるように管理者設定ができるのです。
#もちろん中身は自分で書くのですが(笑)
現在ホワイトペーパー解読中(爆)なもので、まだまだよく
わからないことだらけなのですが^^;
Win2kはむたぐちさん向けなのは間違いないですね(^^;
#batファイルよさようなら〜、ってわけでもありませんが
あと、青空文庫ですが、Webサイトで公開していますよ。
http://www.aozora.gr.jp/
多分、こちらのほうが新しい作品が読めると思います。
>それと、現在ではVBS、JSしか言語が使えないのですが、これからPerl、TCLなど
>がサポートされるかもしれないみたいなことが書いてあって、楽しみですね。
人に聞いた話ではPerlはOKだそうですね。また勉強せねばならぬ言語が増えた。
CDプレイヤーをバージョンアップしました。WSH2.0とは関係ありませんが(笑)
使ってみてね。cdplayer.iniファイルと連携させました。
To: abuku さん
>早く日本語版対応がでないかなぁ・。
おそらくWindows2000と同時リリースでしょう。
とはいえ、このβ版も内部的には言語依存していないようですね。
エラーメッセージのダイアログでもちゃんと日本語のエラーメッセージがでますし。
ドキュメント、だいたい理解できました。後は使い道を見いだすだけ(^^;
WSファイルという新しいファイルタイプが追加されたのですが、このフォーマットが
なんと(?)あのxmlなんですね。渋いところをついてきます。一般のxmlエディタで編集できます、
なんて書いてあります。
それと、現在ではVBS、JSしか言語が使えないのですが、これからPerl、TCLなど
がサポートされるかもしれないみたいなことが書いてあって、楽しみですね。
残念ながら、バイナリファイルの読み書きはサポートされなかったようです。
To: YOU さん
私信ですが、自作スクリプト、どうもありがとうございました。
外部コントロールにより機能拡張ができるのもWSHの魅力の一つですね。
>実験報告です。
WSHは実験という響きがなんか合いますね(笑)
このページのタイトルのLaboratoryもそんなニュアンスが込められていたりします。
>ファイルサイズは、書き込み中は 0 でした。
ファイルサイズがFATに書き込まれるのは、実体がコピーされてから
ということなんでしょうね。
>変化しているのなら、「 50% コピーしました」みたいな表示ができるのでは、
これは結構要望が多そうですね。どこかに書きましたが、WSHは寡黙すぎて
困りものです。
シェル(エクスプローラ)を呼び出してファイルコピーさせると、経過ダイアログが
出るのですが、まだ(私の)技術が発展途上でうまくいきません。処理の実行終了を待たせる
ことができないのが痛いです。要研究です。とりあえず
http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/object/shellfol.htm
にそのメソッドを書いているので参考にしてみてください。
「使用しない方がよいでしょう」とか書いてありますが(^^;
#一応オプションはMSDNライブラリでわかったのだけど、定数しか出てなくて
#その定数が実際はどういう値か書いてないのです。なぜ?
YOU(悠)です。実験報告です。
コピー中(コピー先に書き込まれている途中)のファイルのオブジェクトを
取得すると、値はどうなっているのだろうと思い、ちょっとやってみました。
Set File = FileSystemObject.GetFile(ファイル名)
で、Fileオブジェクトを取得すると、そのファイルの情報が参照できますが、
これは書き込み中のファイルに対してもできました。
プロパティの値ですが、ファイルの属性(File.Attributes) と
ファイルサイズ(File.Size)以外のプロパティは、元のファイルと同じ値でした。
ファイルの属性は、書き込み中は読み取り専用の属性が外れるようです。
ファイルサイズは、書き込み中は 0 でした。
書き込みが終わると正しいファイルサイズが入ります。
大きなファイルをコピーしているとき、その進行状況が知りたくなったのが
この実験のきっかけです。ファイルサイズのプロパティがリアルタイムで
変化しているのなら、「 50% コピーしました」みたいな表示ができるのでは、
と考えたのですが、これじゃできませんね。
>あのエラーコードは、エラー番号とは異なります。(何なのか、不明です)
>エラー番号を知りたい場合は、Err.Numberの値をコード中で参照するしか
>ありません。
>つまり、msgbox err.number のようにして、起こったエラー番号を一度確
>認して、If err.number=<そのエラー番号> Then のように改めて記述する
>必要があるわけです。ちなみに424というエラー番号は存在します。
なるほど・・・。浅はかでした・・。早く日本語版対応がでないかなぁ・。
WSH2.0β版、ついにインストールしました。
これからいじりたいと思います。
新機能を使うには、英語のHTMLヘルプを読解しなければならないので
結構大変です。そのうち概要を訳してアップしたいと思います。
Lessonの更新は滞りそう(^^;
右クリックメニューや設定ダイアログが英語になるくらいで、日本語の
扱いも問題ないようです。(メニューはレジストリエディタで直せるけど)
「実用スクリプト」に2.0対応のスクリプトをばしばしアップ…できるといいなあ。
To: abuku さん
あのエラーコードは、エラー番号とは異なります。(何なのか、不明です)
エラー番号を知りたい場合は、Err.Numberの値をコード中で参照するしか
ありません。
つまり、msgbox err.number のようにして、起こったエラー番号を一度確認して、
If err.number=<そのエラー番号> Then のように改めて記述する必要があるわけです。
ちなみに424というエラー番号は存在します。
To: YOU さん
>WshShell.Run "wscript.exe スクリプト名",1,True
>
>ようするに、スクリプトを実行中に別のスクリプトを動かしてみよう、ということなのですが、
案その一: 自分自身を呼び出す。同じ処理を繰り返すスクリプトで、変数のリセット
などの処理が省ける。→下手すると無限ループに陥る。Trueを省略すると
リソースを食いつぶす恐れも。
案その二: ある処理を別のスクリプトファイルにやらせる。script_a.vbsを実行すると、
script_bに処理が渡され、その結果を表示する。
script_a.vbs
Set WSHShell=CreateObject("WScript.Shell")
str=InputBox("文字列を入力してください")
ret=WSHShell.Run("script_b.vbs " & str,,True)
msgbox str & " の文字数は " & ret
script_b.vbs
str=WScript.Arguments(0)
num=Len(str)
WScript.Quit(num)
こんな使い方はどうでしょう?
あまり意味ないか(^^;
To: abuku さん
>講習先で密かにいじってますけど(笑)
いつでもどこででも(とはいかないがだいたい)利用できるのがWSHの強みですね。
>ASCII買ってしまいました・・・(^_^;)
ああ、売り上げに貢献してしまった(笑)
こんばんわ〜。
明日(22日)までNTの講習で会社行ってないんで・・・WSH触ってません。
講習先で密かにいじってますけど(笑)
ASCII買ってしまいました・・・(^_^;)
来週またお邪魔します〜。
みなさんはじめまして、YOU(悠)です。
先日、WshShell.Run を使って外部アプリを起動させるスクリプトを書いていたのですが、
なんとなく下記のようなことを思いつき、やってみました。
WshShell.Run "wscript.exe スクリプト名",1,True
ようするに、スクリプトを実行中に別のスクリプトを動かしてみよう、ということなのですが、
やってみたら、問題なく動きました。
あたりまえと言えばそれまでですが。
これって、なにかに使えないかなぁ、と考えています。
*最後の True を省略すると、スクリプトが同時進行するようです。
>管理人むたぐちさん
この前は、メールありがとうございました。
えと、デフラグとスキャンディスクの完全な自動運転法がわかったので
お知らせします。
C:\WINDOWS\SCANDSKW.EXE c: /n /silent
C:\WINDOWS\DEFRAG.EXE c: /noprompt
To: Koki さん
>WSHでアプリの終了をかける事はできるのでしょうか?
残念ながら、汎用的な方法は、ないと思います。
ちょっと技術的な話になりますが、
オートメーションオブジェクトとして利用できるソフト(IE、Excel、Wordなど)ならば、
一応可能ですが、その場合、WSHのスクリプトからソフトを立ち上げる(CreateObject)
必要があります。
ただし、WSHは基本的にイベントドリブンなプログラムが書けない(ループさえまともに
取れればいいのだが)ので、結構難しいです。WSH2.0では改善されているのかな?
>WSHにAlt+F4のコマンドを記述して強制終了
WSH2.0ならAppActivate & SendKeysメソッドでたぶん可能です。
>以前、scriplayerでアプリの終了をかけようとしたのですが、
Scriplayer! …前言撤回します(爆) > 趣味でやってるとしか思えない
>OSがUS版のNTなので
NTは詳しくないのですが、特定のアプリを終了させるNT用のツールが
あったような気がします。
To: abuku さん
>WSH2.0(英語版対応)にバージョンアップしての不具合を発見しました。
あ、ついにバージョンアップされましたか。私は勇気がなくて
今までインストールしなかったのです。
日本語はちゃんと通ります?
>英語版では「800A01A8」が「オブジェクトがありません」というエラーなのですが、その内容をスクリプトに入力してみると・・・「Thenがありません」という
>スクリプト自体が否定されます。エラーコードが長すぎるらしく、Thenが認識さ
>れないという状態に陥ります。
もしかして、
If Err.Number = 800A01A8 Then
と書いてませんか?
If Err.Number = &H800A01A8 Then
ではどうですか? VBSでは16進数はこう表記します。
>勿論「424」というエラーコードは存在しないです。
WSHのエラー番号の体系が変わったのかもしれませんね。
VBSのエラーではなく、WScriptオブジェクトのエラーが優先的に
発生するようになったとか。
>On Error Resume Next
>・・・
>If Err.Number = 111 Then
文字化け内容は上の通りです・・・
お知らせです・・・。
WSH2.0(英語版対応)にバージョンアップしての不具合を発見しました。
エラー処理で・・・
On Error Resume Next
ゥ・
If Err.Number = 111 Then
WScript.quit
End If
のようにしますよね。
ここで問題になるのが・・エラーコードの違いです。
英語版では「800A01A8」が「オブジェクトがありません」というエラーなのですが、その内容をスクリプトに入力してみると・・・「Thenがありません」という
スクリプト自体が否定されます。エラーコードが長すぎるらしく、Thenが認識さ
れないという状態に陥ります。勿論「424」というエラーコードは存在しないです。
合ってるかどうかは分かりませんが、一応報告まで・・・。
わざわざ学校からすいません(^_^;)
>Set objSc = WSHShell.CreateShortcut(I.Path)
>lin=objSc.TargetPath
この2文が欲しかったのです・・。ありがとうございます。
特に2文目が分からなくて・・。
CreateShortcutとobjScを結び付ける方法が思いつかなかった
のです。なるほど・・・。
P.S. HP見てくれてどうもです!
WSH使用暦一日の初心者です。
WSHでアプリの終了をかける事はできるのでしょうか?
また、できなければWSHにAlt+F4のコマンドを記述して強制終了をかけてみようかと考えているのですが、こういう事は可能なのでしょうか?
以前、scriplayerでアプリの終了をかけようとしたのですが、OSがUS版のNTなのでScriplayerが動いてくれません。そういうわけでいろいろ他の手を模索しているのですが・・・
よろしくお願いしますm(_)m
dir="C:\"
Set Fs = WScript.CreateObject("Scripting.FileSystemObject")
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set fol=Fs.GetFolder (dir)
For Each I In fol.Files
If Lcase(Fs.GetExtensionName(I.Path))="lnk" Then
Set objSc = WSHShell.CreateShortcut(I.Path)
lin=objSc.TargetPath
Set objSc=Nothing
'ここでlinという変数にはパスが入るので、処理をおこなう
'.........
End If
Next
ということでしょうか? 今学校なのでデバッグできませんが。
管理人むたぐちさん、こんにちは。
>っかくなのでリンクフォルダ活用法を、過去にニュースグループに投稿した記事か
>ら紹介します。
なるほど・・・こんな使い方も有るわけですね・。勉強になります。
>かしいですね? 私のところではできますが…。
>パスは実在するものを指定してください。
これなんですが・・・説明が悪かったです。例を挙げてみますと・。
"C:\Program Files\text.exe"というファイルのショートカットを作るとします。
名前をtxt.lnkとします。
で、そのtxt.lnkの「リンク先(T)」は勿論"C:\ProgramFiles\text.exe"になっ
ていると思います。そこで、txt.lnkを指定したら"C:\ProgramFiles\text.exe"
という値?を変数に取得しその場所で作業を行う、という事なのですが・・・。
とりあえず、"C:\ProgramFiles\text.exe"というパスを取得できればなんとでも
なるのですが・・・。
処理するショートカットファイルが1つ(固定)ならばTARGETPATHで値を振ってや
る事はできますよね。しかし、今考えているのは、
1.あるフォルダ(*.lnkファイルが沢山ある)を指定
2.その中の*.lnkファイルを検索
3.lnkファイルがあったらそのリンク先パスを取得
4.リンク先パスのファイルに処理を施す
以下2〜4繰り返し・・・
意味は通じましたでしょうか?
乱文で申し訳ありません。
ご指導の程お願い致します。
ASCII11月号の付録に、1998年8月号のWSH特集記事が再録されています。
興味のある方は立ち読みして買うかどうか決めて下さい。
今号は「青空文庫」という、著作権が切れた小説500編が収録されており、また
Microsoftの2000年対策モジュールの総集編(こっそりIE5.0の最新版?もついている)が
収録されていて、買っても損はないと思います。
なんとなく宣伝してみました(爆)
To: abuku さん
>訴えましょう(笑)
読者からの同様のツッコミが掲載されていました。(べつな記事に対してですが)
内輪ネタで盛り上がるな、と。
まあ、あの雑誌は、というかASCIIという会社自体、そういう風潮があるようですね。
例の連載記事ですが、今号の内容はWSHでもできそうだぞ?
>targetpathを指定するのはできるのですが・・どうもその値(*.lnkのリンク先パス)を変数に入れることが出来ないのです・・。
おかしいですね? 私のところではできますが…。
↓パスは実在するものを指定してください。
Dim lin
Set WSHShell = WScript.CreateObject("WScript.Shell")
Set objSc = WSHShell.CreateShortcut("C:\WINDOWS\デスクトップ\エクスプローラ.lnk")
lin=objSc.TargetPath
Set objSc=Nothing
To: まつお さん
>半角文字をLenBで判断してもバイト数が正しく取得できません。
>UniCodeが関係してると思うのですがVBではStrConvを用いてUniCodeに
>変換できるのですがVBScriptではどうすれば良いのでしょうか。
こういうところでVBSの制限がひびいてくるんですよね。
ChrW(AscW("あ")) などをためしてみましたが、効果がないようです。
asc関数で1バイト文字だけ抜き出して、ふりわけるしかないんでしょうかねえ。
誰か情報をお持ちの方、いらっしゃいませんか?
ニュースを読み書きできる環境があれば、fj.comp.lang.visualbasicで
質問してみるといいかもしれません。
私も以前、16進→10進の変換方法を質問したことがあります(^^;
最近VBScriptを始めたのですが、LenB関数について悩んでいます。
半角文字をLenBで判断してもバイト数が正しく取得できません。
UniCodeが関係してると思うのですがVBではStrConvを用いてUniCodeに
変換できるのですがVBScriptではどうすれば良いのでしょうか。
何か良きアドバイスをお願いします。
↓すいません。。間違えました(^_^;)
>趣味で連載をしているとしか思えない…。
訴えましょう(笑)
>Lesson10が参考になりませんか?
>ShortcutオブジェクトのTargetPathプロパティにその値が格納されています。
>ファイルの検索については、
確かにレッスン10を参考に作りました・・・が、targetpathを指定するのはできるのですが・・どうもその値(*.lnkのリンク先パス)を変数に入れることが出来ないのです・・。
意味合い的には"lin = FS.GetTargetPath(f)"(ないっすけど)のように取得したいのですが・・。言いたい事が伝われば幸いです。
WSHのニュースグループ(microsoft.public.scripting.wsh;英語only)に
投稿してみました。
英語は読めるけど書けないことを痛感しますね。
まあ、コードは世界共通ですが。
To: abuku さん
せっかくなのでリンクフォルダ活用法を、過去にニュースグループに投稿した記事から
紹介します。
「リンク」ツールバーは階層化できます。私の場合はフォルダのショートカットを
入れたフォルダと、スクリプトのショートカットを入れたフォルダの2つを
「リンク」に置いています。
「リンク」ツールバーをデスクトップにも表示しておき、中によく使うアプリの
ショートカットを入れておきます。すると、IE・エクスプローラ・スタートメニュー・
デスクトップのどの場所からもアクセスでき、便利です。
To: ポケ さん
>VBScriptでフレーム間で関数を呼び出す方法
これはHTMLにVBSを記述する場合ですね?
よく知らないのですが、<script language="VBScript" src="a.vbs">
のように、共通のスクリプトファイルを参照してやれば良いのではないでしょうか。
>趣味で連載をしているとしか思えない…。
VBScriptでフレーム間で関数を呼び出す方法が
よく分かりません。どのような記述ににすればよいのでしょうか?
>それは・・反響が無いからでしょうか?
Scriplayer人口よりWSH人口の方が多いと思うのですが。
趣味で連載をしているとしか思えない…。
>ショートカットファイル(*.lnk)のファイルを検索し、そのファイルのリンク先に
>あるファイルを処理したい場合にショートカットファイルのリンク先を変数に取り込
>むスクリプトはないでしょうか?
Lesson10が参考になりませんか?
ShortcutオブジェクトのTargetPathプロパティにその値が格納されています。
ファイルの検索については、
dir="C:\"
Set Fs = WScript.CreateObject("Scripting.FileSystemObject")
Set fol=Fs.GetFolder (dir)
For Each I In fol.Files
If Lcase(Fs.GetExtensionName(I.Path))="lnk" Then
...
End If
Next
のような感じで。...でShortcutオブジェクトを作成して処理してやってください。
Fileオブジェクトとかの話はまだLessonで取り上げてないのですが、そのうち
書きますので待っていてくださいね。それまではVBSのリファレンスでも
読んでおいてください(^^;
>「リンク」フォルダ
仕様です(笑)
隠し属性をつけると隠れます。