Fujita さん (mt3-akt@abox4.so-net.ne.jp) 2002年 02月 01日 13時 16分 49秒

はじめまして、Fujitaと申します。
今までHTMLやJAVAScriptを勉強してきて、HTML上のフォームから
入力したデータをローカルやオフラインネット(イントラネット)上のディスクに
保存するのにWSHなら可能のような気がするのですが、可能でしょうか?
もし可能なようならWSHを勉強していきたいので、可能か不可能化だけで
結構ですから、どなたか教えて下さい。
その記述方法などは勉強した後、わからない部分だけ御指導お願いしたいので、
よろしくお願いいたします。

oyajiB さん (kazuyuki@h7dion.ne.jp) 2002年 02月 01日 09時 59分 39秒

はじめまして、よろしくお願いします。
アプリケーションを読み込み専用で開くにはどうすれば良いのでしょうか。
どなたか教えてください。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2002年 02月 01日 01時 41分 18秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

TRY!PC 2002年冬号「.NETとC#によるWindowsプログラミング入門」 小池隆著 CQ出版社
というのを買いました。
良さげ。



To: ぽみゃ さん

> すごく基本的な事だと思うんですが・・・JavaScriptってなんですか?

Googleで「JavaScriptって何」というキーワードで検索して、
概念的な説明をしているなあと思ったページを紹介しておきます。

http://adam.miyagi-ct.ac.jp/~d95621/htmls/jscript/jscript01.htm
http://www.justnet.ne.jp/faq/nfaq30.htm

HTMLって何? とか、プログラム言語って何? とか、いろいろわからないと
思いますけど、順番に理解を深めていってください。

> どうすれば手に入りますか?

JavaScriptはスクリプト言語の名前なので、手に入れるものではありません。
が、実行する環境は、WindowsXPに最初から用意されています。



To: HH さん

> ProgramFilesのCommon Filesのフォルダ文字列をWin98で
> 取得したいのですが、どうしたらいいのか教えてください。

Win98では、Common Filesフォルダの場所を示す設定というのは、もともとないのかもしれません。
つまり、各アプリが勝手にProgram Filesの下にCommon Files\appname\...というフォルダを作っている
だけなのかも。

という仮定に基づけば、Program Filesを取得して、 & "\Common Files" でOKかも。



To: 139 さん

もしかしてWSHスレの方?
違ってたらごめんなさい。

> VBSエンコードについてですが…
>
> > なお、Windows Script 5.0がインストールされていない環境では、vbeファイ
> >ルが実行できないようなので、インストールしてください。
>
> とありましたが、WSH単体だけでは駄目なようです。
>  Win98SE+WHS5.6+IE5.01
> では実行出来ませんでした。

Windows Script 5.6には、スクリプトデコード機能が含まれてないのかも。
Windows Script 5.0のときは、たしか含まれてたと思うんですが、
今思うとあんまり確信が持てないなあ。

>  IE5.01→IE5.01SP2
> としたところ実行可能になりました。

SP2にしたからではなくて、SP2インストール時に、「Visual Basic スクリプト サポート」
オプションをチェックしたからじゃないですか?



To: Lib30 さん

> テレビでCMなんかもやっててかなりたくさんの人が受けるようですし、
> 現国が必要だったり(マークだけれども)、実技(鉛筆デッサン)の配点が
> 400点もあったりしてちょっと分が悪そうです。

がんばってください。
現国のマークは、私の特技の一つでした。

> JavaScriptは主にHTML上の要素を操作するのに用いる
> オブジェクト指向のスクリプト言語です。
> IE、Netscape、Mozilla、Opera、HotJavaなど、主だったブラウザを
> インストールすると使えるようになります。
>
> これくらい自分で調べて下さい。

まったくのPC初心者に、この説明は酷というもんでしょう(^^;
調べ方からしてわからない、というのもあるでしょうし。

というか、JavaScriptとは何かという質問を、*この掲示板で*した、
という段階で、初心者ではないのではないか、と思ったりしたのですが。

> MSDNを久しぶりに見てたらいつの間にか新しいオブジェクトなどの
> リファレンスが追加されていました。
> そういうわけで、フォント名一覧を取得するスクリプト

こういうことができると、アクセス解析に、「どせいさんフォント使用率」という
項目を追加したりすることが可能なわけですね(謎)

すげえありがちですが、改造してみました。


<HTML>
<HEAD>
<meta http-equiv="Content-Type"
content="text/html; charset=shift_jis">
<TITLE></TITLE>
<SCRIPT type="text/javascript">
function getSystemFonts(){

var cnt = dlgHelper.fonts.count;
var str = "フォントの総数:" + cnt + "<br>";
var list = new Array();
for (var i = 1; i < cnt; i++){
list.push("<font face=" + dlgHelper.fonts(i) + ">" + dlgHelper.fonts(i) + "</font><br>")
}
str += list.sort().join("");
fontlist.innerHTML = str;
}
</SCRIPT>
</HEAD>
<BODY>

<OBJECT id="dlgHelper" CLASSID="clsid:3050f819-98b5-11cf-bb82-00aa00bdce0b" width="0px" height="0px"></OBJECT>
<INPUT TYPE="button" value="フォント取得" onclick="getSystemFonts()">
<SPAN ID="fontlist"></SPAN>
</BODY>
</HTML>

Lib30 さん (lib30@write-off.f2s.com) 2002年 01月 31日 22時 40分 43秒
URL:http://www.ob.aitai.ne.jp/~kazoo/

明日私立の入試があります。受けるのは名古屋学芸大学で、
今年できたばかりの新設校です。デザイン学科を受けます。
テレビでCMなんかもやっててかなりたくさんの人が受けるようですし、
現国が必要だったり(マークだけれども)、実技(鉛筆デッサン)の配点が
400点もあったりしてちょっと分が悪そうです。


To ぽみゃ さん

JavaScriptは主にHTML上の要素を操作するのに用いる
オブジェクト指向のスクリプト言語です。
IE、Netscape、Mozilla、Opera、HotJavaなど、主だったブラウザを
インストールすると使えるようになります。

これくらい自分で調べて下さい。



To 139 さん

>ひょっとして皆さんご存知?

知りませんでした。



MSDNを久しぶりに見てたらいつの間にか新しいオブジェクトなどの
リファレンスが追加されていました。
そういうわけで、フォント名一覧を取得するスクリプト


<HTML>
<HEAD>
<TITLE></TITLE>
<SCRIPT type="text/javascript">
function getSystemFonts(){
var cnt = dlgHelper.fonts.count
var str = "フォントの総数:" + cnt + "\n\n"
var list = new Array()
for (var i = 1; i < cnt; i++){
list.push(dlgHelper.fonts(i))
}
alert(str + list.sort().join("\t"))
}
</SCRIPT>
</HEAD>
<BODY>

<OBJECT id="dlgHelper" CLASSID="clsid:3050f819-98b5-11cf-bb82-00aa00bdce0b" width="0px" height="0px"></OBJECT>
<INPUT TYPE="button" value="フォント取得" onclick="getSystemFonts()">

</BODY>
</HTML>



139 さん 2002年 01月 30日 21時 58分 15秒

お初です。

VBSエンコードについてですが…

> なお、Windows Script 5.0がインストールされていない環境では、vbeファイ
>ルが実行できないようなので、インストールしてください。

とありましたが、WSH単体だけでは駄目なようです。
 Win98SE+WHS5.6+IE5.01
では実行出来ませんでした。
 IE5.01→IE5.01SP2
としたところ実行可能になりました。
ひょっとして皆さんご存知?



HH さん 2002年 01月 30日 17時 20分 34秒

ProgramFilesのCommon Filesのフォルダ文字列をWin98で
取得したいのですが、どうしたらいいのか教えてください。

W2K,XPでは以下のようにして取得しています。

objShell = new ActiveXObject("WScript.Shell");
objShell.ExpandEnvironmentStrings("%CommonProgramFiles%");

ぽみゃ さん 2002年 01月 29日 09時 44分 10秒

すごく基本的な事だと思うんですが・・・JavaScriptってなんですか?
どうすれば手に入りますか?
PC買ったばかりでなんにも解からないのです。
WINDOWSxpです。
誰かおしえてーーーーー!!!

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2002年 01月 29日 01時 28分 30秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

To: rubicon さん

> そこで、同じファイルは消去して新たにリンクを張りなおすスクリプトを書こうと思っています。教えていただきたいのですが、スクリプトから二つのファイルが同一のものかどうかを調べる方法って何かご存知ないでしょうか?

基本的に次の順番で処理してやればよいかと。

まず、サイズが違っていれば、違うファイルである。サイズが同じなら次に進む。

fcコマンドをWshShell.Execで実行。fcはファイルの内容を比較し、相違点をレポートするコマンドです。
Win2000の標準コマンド。Win9xにもあったかもしれません。
この結果を、WshScriptExecオブジェクトから参照すればいいでしょう。
ちょっと解析が難しいかもしれませんが。



To: チャブーン さん

> > だれかサーバー貸してください…。チャブーンさんにお願いしてみようかな。
>
> あ...と思ったら
>
> > サーバーの件、解決しそうです。
>
> よかったですね。ここはそこいらのMLよりはなかなか深い過去ログがありますから
> 皆さんも喜んでおられるのではないですかね(^^;

名前をお出ししておいて、いきなりですいません。失礼しました(^^;



To: ぷにぷに さん

> 最近、VBスクリプトの勉強をしているのですが、フォルダの中身を再読み込み(Windowsでいえば、フォルダを”最新の情報に更新”)する方法がわかりません。 VBスクリプトでそのような機能?はあるのでしょうか?

WshShell.SendKeysでF5を送るのが簡単だと思います。

他のやり方としては、
Set Shell=Wscript.CreateObject("Shell.Application")

For Each window In Shell.Windows
window.Refresh
Next
で、全フォルダウィンドウ更新することができます。

ぷにぷに さん 2002年 01月 29日 00時 55分 55秒

はじめまして、ぷにぷにと申します。
最近、VBスクリプトの勉強をしているのですが、フォルダの中身を再読み込み(Windowsでいえば、フォルダを”最新の情報に更新”)する方法がわかりません。 VBスクリプトでそのような機能?はあるのでしょうか?
もしくは、「こうやればできます」みたいなものでもかまいません。
よろしくお願いします。

チャブーン さん (mkobu@chabnet.jp) 2002年 01月 28日 21時 29分 00秒
URL:http://www.chabnet.jp/

チャブーンです。

> だれかサーバー貸してください…。チャブーンさんにお願いしてみようかな。

あ...と思ったら

> サーバーの件、解決しそうです。

よかったですね。ここはそこいらのMLよりはなかなか深い過去ログがありますから
皆さんも喜んでおられるのではないですかね(^^;

とりあえず。

rubicon さん (null) 2002年 01月 28日 18時 27分 47秒
URL:null

こんにちは。初めて投稿させていただきます。いつも有益な情報有難うございます。

IEを使って同じサイトに多数のqueryを出して、結果を保存するスクリプトを書いています。JScriptを使っていますが、土屋さんの40-43や、管理人のむたぐちさんの9-30を参考にしてなんとか作ることが出来ました。一応の目的は達成したのですが、結果保存されているファイルをみてみると、スタイルシートやアイコンの画像などが重複してqueryの数だけあり、非常に大きくなってしまいました。(実はtotalで2.3GB)

そこで、同じファイルは消去して新たにリンクを張りなおすスクリプトを書こうと思っています。教えていただきたいのですが、スクリプトから二つのファイルが同一のものかどうかを調べる方法って何かご存知ないでしょうか?

宜しくお願いいたします。


ちゃら さん 2002年 01月 28日 13時 25分 47秒

To:Lib30さん

正規表現、そうです、
これを使いたかったんですが、うまく使えなかった(使い方が
よくわからなかった?)んです。ありがとうございますっ!

他にもご回答くださった、汀佐五右衛門さん、管理人むたぐちさん
ありがとうございます〜。

To:管理人むたぐちさん

そうなのですかぁ、ForAppendingとかは宣言が必要だったんですね。
WSH2.0の新機能の方、拝見させていただいて勉強します。


皆様、どうもありがとうございました。

ほしいちぢく さん 2002年 01月 28日 09時 19分 16秒

とても勉強になりました。
ありがとうございます。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2002年 01月 28日 03時 27分 06秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

サーバーの件、解決しそうです。
詳細は後日。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2002年 01月 27日 21時 57分 54秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

この掲示板の過去記事を、Namazuの全文検索システムで検索できるようにしてみました。
http://www.roy.hi-ho.ne.jp/cgi-bin/user/mutaguchi/namazu.cgi

ただし、テスト運用です。設定も全然いじってませんし、だいたいインデックスファイルが
3MBを超えているので、このままではダメです。(レンタルサーバー容量10MBに対して8MBを超えてしまった)
だれかサーバー貸してください…。チャブーンさんにお願いしてみようかな。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2002年 01月 26日 03時 09分 48秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

2chの方が落ち着いたので、こちらに帰還。
最近は、こんなスレも立ったのです。
「このフォルダのカスタマイズ」
http://pc.2ch.net/test/read.cgi/win/1011536679/

強引に、*.htt拡張話に持っていきましたが、止まっちゃいましたね。



To: 松島 さん

> 風邪を引いてしまいました。
> 予兆10時間、症状進行6時間、峠2時間、下り坂12時間、燻り18時間、治り掛け12時間以上。
> 薬無しの所為か、なかなか完治しません。

ぶり返し**時間、悪化**時間・・・と続かなかったことを祈ります。
薬は摂らない方が治りが早かったりしますよ。(単発の風邪の場合)

> > 捨てるんじゃなくて、強制ダウンロードとかいいかも。
>
> メールで送り付ける、という手があります。
>
> そのうち、P2Pで何処かに保存、という選択肢がアリになってくるかも。
> #ホントに「何処か」か分からないのがポイント。

P2Pで連想するのは(飛躍があるけど)2ch一部有料化です。
http://pc.2ch.net/test/read.cgi/tech/1005282763/541-

> > それはともかく、一日中プログラムを書いてると、発狂しそうになりますね。
>
> 仕様書で決められた通りに黙々と処理し続けるのは辛いですよね。

装置自体は、「電圧を指定するとその電圧がかかって、そのとき流れた電流値を返す電源」と、
「明るさを測定し、その値を返す輝度計」と、「温度を指定すると、その温度に保つ温度コントローラー」
だけなので、非常に単純なのです。ですが、なにぶん経験が浅いもので。
はじめて「ユーザー定義型」っちゅーのを使ってみましたよ。でもこれははっきり言って設計ミスだった。
ユーザー定義型って、要素の列挙ができないじゃないですか。
ハッシュみたいなのはVBにはないのかなあ、と思いました。知ったかですな。

> 私の場合、新しい技術に触れたり、アルゴリズムを洗練させたり、機能的な改良を加えたり、という作業は楽しいです。
> キーボードを叩く時間より、設計やアルゴリズムを考えたりヘルプや資料を調べたり精神統一(眠)の時間の方が長かったりしたり……。

私の場合、たしかにこういう作業は楽しんでやりますが、なにぶんサイドワークなんで、
あまり楽しそうにやるのも考え物です(^^;

> 自分の場合、知的好奇心が重なって、そうした画像その物への嫌悪感は薄いです。
> 不意打ちを食らっても「あー、今はそういうの見たいんじゃなくて……」という位で。

血を見るのがダメです。それで医者になるのを断念しました。



To: チャブーン さん

> 適切なヒント、恐れ入ります。
> おかげで、稚拙ながらなんとかスクリプトを書くことができました。
> もっとも最初の構想からすると、トンデモなできですけど。

ぜひ、最初の構想を実現してやってください。
Win98でWSHをログオンスクリプトとして実際に用いている例というのは少ないと思うので、
期待してます。

> > 人は「手抜き」をした事を最も後悔します。勉強も休息も全力で(笑)。
>
> 達観されていますね。
> 全く同感です。でも私がいってもいまいち似合わないですね。

私はどっちも中途半端になることが多く、一番ダメなパターンです。
というわけで、何もいえません。



To: Lib30 さん

> センター試験、岐阜大学でやったのですが、2日間で交通費が5000円かかってしまった。
> 片道、電車で1時間かかりました。それだけで戦意の一割を消費。

私のときは、高校の近くにある神戸大学で受けました。
いつもの通学と同じ駅から歩いていったので、いまいち緊迫感がなかったかも。

まあ、今年はドラえもん問題ですな(謎)。

> Perlはいいですよ。裏技がたくさんあり、あることを実現するのに別の言語と比べて
> かなり短いコードですみます。短いコード、きれいなプログラムを書くのが好きな人には
> おすすめです。将来性も結構ありそうですし。

どっかでPerlは世界一ズボラな言語だという評価を見たような気がするんですが、
あれは誉め言葉だったのかなあ。



To: かずき さん

> この掲示板のみなさんは、深夜の書き込みが多いですね。

大まかな傾向として、常連さんと管理人は深夜に書き込むことが多いようです。

> ところで、あるアプリケーション(今回は一太郎ですが)固有のファイルのプロパティ値を得るのに、
> 他のプログラム(当該アプリケーションにしろ、エクスプローラにしろ)を自動処理して間接的に取得するのではなく、
> スクリプト中から直接アクセスするというような都合のいい方法はないでしょうか?WSHでは無理ですか。
>
> 全てのプロパティとはいかなくても、エクスプローラが自身でアクセスしている程度でいいのですが。

この件に関して、SIGNAL9さんとかずきさんとyokaさんのやりとりを興味深く読ませていただきました。
テキストファイルとかのプロパティは、やっぱりNTFSのファイルストリームに書き込まれてたんだなあ。

ファイルストリームは、FileSystemObjectのTextStreamで読み書きできるんですね。
http://www.microsoft.com/japan/developer/windows2000/techart/ntfs5.asp
# ていうか、これSIGNAL9さんが紹介済みだった。
"FileName:StreamName"という形式でアクセスできるわけです。
フォルダのプロパティの「概要」タブで設定できる「タイトル」等のストリームの
実際のストリーム名が何であるかは私も知りません。知ってる方、ぜひ教えてください。
FileName:Titleじゃなかった。
# 上のページにある、ストリームの列挙プログラムを実行してみればわかると思うんですが。

もう一つ、Shell32のFolderオブジェクトのGetDetailsOfメソッドで
ファイルストリームに書き込まれたファイルのプロパティを読み出すこともできます。
以下は、G:\test.txtというファイルのプロパティを読み出す方法です。
I=0〜7が通常のプロパティ、I=9以降がファイルストリームのデータです。

Set Shell = WScript.CreateObject("Shell.Application")
Set oFolder=Shell.NameSpace("G:\")

For I=0 To 50
str=str & oFolder.GetDetailsOf(,I) & "=" & oFolder.GetDetailsOf(oFolder.ParseName("test.txt"),I) & vbCrLf
Next

MsgBox str



To: etebon さん

> WSHのなかで、"Regedit"を実行したいのですが、
> どう記述すればよいでしょうか?

WshShellオブジェクトのRunメソッドでどうぞ。
regファイルを指定して開くこともできます。
regedit /s regfile.reg のようにやると、確認ダイアログ非表示でregファイルをレジストリに
結合することもできます。

> やりたいことは、Regeditで書き出しRegファイルを実行することです。

書き出しは
regedit /e regfile.reg HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion
のようにします。

> ちなみに、実行後の戻り値(反映されたか)も判断したいと思っています。

Runメソッドの第三引数にTrueを指定すると、実際に反映されるまでスクリプトが
停止しますので、これで代用できると思います。

ただ、以上のやり方より、WshShellオブジェクトのRegRead/RegWrite/RegDeleteの各
メソッドを使って直接レジストリを触ってやった方が、簡便だとは思います。



To: ちゃら さん

> そうです、OpenTextFileの「ForAppending」を
> 「8」と記述したら動いたんです。
> でもこれって、どっちを記述してもいいんじゃないのかな〜?
> なんで文字だと動かないんだろう…

VBSファイルの場合は、Const ForAppending=8 ってのを宣言してやらなきゃダメです。
WSFファイルの場合は、タイプライブラリを読み込むと宣言が不要になります。
そのやり方は「WSH2.0の新機能」をどうぞ。



To: ちゃら さん

> If分の条件のとこに、Nullまたは空白とか言う条件を
> いれたいんですね。
> たとえば調べたいのがテキストファイルのとある行で、
> そこになにか文字列があるかどうかを調べたいのです。

汀佐五右衛門さんがTrim関数を使った方法、Lib30さんが正規表現を
使った方法を書いてくださったので、私は直球勝負をかけてみましょう。

MsgBox IsEmptyLine(" ")

Function IsEmptyLine(row)
If Len(row)=0 Then
IsEmptyLine=True
Exit Function
End If
For I=1 To Len(row)
tmp=Mid(row,I,1)
If tmp<>" " And tmp<>" " And tmp<> vbTab And tmp<> vbCr And tmp<> vbLf Then
IsEmptyLine=False
Exit Function
End If
Next
IsEmptyLine=True
End Function

うーん。これだったら、
Function IsEmptyLine(row)
row=Replace(row," ","")
row=Replace(row," ","")
row=Replace(row,vbTab,"")
row=Replace(row,vbCr,"")
row=Replace(row,vbLf,"")
If row="" Then
IsEmptyLine=True
Else
IsEmptyLine=False
End If
End Function
こっちの方がいいな。

Lib30 さん (lib30@write-off.f2s.com) 2002年 01月 25日 22時 27分 22秒
URL:http://www.ob.aitai.ne.jp/~kazoo/

To: ちゃらさん

正規表現でどうでしょう。空行、半角全角スペース、タブ、その他諸々空白文字だけで構成された行にマッチします。

Set objRE = New RegExp
objRE.Pattern = "^[\s ]*$"

If objRE.Test(row) Then
msgbox "空白です。"
Else
msgbox "空白ではありません"
End If

yoka さん 2002年 01月 25日 12時 38分 51秒

To:SIGNAL9さん

こんにちは SIGNAL9さん 詳細なご検証までして頂きありがとうございました。


>これらの属性を OLE プロパティ セットとしてドキュメントの複合ファイルのルート
>ストレージの外にある "\005Summary Information" というストリームに書き出します。

>つまり、FATだろうがNTFS4.0だろうが、複合ドキュメントという形で
>ストリームに吐き出して管理してやれば可能だ‥ということです。
>ただし、Windows2000ではNTFS5.0上にNative Structured Storage
>(NSS) サービスという形で、いわゆるOLEドキュメントではないファイ
>ルを、そのように取り扱うための機能が追加されているということのよ
>うです。

>・OLEドキュメント相当の機能を一般のファイルに持たせるというWin2KのNSSを使用した場合、
>その情報はファイル実体の外であるストリームに格納される。NSSに互換性のあるデータストリ
>ームをサポートする媒体(ボリューム)へコピーした場合、この情報もコピーされるが、
>コピー先でそれが操作できるとは限らない。

・・・・・略

私の知らないことだらけ・・・・・ (ゥ、)


自分でも、多少は、ファイルのコピー(WIN2000 NTFS − WIN2000 FAT 間)で調べて
みてはみましたが、ここでご教授頂いたような知識が何もないため、あたまの中がグズグズと
なってしまって・・・・

思い余って、こちらにご相談に伺いました。


SIGNAL9さんの詳細なテストの過程をみることで、あたまの中をかなり整理することが出来ました

私の質疑を酌みとって頂き、疑問に思っていたことを、明快にご回答頂き
本当にありがとうございました。

教えて頂いたURLを参考に、自分でも勉強してみたいと思います。

書き込みテストについては、ちょっと遅くなると思いますが、また後日、
ご報告したいと思います

本当にいろいろありがとうございました。

今後もよろしくお願い致します。

汀佐五右衛門 さん 2002年 01月 25日 10時 55分 54秒

To: ちゃらさん

Trim関数で対応できると思います。ただし、その行にTABが入っている場合はダメです。

例えば
row = Trim(row)
If (row = "") Then
----
End If
とすれば、空白だけが何文字かあるだけの行も上記If文の条件に合致してくれます。

ちなみにTrim関数の機能は、先頭から続く空白と末尾に続く空白を取り除く、というものです。文字列比較をする場合、私は必ずTrim関数で余計な空白を取るようにしています。

TABに関しては、とりあえずエディタ等を使って、あらかじめTABを空白に変換しておいたらいかがでしょうか。(C言語のTrimはTABも取ってくれるのですが...)

SIGNAL9 さん 2002年 01月 25日 10時 15分 25秒

SIGNAL9でございます。

To:yokaさん
#コマギレになって申し訳ないです。

残念ですが、ぼくの方にはもうWin9Xは存在していないので確たるテストでき
かねますが、できる範囲でテストをしてみました;

■Windows2000 (NTFS5.0 NSS有効)でテキストファイル(TEST.TXT)を作成する。
 さらに、このファイルに文書のプロパティを作成する。

(1)W2K→FATのF/D(DOSでフォーマットしたもの)へ、Win2Kからエクスプロー
 ラの「送る」でコピー

 「ストリーム損失の確認」ダイアログが出る。『ファイルにはいくつかのデ
 ータストリームが含まれていますが、対象のボリュームはこの機能をサポー
 トしていません。そのためデータによっては保存されないものがあります』

(2)W2K→FATのF/D(DOSでフォーマットしたもの)へ、Win2KからDOS窓のCOPY
 コマンドででコピー

 警告もなく単純にコピーされる。コピーされたものはストリームは含まれて
 いない(Win2Kにコピーしなおすと文書のプロパティは消えてしまっている)。

(3)W2K→NT4SP6(NTFS4.0)へ、Win2K側からNTの共有フォルダにエクスプローラ
 でコピー(ドラッグ&ドロップ)。

 警告はない。NT側でDSOFILEで見ても「プロパティなし」になる(DSOFILEの
 マニュアルにも可能なのはWin2Kのみと明記されているのでこれはこれでドキ
 ュメントどおり)。
 ところが、NT側でこのファイルのコピーを作成し、そのファイルをWin2K側
 に戻すと、プロパティはちゃんと残っている(これがちょっと謎。たぶん
 SP3以前のNTでは消えてしまうのでは)。

■Windows2000 (NTFS5.0 NSS有効)でExcelファイル(TEST.XLS)を作成する。
 さらに、このファイルに文書のプロパティを作成する。

(1)W2K→FATのF/D(DOSでフォーマットしたもの)へ、Win2Kからエクスプロー
 ラの「送る」でコピー

 単純にコピーされる。このF/Dのファイルを、他のパソコン(NT)
 上のExcelでみても、文書のプロパティはきちんと表示できる。

つまり、推測できることとして、

・Excelなども、元々OLEドキュメントに対応したアプリで作成した場合、文書のプロパティはそのファイル内部に保持される(これはTEST.XLSをバイナリエディタで開いてみると確認できます)
・OLEドキュメント相当の機能を一般のファイルに持たせるというWin2KのNSSを使用した場合、その情報はファイル実体の外であるストリームに格納される。NSSに互換性のあるデータストリームをサポートする媒体(ボリューム)へコピーした場合、この情報もコピーされるが、コピー先でそれが操作できるとは限らない。

この件に関する簡便な技術的解説は
http://www.microsoft.com/JAPAN/developer/windows2000/techart/ntfs5.asp
などにもあります。
おそらくはNSSは複数のデータストリームのサポートが前提なので、
http://www.microsoft.com/JAPAN/support/kb/articles/J052/8/58.asp
この資料と同様の扱われ方であろうと推測できるかと思います。

ということで、
>VBAがそこに対して編集作業していると理解すればよいのでしょうか
これはファイルシステムのAPIが吸収していると思うのでYES。

>そのプロパティを引継ぐが、ファイルのみのやり取りでは、
>プロパティは引継がれないとの理解でよいのでしょうか
NO.

>それとも、同期?すると考えてよいのでしょうか
基本的にはYES。ただし、前述のようにDSOFILEで弄れるのはWin2Kの場合のみ。

あまりお役に立てず申し訳ありませんでした。

SIGNAL9 さん 2002年 01月 24日 17時 54分 40秒

ということで、ちょっと仕切りなおして訂正させていただきます。

まず、この情報がOLEドキュメントのプロパティであることは間違い
ありません。
つまり、FATだろうがNTFS4.0だろうが、複合ドキュメントという形で
ストリームに吐き出して管理してやれば可能だ‥ということです。
ただし、Windows2000ではNTFS5.0上にNative Structured Storage
(NSS) サービスという形で、いわゆるOLEドキュメントではないファイ
ルを、そのように取り扱うための機能が追加されているということのよ
うです。

SIGNAL9 さん 2002年 01月 24日 17時 32分 57秒

To:yokaさん

申し訳ありませんでした。

まったく大嘘をついていました。

この文書情報は、おそらくファイルシステム(FATかNTFSか)とは直接関係ご
ざいません。
このような記述がありました。
http://www.microsoft.com/JAPAN/developer/library/vccore/_core_providing_summary_information.htm

-------引用
OLE サポートの一環として、Windows 95 アプリケーションでは各ファイルの文書情
報を保存することをお勧めします。つまり、[ファイル] メニューに [文書情報] コ
マンドを用意します。ユーザーはこのコマンドで、ドキュメントのタイトル、キーワ
ードなどの属性を調べることができます。つまり、ドキュメント クラスのコンストラ
クタで COleDocument::EnableCompoundFile を呼び出して複合ファイル形式を使い、
これらの属性を OLE プロパティ セットとしてドキュメントの複合ファイルのルート
ストレージの外にある "\005Summary Information" というストリームに書き出します。
Windows 95 のユーザーは、文書情報を表示して、エクスプローラを使ってファイルの
プロパティを調べることができます。
-------引用

つまり、Windows95でも複合ドキュメントとしてドキュメントを生成すれば、この辺の
情報は保持可能なようです。
ゆえに、この情報はNTFS5.0でしか扱えないというのはまったくの誤りだと思います。
お詫びして訂正いたします。

yoka さん 2002年 01月 24日 15時 55分 43秒

To:SIGNAL9さん

追記です

ファイルのプロパテの編集をVBAのDocumentPropertiesでした場合
DSOFILE.EXEでのプロパティとでは差が発生してしまうのでしょうか

それとも、同期?すると考えてよいのでしょうか

アドバイス よろしくお願い致します。



yoka さん 2002年 01月 24日 15時 43分 06秒

To:SIGNAL9さん

こんにちは SIGNAL9さん いろいろありがとうございます。

>大変失礼しましたm(__)m

いえいえ、まぎらわしい名前ですいません(^_^;)

>yokaさんはおそらくWindows2000以降をお使いなのですね。

はい、Windows2000のプロフェッショナルです。情報が遅くてすみませんm(__)m

>これはいってみれば、ファイルの本体が持っている情報ではありません。
>FATでいうところのディレクトリエントリの相当する管理領域で保持され
>ている情報ですから、互換性のあるNTFS間でしか保持されません。

そうなんですか
この辺、まったく疎くて、興味はあるのですが、どこで知識を得たらよいのか
まったく検討がつきません。

適当なHPでもご紹介頂ければ幸いです。


遅くなりましたが、DSOFILE.EXE 試してみました。

>残念ながら、ぼくの方でテストしたところ、書き込みのほうがうまくいきませ
>んでしたが、読み込みは正常に行えるようです

とのことなので、まだ書き込みテストはしていないのですが
読み込みは、うまく出来ました。

ただ、ループでまわして、単純に取得できないのが、VBAのDocumentPropertiesに
くらべて、ちょっと手間がかかってしまいますね
oDocProp(1)とかしてもうまく出来ませんでした。
それとも、うまい記述があるのでしょうか


で、またまた継続の質疑となって申し訳ないのですが

DSOFILE.EXEとVBAのDocumentPropertiesで触れるプロパテは同じような気がします。
でも、SIGNAL9さんがおっしゃるように別管理の物(NTFS)もあるのだが、それは
VBAがそこに対して編集作業していると理解すればよいのでしょうか

また
FTFS−FTFS間でファイルのやり取りをするときは、フォルダー毎コピーすれば
そのプロパティを引継ぐが、ファイルのみのやり取りでは、プロパティは引継がれない
との理解でよいのでしょうか

>FATでいうところのディレクトリエントリの相当する管理領域で保持され
>ている情報ですから、互換性のあるNTFS間でしか保持されません。

ファルダー<>ディレクトリなので、私の理解がおかしいですか

なんか、変なことをお聞きしているような気もしますが、よろしくお願い致します



書き込みテストについては、また後日、ちょっと遅くなると思いますが
ご報告したいと思います


ちゃら さん (mae4@excite.co.jp) 2002年 01月 24日 15時 29分 27秒

またまたこんにちは。

If分の条件のとこに、Nullまたは空白とか言う条件を
いれたいんですね。
たとえば調べたいのがテキストファイルのとある行で、
そこになにか文字列があるかどうかを調べたいのです。

If row = "" Then
msgbox "Nullです。"
ElseIf row = " " Then
msgbox "空白です。"
End If

↑これですと、Nullか空白一つ分しか引っかかりません。
たとえば空白が10個くらいあって改行とかになってると
それは見つけられませんよね?

特に文字列がなく、改行を行の途中でしてる場合をHITさせる
には、どのように条件かいたらいいでしょうか?
それと、IF〜Thenの間に「または」とか「もしくは」とかいうふうに
複数の条件をかけるのでしょうか?(If a=10 AND b=11 Then みたいに)

それか、IFの条件のところに「何らかの文字列がある場合」とするのも
いいかと思いますが、「何らかの」をどのように書けばいいのか
コレもわからないので(すみません(^^;)どなたか教えてください。

よろしくお願いします。


etebon さん (s-yamas@arksystems.co.jp) 2002年 01月 24日 14時 46分 41秒

WSHのなかで、"Regedit"を実行したいのですが、
どう記述すればよいでしょうか?

やりたいことは、Regeditで書き出しRegファイルを実行することです。
ちなみに、実行後の戻り値(反映されたか)も判断したいと思っています。

誰か教えてくださーい。

SIGANL9 さん 2002年 01月 23日 14時 48分 48秒

#すみません、書き間違えたので訂正します。

>WindowsNTへコピーしてしまうと、作成者名の情報はなくなってしまいます。
失礼、FATへコピーしてしまうと…です。
ちなみに下位バージョンのNTFSのWindowsNTの場合には、表示はエクスプロー
ラの「概要」からは出来ないと思いますが、情報自体はある程度保持されるか
もしれません(Windows2000へ戻せばまたイジれたと記憶しています)

SIGNAL9 さん 2002年 01月 23日 14時 40分 36秒

To:yokaさん

>ちなみに yuka ではなく yoka です(^_^;)
大変失礼しましたm(__)m

>NTFSでは、TXT・CSVファイルでも、これらのファイルに、概要タグの
>プロパティを保存する機能があるということなのでしょうか

yokaさんはおそらくWindows2000以降をお使いなのですね。
NTFSというのは、もともとWindowsNTで導入されたファイルシステムです
が、Windows2000になってかなり機能が拡張されました。
そのひとつが、おっしゃているようなOLEドキュメントの仕様をファイル
システム自体に取り込んだ機能です(おそらく分散ファイルシステムなど
の対応のためでしょうが)。

これはいってみれば、ファイルの本体が持っている情報ではありません。
FATでいうところのディレクトリエントリの相当する管理領域で保持され
ている情報ですから、互換性のあるNTFS間でしか保持されません。
ので、例えばTEST.CSVをWindows2000で作成し、作成者名を入力しておいて、
WindowsNTへコピーしてしまうと、作成者名の情報はなくなってしまいます。

yoka さん 2002年 01月 23日 13時 20分 02秒

To:SIGNAL9さん

こんにちは 詳しい解説ありがとうございます

ちなみに yuka ではなく yoka です(^_^;)


早速質問となってしまいますが


>で、ここでの問題は全般(概要)タブですが。
>ここに出てくる情報で、エクセルやアクセスから”ドキュメントのプロパティ”
>として操作できる項目は、OLEドキュメントのプロパティといいます。OLE
>というのはMSが決めたデータ交換方法のひとつの仕様ですが、これに則って作
>成したドキュメントは、ドキュメント間でのデータのやり取りを行うために、
>決められた形式で自分自身の情報をドキュメント内に保持できるようになって
>います。



>ぼく自身は一太郎を使用していないので知らないのですが、一太郎のファイル
>もOLEドキュメントであるのなら、おそらくMSのWORDやExcelと同じように、OLE
>ドキュメントのプロパティとしてこのあたりの情報を持っているでしょう。

・・・

等、とても理解しやすいかったです。ありがとうございました。

ところで
TXT・CSVファイルは、OLE/COM対応ではないとおもいますが

TXT・CSVファイル共、NTFSのときファイルのプロパティで概要タグが表示され、
そこへ書き込みも出来てしまうのです
FATの時には、概要タグがありません


>とお書きになっているように、NTFSではファイルを読み書きするオペレーティ
>ングシステムの仕掛け(これをファイルシステムといいます)に、ユーザ毎に
>読み書きの権利が割り当てられる機能が付いています。


NTFSでは、TXT・CSVファイルでも、これらのファイルに、概要タグの
プロパティを保存する機能があるということなのでしょうか

また、NTFSで作成されたTXT・CSVファイルをFATで開いたときには
どうなってしまうのでしょうか
あるいは、FATで保存し再度NTFSへもっていったときにはどうなって
しまうのでしょう

なんとなくこの辺がすっきりしない(あたま悪〜)のですが
もう少しご教授お願いできないでしょうか


>#英語ですががんばって読解してください


英語ですか・・・・(~_~;)

DSOFILE 試して見たいと思います。

少し時間がかかってしまうと思いますが 後日ご報告したいと思います。


よろしくお願い致します

かずき さん 2002年 01月 23日 11時 08分 42秒

To:SIGNAL9さん

さっそく教えていただいたとおりやってみました。
ばっちりです。私の考えていたとおりの動作です。

シェル(エクスプローラ)自身は、何もせずとも自身でプロパティにアクセスしているので、
それに類した仕掛けがあると良いなと、思っていたんです。詳しくはこれから英語をじっくり読んでやってみます。
ありがとうございました。

かずき さん 2002年 01月 23日 10時 51分 23秒

To:汀佐五右衛門さん

> SendKeysメソッドの件ですが、先頭に以下の行を追加したらうまく動作しました。
> Set WSHShell = WScript.CreateObject("WScript.Shell")

ありがとうございましたー!
いや、お恥ずかしいです。
「オブジェクトがありません」ってエラーそのまんまじゃないですか。
こんなのでお手数かけましてすみませんでした。

SIGNAL9 さん 2002年 01月 23日 10時 41分 47秒
URL:http://www.vector.co.jp/vpack/browse/person/an016279.html

たまにお邪魔しているSIGNAL9でございますm(__)m

To:かずきさん、yukaさん。

えー、まず簡単な方から(^^;)

yukaさん>また、FATとNTFSによる差はどのように理解すれば
yukaさん>良いのでしょうか

とりあえずセキュリティ機能があるかないかが違うとご理解ください。

yukaさん>FAT時は、全般タブのみが
yukaさん>NTFS時は、全般・セキュリティ・概要タブが
yukaさん>表示されます

とお書きになっているように、NTFSではファイルを読み書きするオペレーティ
ングシステムの仕掛け(これをファイルシステムといいます)に、ユーザ毎に
読み書きの権利が割り当てられる機能が付いています。

で、ここでの問題は全般(概要)タブですが。
ここに出てくる情報で、エクセルやアクセスから”ドキュメントのプロパティ”
として操作できる項目は、OLEドキュメントのプロパティといいます。OLE
というのはMSが決めたデータ交換方法のひとつの仕様ですが、これに則って作
成したドキュメントは、ドキュメント間でのデータのやり取りを行うために、
決められた形式で自分自身の情報をドキュメント内に保持できるようになって
います。

かずきさん>ところで、あるアプリケーション(今回は一太郎ですが)固有のファ
かずきさん>イルのプロパティ値を得るのに、
かずきさん>スクリプト中から直接アクセスするというような都合のいい方法はな
かずきさん>いでしょうか?WSHでは無理ですか。

ぼく自身は一太郎を使用していないので知らないのですが、一太郎のファイル
もOLEドキュメントであるのなら、おそらくMSのWORDやExcelと同じように、OLE
ドキュメントのプロパティとしてこのあたりの情報を持っているでしょう。

さて、これらの情報をWSHから操作する場合ですが、現状(Windows9X/NT/2000)、
もっとも単純なのは、MSが提供しているDSOFILEというプログラム(COMオブジ
ェクト)をシステムにインストールすることです。少なくともファイル名ごとに
アプリをCreateObjectして…というような手間は省けます。

DSOFILEの詳細はこちらにあります。
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q224351
#英語ですががんばって読解してください

こちらをシステムに入れておくと、WSH(やASPから)からこのようなプログラ
ムでOLEドキュメントのプロパティを読み出せます;

'----------------------------------------
Set oFilePropReader = CreateObject("DSOleFile.PropertyReader")

' OLE ドキュメントプロパティの読み込み
Set oDocProp = oFilePropReader.GetDocumentProperties("TEST.XLS")
Wscript.Echo "Name: " & oDocProp.Name
Wscript.Echo "AppName: " & oDocProp.AppName
' Set imgIcon.Picture = oDocProp.Icon
Wscript.Echo "Title: " & oDocProp.Title
Wscript.Echo "Author: " & oDocProp.Author
Wscript.Echo "Comments: " & oDocProp.Comments
WScript.Echo "Subject: " & oDocProp.Subject
WScript.Echo "Category: " & oDocProp.Category
WScript.Echo "Company: " & oDocProp.Company
WScript.Echo "Manager: " & oDocProp.Manager
WScript.Echo "CLSID: " & oDocProp.CLSID
WScript.Echo "ProgID: " & oDocProp.ProgId
WScript.Echo "Word Count: " & oDocProp.WordCount
WScript.Echo "Page Count: " & oDocProp.PageCount
WScript.Echo "Paragraph Count: " & oDocProp.ParagraphCount
WScript.Echo "Line Count: " & oDocProp.LineCount
WScript.Echo "Character Count: " & oDocProp.CharacterCount
WScript.Echo "Character Count (w/spaces): " & oDocProp.CharacterCountWithSpaces
WScript.Echo "Byte Count: " & oDocProp.ByteCount
WScript.Echo "Slide Count: " & oDocProp.SlideCount
WScript.Echo "Note Count: " & oDocProp.PresentationNotes
WScript.Echo "Hidden Slides: " & oDocProp.HiddenSlides
WScript.Echo "MultimediaClips: " & oDocProp.MultimediaClips
WScript.Echo "Last Edited by: " & oDocProp.LastEditedBy
WScript.Echo "Date Created: " & oDocProp.DateCreated
WScript.Echo "Date Last Printed: " & oDocProp.DateLastPrinted
WScript.Echo "Date Last Saved: " & oDocProp.DateLastSaved
WScript.Echo "Total Editing Time (mins): " & oDocProp.TotalEditTime
WScript.Echo "Version: " & oDocProp.Version
WScript.Echo "Revision Number: " & oDocProp.RevisionNumber
WScript.Echo "Template Name: " & oDocProp.Template
WScript.Echo "Presentation Format: " & oDocProp.PresentationFormat
WScript.Echo "Macro: " & CStr(oDocProp.HasMacros)

'書き込み
'文末が化ける…。
' oFilePropReader.UseUnicodePropSets = True
If Not (oDocProp.IsReadOnly) Then
oDocProp.Author = "新作者"
oDocProp.Subject = "新件名"
oDocProp.Comments = "これは新しいコメント" & vbCrLF & "DSOFILEから書き込み"
End If

Set oFilePropReader = Nothing
'----------------------------------------

残念ながら、ぼくの方でテストしたところ、書き込みのほうがうまくいきませ
んでしたが、読み込みは正常に行えるようです。

汀佐五右衛門 さん 2002年 01月 23日 10時 35分 10秒

To: かずきさん

SendKeysメソッドの件ですが、先頭に以下の行を追加したらうまく動作しました。

Set WSHShell = WScript.CreateObject("WScript.Shell")

はずしていたらごめんなさい。

ちゃら さん 2002年 01月 23日 09時 14分 07秒

Toかずきさん

アドバイスありがとうございます。

実はここに投稿したあと、わたしもいろいろ
試してみたら、なんとか思うように動きました。

そうです、OpenTextFileの「ForAppending」を
「8」と記述したら動いたんです。
でもこれって、どっちを記述してもいいんじゃないのかな〜?
なんで文字だと動かないんだろう…

そこがちょっと疑問でしたが、とにかく動きました。
かずきさん、どうもありがとうございました。

かずき さん 2002年 01月 22日 23時 08分 48秒

To:ちゃらさん

私も初心者なのではずしていたらすみません。
以下のようにやってみたら動作しました。
多分、ちゃらさんの期待している動作だと思うのですが。

Dim Fs,f_name,f
Set Fs = CreateObject("Scripting.FileSystemObject")
f_name = "C:\test.txt"
Set f = Fs.OpenTextFile(f_name,8,True)
f.writeLine "Hello!!"
f.write "yahoo!!"
f.close

OpenTextFileメソッドの引数は、
 第1引数はファイル名
 第2引数は読み書きモードを数値指定(1:読み込み2:書き込み8:追記)
 第3引数はファイルがない場合新規作成するか論理値で指定
 第4引数はファイル形式
が指定できるようになっているようです。
やってみてください。

yoka さん 2002年 01月 22日 14時 20分 44秒


はじめまして  よろしくお願い致します

WSH初心者・VBAがやっと使える程度です。
後は知りません(^_^;)。


早速お尋ねしたいのですが


同じWINDOWS2000でもFATとNTFSでは
ファイルのプロパティで表示されるタブが異なるのです

ファイルを右クリックしてプロパティで表示されるダイアログで
CSV・TXTファイルとも

FAT時は、全般タブのみが
NTFS時は、全般・セキュリティ・概要タブが

表示されます


エクセルやアクセスでは、DocumentPropertiesでこの編集が
出来るのですが

WSHでこの辺(エクセル・アクセス・CSV・TXTファイル)
の編集を行うことが可能なのでしょうか
可能なときにはどのように記述したらよいでしょうか


また、FATとNTFSによる差はどのように理解すれば
良いのでしょうか


よろしくお願い致します。



ちゃら さん (mae4@excite.co.jp) 2002年 01月 22日 13時 27分 14秒

こんにちは。

どうしてもうまく動かないスクリプトが
あるので、ちょっとアドバイスを頂きたいのですが…

ファイルを作成して、追加で書き込みをするといった
簡単なスクリプト、のはずだったんですが、どうも
うまく動きません。

Dim Fs,f_name,f

Set Fs = CreateObject("Scripting.FileSystemObject")

f_name = "C:\WINDOWS\筑集眺餅\サンプル.txt"
Set f = Fs.OpenTextFile(f_name)

f.writeLine "Hello!!"
f.write "yahoo!!"

f.close

で、「OpenTextFile」でエラーが出ます。
ファイルはまだ存在していないので、その為かな?
ここの部分を「CreateTextFile」に変更したら
ちゃんとファイルができて、書き込みもできたんですが
このスクリプトをもう一度実行すると、上書きされちゃうんですよね。

OpenTextFileのForAppendingを使いたいのですが、なんか
エラーが出て使えません。

どういうスクリプトにしたいかというと、何度実行しても
ファイルの内容を追加で書き込んでいくようにしたいのです。
ファイルがなければ作成して、あれば追加で、といったカンジです。

エラーメッセージも文字化けで読めないし…ちょっとお手上げです。

どなたかアドバイスお願いします。

かずき さん 2002年 01月 22日 12時 35分 22秒

この掲示板のみなさんは、深夜の書き込みが多いですね。

ところで、あるアプリケーション(今回は一太郎ですが)固有のファイルのプロパティ値を得るのに、
他のプログラム(当該アプリケーションにしろ、エクスプローラにしろ)を自動処理して間接的に取得するのではなく、
スクリプト中から直接アクセスするというような都合のいい方法はないでしょうか?WSHでは無理ですか。

全てのプロパティとはいかなくても、エクスプローラが自身でアクセスしている程度でいいのですが。

かずき さん 2002年 01月 22日 10時 18分 06秒

To: むたぐち さん

一太郎についての質問、お答えいただいていたのに遅くなってすみません。
しばらくネットから離れていたもので。言い訳ですが。

> TARO10.TaroLibraryというのがProgIDだとすれば、とりあえず
> Set taro=WScript.CreateObject("TARO10.TaroLibrary")
> とするところから始まります。

ありがとうございました。
ProgIDというモノが必要なんですね。
ProgIDは、過去の質問の時と同じくJXW.Applicationで大丈夫でした。
それで以下のようにやってみました。

Set taro=WScript.CreateObject("JXW.Application")
S = taro.TaroLibrary.GetDocumentInformation("c:\test.jtd")
MsgBox S(6,2)

関数の呼び出しはできているようなのですが、ファイル名を指定する引数部分でなぜかエラーが出てしまいます。
taro.Documents.Add("c:\test.jtd")
とやってあらかじめファイルを開くようにしてもダメでした。

まあ、いろいろやって動かし方自体は雰囲気つかんだのですが、この方法ですと一太郎自体が起動してこれを操作する形になるので非常に重いです。
やりたいことは、Windowsのファイル一覧から右クリック→プロパティ→ファイルの概要タブ→タイトル欄のコピー、といった操作で十分なので、エクスプローラの自動処理に切り替えようと考えました。
そこで、こちらのサンプルスクリプトを参考に次のようにやってみました。

Const filename="c:\test.jtd"
Set Win = WScript.CreateObject("Shell.Application")
Win.NameSpace(filename).ParentFolder.ParseName(Win.NameSpace(filename).Title).InvokeVerb "プロパティ(&R)"
WScript.Sleep 1000
WSHShell.SendKeys "^{TAB}"
'WScript.Sleep 100
'WSHShell.SendKeys "%T" 'タイトルを選択
'WSHShell.SendKeys "^C" 'コピー
すると、プロパティのウインドウを出すところまではうまくいくのですが、そのウインドウにSendkeysでキーコードが送れないみたいのです。
「オブジェクトがありません」というエラーが出ます。

なにか間違っているのでしょうか。
アドバイスいただけるとうれしいです。

Lib30 さん (lib30@write-off.f2s.com) 2002年 01月 21日 23時 57分 30秒
URL:http://www.ob.aitai.ne.jp/~kazoo/

センター試験、岐阜大学でやったのですが、2日間で交通費が5000円かかってしまった。
片道、電車で1時間かかりました。それだけで戦意の一割を消費。

新聞によれば、今年の試験は難しめで平均点は6〜15点下がるとか。
でも僕はいままでで一番いいできでした。とりあえずひと安心。


>> とうとうあさってはセンター試験。今更あがいてもしょうがないですね。
>
>人は「手抜き」をした事を最も後悔します。勉強も休息も全力で(笑)。

全力で息抜きしてしまいました(笑)。試験の四日前から家庭学習ゼロです。
でも、直前になって勉強しても、焦り、不安が募るだけで逆効果になりかねません。


To 管理人むたぐち さん

> Lib30さんのスクリプトを使わせていただこうかなあ。私に設置のスキルがあるかどうかは疑問だが。

ご自由に。でも、最近「うまく動かない」といったトラブルがいくつか来たので
注意して使ってください。あるいはこの機会にPerlを勉強して自分で作ってしまうとか。
Perlはいいですよ。裏技がたくさんあり、あることを実現するのに別の言語と比べて
かなり短いコードですみます。短いコード、きれいなプログラムを書くのが好きな人には
おすすめです。将来性も結構ありそうですし。


チャブーン さん (mkobu@chabnet.jp) 2002年 01月 19日 00時 51分 15秒
URL:http://www.chabnet.jp/

>むたぐちさん

適切なヒント、恐れ入ります。
おかげで、稚拙ながらなんとかスクリプトを書くことができました。
もっとも最初の構想からすると、トンデモなできですけど。

一応かいときます。なおこれ、メモ帳で書いたのでインデントとか
めちゃくちゃですが、ご容赦をm(_ _)m

----------ログオン時の書き戻し-----------
Dim WshNetwork,fso,FullPath,LogonUsername,LocalProfilePath

const ServerName = "\\ServerName"
const FolderPath = "\profiles$"
const LocalFolderPath = "C:\Windows\Profiles"

set WshNetwork = WScript.CreateObject("Wscript.Network")
' Path の設定
LogonUserName = WshNetWork.UserName
FullPath = ServerName & FolderPath & "\" & LogonUserName
LocalProfilePath = LocalFolderPath & "\" & LogonUserName

' 共有→ローカルへのファイルの書き込み
set fso = CreateObject("Scripting.FileSystemObject")

' 共有フォルダがあればローカル側をいっぺん削除後、書き直す
if (fso.FolderExists(FullPath)) Then
fso.DeleteFile LocalProfilePath & "\*.*", true
fso.DeleteFolder LocalProfilePath & "\*", true
fso.CopyFolder FullPath & "\*", LocalProfilePath & "\", true
fso.CopyFile FullPath & "\*.*", LocalProfilePath & "\", true
' 共有がなければ何もしない
end if


--------ログオフ時の書き出し---------
----------ログオン時の書き戻し-----------
Dim WshNetwork,fso,FullPath,LogonUsername,LocalProfilePath

const ServerName = "\\ServerName"
const FolderPath = "\profiles$"
const LocalFolderPath = "C:\Windows\Profiles"

set WshNetwork = WScript.CreateObject("Wscript.Network")
' Path の設定
LogonUserName = WshNetWork.UserName
FullPath = ServerName & FolderPath & "\" & LogonUserName
LocalProfilePath = LocalFolderPath & "\" & LogonUserName

' ローカル→共有へのファイルの書き込み
set fso = CreateObject("Scripting.FileSystemObject")

' 共有フォルダがあれば共有側をいっぺん削除後、書き出す
if (fso.FolderExists(FullPath)) Then
fso.DeleteFile FullPath & "\*.*", true
fso.DeleteFolder FullPath & "\*", true
fso.CopyFolder LocalProfilePath & "\*", FullPath & "\", true
fso.CopyFile LocalProfilePath & "\*.*", FullPath & "\", true
' 共有がなければ単純コピー
else
fso.CopyFolder LocalProfilePath, FullPath, true
end if
---------------------------------------------------------------
>松島さん

お久しぶりです。いつぞやの飲み会がなつかしいですね(^^;

> キーボードを叩く時間より、設計やアルゴリズムを考えたりヘルプや資料を
> 調べたり精神統一(眠)の時間の方が長かったりしたり……。

確かにそうですね。今回ははまってます(笑)
が、私の場合はほめられたものではないですね、おそらく。
周りの人にどう思われているのか、ちょっとは鑑みないと<私

> 人は「手抜き」をした事を最も後悔します。勉強も休息も全力で(笑)。

達観されていますね。
全く同感です。でも私がいってもいまいち似合わないですね。

では〜。

松島 さん (matsushima@popup.org) 2002年 01月 18日 02時 01分 09秒
URL:http://www.popup.org/ai/

風邪を引いてしまいました。
予兆10時間、症状進行6時間、峠2時間、下り坂12時間、燻り18時間、治り掛け12時間以上。
薬無しの所為か、なかなか完治しません。

To: むたぐち さん

> 捨てるんじゃなくて、強制ダウンロードとかいいかも。

メールで送り付ける、という手があります。

そのうち、P2Pで何処かに保存、という選択肢がアリになってくるかも。
#ホントに「何処か」か分からないのがポイント。

> ・80%くらいのアクセスはお気に入りから。(リファラの有無で判断)

一見さん or ロボット系 or refererを適切に返さないUA が 4/5 ってのは、割合が高いような気がします。

> cronとかgzとかはcgiで使えるのかなあ。

cronは、一定時間置きに指定されたコマンドを実行する、
Windowsで言う所のタスク(スケジューラ)の様なデーモンです。

> /binにはlsしかないけど。

もしかして、ftp専用のbinディレクトリの中身なのでは?

> なんか大抵の元ネタがわかってしまう自分が鬱だ。

言わなきゃ誰も知らなかった物を敢えて言う(爆)。

> 「ハァハァぶらうざ_IE5.5SP2with遙伝説」をGoogleすると意外な事実が。

!?!?

> それはともかく、一日中プログラムを書いてると、発狂しそうになりますね。

仕様書で決められた通りに黙々と処理し続けるのは辛いですよね。

私の場合、新しい技術に触れたり、アルゴリズムを洗練させたり、機能的な改良を加えたり、という作業は楽しいです。
キーボードを叩く時間より、設計やアルゴリズムを考えたりヘルプや資料を調べたり精神統一(眠)の時間の方が長かったりしたり……。


To: 牛タンさん

同じ現象が起きる、最小限のコードを書き込んで貰えると、何かアドバイス出来るかもしれません。


To: Lib30 さん

> 前、なにげに張られていたURLが死体系のサイトへのリンクで、なんの
> 心構えもなく入ってしまったのがトラウマになってるのかも。

荒らされて「死に体」になったサイト? と読み間違えてしまったのはさておき……。
自分の場合、知的好奇心が重なって、そうした画像その物への嫌悪感は薄いです。
不意打ちを食らっても「あー、今はそういうの見たいんじゃなくて……」という位で。

> とうとうあさってはセンター試験。今更あがいてもしょうがないですね。

人は「手抜き」をした事を最も後悔します。勉強も休息も全力で(笑)。


管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2002年 01月 18日 01時 34分 23秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

To: チャブーン さん

> どもども。おひさしぶりです。

どうも。ずいぶんご無沙汰してました。

> Diveさんの掲示板でみたのですが、こちらにお出ましになられるのですね。
> 予定が合ったら、ぜひともお話ししたいもんです。。。Diveさん共々ねぇ〜。

それが平日になっちゃうんですよね…。
いつ抜けられるかもよくわからないし…。ちょっとばかり流動的な状況になるかも。
お会いできるといいですねえ。

少なくとも、チャットはまたやりましょう。

> じつは、以下の動作を実現させるためWSHを使えたらなぁと思っているのですが、
> 掲示板にサンプルコードとかガイシュツしてましたでしょうか?こちらでみた
> 限りでは、見つけられませんでしたm(_ _)m

WSH5.6のヘルプ(リンクのページからDLページにいけます)で、キーワード「UserName プロパティ」を引くと、
いい例があります。これをベースにすればできるのではないかと。

チャブーン さん (mkobu@chabnet.jp) 2002年 01月 18日 00時 59分 16秒
URL:http://www.chabnet.jp/

どもども。おひさしぶりです。

Diveさんの掲示板でみたのですが、こちらにお出ましになられるのですね。
予定が合ったら、ぜひともお話ししたいもんです。。。Diveさん共々ねぇ〜。

さて、今日はちょっとWSH関連でご相談があって、書き込ませていただきます。

じつは、以下の動作を実現させるためWSHを使えたらなぁと思っているのですが、
掲示板にサンプルコードとかガイシュツしてましたでしょうか?こちらでみた
限りでは、見つけられませんでしたm(_ _)m

Win98 でログオン時にログオンユーザアカウントの文字列を取得>
それを変数から置き換えてフルパスを構成(\\comp\share\%username%みたいな)>
できあがったパスを使ってネットワークドライブ(共有フォルダ)へのファイル書き出しおよび共有からの書き戻し

このスクリプトをWin98のログオン時とログアウト時に実行させたいんですよね。
複数のアカウントでシェアリングさせたいので、アカウント名が違った場合にアカウント文字列を含むパスに設定したいんです。

スクリプトの指針でもポインタでもお教えいただけると大変助かります。
久しぶりの書き込みがこんなお願いで恐縮なんですけれど。

よろしくお願いしますm(_ _)m

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2002年 01月 18日 00時 02分 47秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

直しました。ほんとにご迷惑をおかけしました。

ところで、今年導入した各CGIスクリプトなんですが、公開してたページが消えてます。
まさか、私が導入したことと関係はないですよ…ね?



To: Lib30 さん

> とうとうあさってはセンター試験。今更あがいてもしょうがないですね。
> いつも通りパソコンやって、こたつで寝ていよう(笑)

おおっ、いよいよですね。
私はセンター試験をやってる教室を横目に、いつもと変わらず研究室に進入していく
ことでしょう(^^;

> 2chにスレをたてるほどの勇気と度胸がない...。2chはたまに読むだけです。
> 前、なにげに張られていたURLが死体系のサイトへのリンクで、なんの
> 心構えもなく入ってしまったのがトラウマになってるのかも。

死体画像耐性は私もないです。
でも、どれがそういうリンクかは、もう勘でわかるようになりました(^^;

> スクリプトを修正して、3000件ごとにログを別ファイルにして保存しておくことにしました。

その方式がいいですね。一定期間ごとだと、ログファイルの容量が不定になるので、
容量に限りがある場合は使いにくいですね。
というか、今のスクリプトだと、ログファイルが切り替わる前に破綻するので、
手直ししない限りは使い続けることができないのです(^^;

Lib30さんのスクリプトを使わせていただこうかなあ。私に設置のスキルがあるかどうかは疑問だが。

Lib30 さん (lib30@write-off.f2s.com) 2002年 01月 17日 22時 57分 57秒
URL:http://www.ob.aitai.ne.jp/~kazoo/

とうとうあさってはセンター試験。今更あがいてもしょうがないですね。
いつも通りパソコンやって、こたつで寝ていよう(笑)


To むたぐちさん

>> GoogleのPageRankの取得ですが、あれからさっぱりわかりません。
>> 1970年からの秒数かと思ったけれども違うし。ちょっと開発ストップです。
>
>2chにスレ立ててみます?

2chにスレをたてるほどの勇気と度胸がない...。2chはたまに読むだけです。
前、なにげに張られていたURLが死体系のサイトへのリンクで、なんの
心構えもなく入ってしまったのがトラウマになってるのかも。



>> うちにもトップページにアクセス解析を入れていますが、
>> ログが3000件以上になると古いものから順に捨てていくため
>> 500KB程度しかありません。しかも日に訪れるのは約20名。
>> ログは全然たまりません。ある意味悲しいかも。
>
>捨てるんじゃなくて、強制ダウンロードとかいいかも。
>それは無理か。

スクリプトを修正して、3000件ごとにログを別ファイルにして保存しておくことにしました。
ほんとは圧縮したいところですが、それだけの技量がない。



管理人むたぐち さん 2002年 01月 17日 11時 33分 14秒

あっ、ダウンロードカウンタのCGIの設置ミスってます。
あれじゃあ、いくらやってもダウンロードできないですね。
ダウンロードを試してみた方(多分50人くらいいると思います…)、ごめんなさい。
今日中に直します…。お急ぎの方は「アーカイブフォルダを直に開く」をお使いください。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2002年 01月 17日 03時 42分 36秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

DOMエクスプローラは、他にも結構手直ししないと
Win2000用にはならないですね。
たとえば221行目に"Folder2"追加。ただし
ShowWebViewBarricadeメソッドはFolder2にはないので
231行目をコメントアウト。
というか、"Folder2"の項目を別に作った方が早いし、
ME,2000両OS対応になるからいいな。
ついでにXPにも対応して欲しいなあ。

まあ、Shell.Applicationを使ったエクスプローラを操作するスクリプトを
書くときに参考になること請け合いです。
とはいえ、このスクリプト自体、結構未完成なところもあるみたい。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2002年 01月 17日 03時 29分 35秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

海外サイトもたまに行ってみるといいもんです。
http://www.serialscripter.com/
面白いスクリプトがいっぱいあります。ちょっとご紹介。

DOMエクスプローラ
http://www.serialscripter.com/scripts/DOM_Explorer.html

メソッドをどうやって取得してるのかと思ったら、自前で
一覧を持ってるわけね。

119行目
Case "IShellDispatch3"

Case "IShellDispatch3","IShellDispatch2"
にすると、Win2000対応になります。
多分、これを書いた人はWinMEユーザーだと思う。

スクリプトデコーダ
http://www.serialscripter.com/scripts/decovbe.html

VBSで記述されたスクリプトデコーダ。
55-43 管理人むたぐち 2002/01/15 01:08 のエンコーダと組み合わせれば、
エンコードとデコードが自由自在ですね。(で?)



To: かずき さん

> 一太郎文書ファイル.jtd特有のプロパティ(具体的には「タイトル」という項目)を
> WSHのスクリプト中で取得するにはどのようにしたら良いか教えていただけませんか。
>
> 調べてみると、TARO10.TaroLibraryのメンバにGetDocumentInformationという
> 関数があることまではわかったのですが、呼び出し方、結果の受け取り方が
> 分かりません。全然見当違いかもしれないけど。

TARO10.TaroLibraryというのがProgIDだとすれば、とりあえず
Set taro=WScript.CreateObject("TARO10.TaroLibrary")
とするところから始まります。

過去記事にはこういう例がありますが、ProgIDが違うのかな?
→5-44 Hidy 佐野 さん 1999/12/17 12:39
一太郎って、バージョンによってオートメーションの仕様が変わりまくっているっぽくて、
ダメダメですな(^^;

一太郎のオートメーションって、ヘルプには説明がなかったんでしたっけ?



To: ゆみ さん

> 確かに、おっしゃるとおり、実際にやってみればすぐに
> わかることでした。
> ご迷惑をかけました。

いや、ご迷惑なんて思ってませんよ。
私も実際にやってみるまで、知らなかったのですから。
引数省略して使うことはよくありますが、省略時はReadしか使ったことがなかったもんで。
WriteするときはCreateTextFileメソッドを使ってます。(あんまり追記モードってのは使わない)

余談ですけど、OpenAsTextStreamメソッドなんて使うことあるのかな?
ヘルプには、書き込み専用で開ける、と書いてありますが、それはOpenTextFileでも
できますし。(しかし、大昔のバージョンではできなかったような気もする)

ゆみ さん 2002年 01月 16日 16時 54分 46秒

TO 管理人むたぐち 様

回答ありがとうございました。
確かに、おっしゃるとおり、実際にやってみればすぐに
わかることでした。
ご迷惑をかけました。

Return