い〜だ さん (ida@mail.netwave.or.jp) 2002年 03月 04日 10時 13分 30秒

外部アプリケーションの操作についての話題がでているようなので、

便乗質問1
C:\WINDOWS\Application Data\Microsoft\...\Quick Launchに
デスクトップの表示.SCF というエクスプローラコマンドがありますが、
これをVBSから起動させてやることはできないのでしょうか?
AppActivateの前に デスクトップの表示.SCF を実行すれば
何とかなると思うのですが。

便乗質問2
>WMIのWin32_Processを使ってやれば解決します。

ProcessIDと共に、ウインドウのタイトルを取得できないものでしょうか?
WMIのSDKをいろいろつついてみたんですが私の力ではどうにもなりません。


kani さん 2002年 03月 04日 09時 01分 12秒

管理人むたぐち様

拡張子をHTAにするだけで実行できるようになりました。
HTAについては下記サイトを参考にしました。
たびたびの回答どうもありがとうございました。

http://www.asia.microsoft.com/japan/developer/workshop/author/hta/overview/htaoverview.asp#Why
http://msdn.microsoft.com/library/default.asp?url=/workshop/author/hta/reference/htaref.asp

たる さん 2002年 03月 03日 02時 36分 47秒

To: むたぐち さん
>そういえば、WSCのClassIDはどうやって決定するんでしたっけ。
>なんか、ウィザードみたいなのがあったような気も…。

ウィザードということはuuidgen.exeのことじゃないですよね。(C++持っていないのでよく
知らないんですが)ちょっと分からないです。

私のやっているのは、手動で登録してレジストリの中身をclassidに付け足すスクリプトを
書いてやっていますが、作った意義と意味が不明。整形式のXMLであるかのチェックぐらい
う〜ん、またつまらぬものを作ってしまった。

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

To: Nomura さん

> 質問1:外部アプリケーション(この例ではペイントブラシ)
>     をActiveにして、
>     かつちゃんと画面が切り替わり、そのフォームが
>     前面に出る方法はあるでしょうか?

これは、たしかにうまくいかないことがありますね。
いまいち、うまくいく条件というのがわからないんですよね。
26-42 管理人むたぐち 2000/12/20 21:40 とかも参照。

> 質問2:VBSから起動したわけではない、外部アプリケーションの
>     ProgIDの取得をする方法がありますか?(VBScriptの範囲内で)
>     GetObjectはあるようだが、単純なEXEには通用しない模様。

PIDはProgIDのことじゃなくて、ProcessIDのことです。
だから、WMIのWin32_Processを使ってやれば解決します。

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

For Each Process in GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery("select * from Win32_Process where Name='mspaint.exe'")
WshShell.AppActivate Process.ProcessID
Next

厳密にやりたい場合は、NameじゃなくてExecutablePathで検索するといいと思います。



To: kani さん

> 今の時点ではHTAで対応することを考えています。
> (IEのセキュリティが絡んでいるのだと思っています)
>
> 実行しているスクリプトのうち、該当する内容を以下に書き出しておきます。
> JScriptでActiveXObjectを生成する際にランタイムエラーが発生します。
> メッセージ:オートメーションサーバーはオブジェクトを作成できません。

同じコードをHTAにしたら動きます? (HTAにするといっても、拡張子をhtaにするだけのことですが)
もし動くとすれば、おっしゃる通り、セキュリティにひっかかってます。



To: クッキー さん

> フォルダの属性を変えたいと思って、DOSで実行しようと思いました。フォルダ数30くらいある上に名前もそれぞれ違うものですから、ワイルドカードを使おうと思いました。ところが、DOSではフォルダにワイルドカードは使えないということを聞いたので、VBSでしようと思いました。以下のコードで実行しましたが「パスが違います」というエラーが出てしまいました。でも、どう修正すればいいか分からないのです。

とりあえずヘルプを読んでほしいのです。
Folder.SubFoldersが返すFoldersコレクションの
各要素(Folderオブジェクト)を、For Each...Nextを使って取り出し、
取り出した各々のFolderオブジェクトでAttributesを変更してやるわけです。



To: たる さん

> DHTMLのIE4の時のオブジェクトモデルです。
> これ以降は、抜本的な変更はなく機能追加がメインなので今も重宝しています。

IE5以降の日本語版リファレンスってなかったんでしたっけ。
かく言う私も、IE4のDHTML日本語版ヘルプを重宝してますが。

たる さん 2002年 03月 02日 06時 14分 27秒

To:まおまお さん
DHTMLのIE4の時のオブジェクトモデルです。
これ以降は、抜本的な変更はなく機能追加がメインなので今も重宝しています。

http://www.microsoft.com/japan/developer/library/default.asp?URL=/japan/developer/library/jpisdk/dhtml/references/dhtmlrefs.htm

クッキー さん 2002年 03月 01日 19時 08分 56秒

お世話になります。

To 管理人むたぐちさま
掲示板ダウンロードの件、「vbs」の方に書いてあったのですね・・・。気づかなくて申し訳ありません。よく読んでしてみます。

それと、またお尋ねしたいことが出てきたのですが、
フォルダの属性を変えたいと思って、DOSで実行しようと思いました。フォルダ数30くらいある上に名前もそれぞれ違うものですから、ワイルドカードを使おうと思いました。ところが、DOSではフォルダにワイルドカードは使えないということを聞いたので、VBSでしようと思いました。以下のコードで実行しましたが「パスが違います」というエラーが出てしまいました。でも、どう修正すればいいか分からないのです。

フォルダ「f01」〜「f30」まであり、すべての属性を「システム」に変えます。

Option Explicit
Dim objFS, objFolder
Set objFS = WScript.CreateObject("Scripting.FileSystemObject")
Set objFolder = objFS.GetFolder("c:\Windows\f*")
objFolder.Attributes = (objFolder.Attributes - 4) Or 1


kani さん 2002年 03月 01日 10時 07分 38秒

管理人むたぐち様
お忙しい中たびたびの質門にお答えいただき誠にありがとうございます。

方法としてはASP、JSPなども検討中なのですが、
現在は単にイントラネットにある生成済みHTMLをIEで表示し
ボタンクリック時に印刷を行うという方法を試しています。
適用すべき技術についての知識が不十分なために苦しんでいますが、
今の時点ではHTAで対応することを考えています。
(IEのセキュリティが絡んでいるのだと思っています)

実行しているスクリプトのうち、該当する内容を以下に書き出しておきます。
JScriptでActiveXObjectを生成する際にランタイムエラーが発生します。
メッセージ:オートメーションサーバーはオブジェクトを作成できません。

//* JScriptの関数部 *//
function printout() {

 var objWD = new ActiveXObject("Word.Application");
 var docWD;
 objWD.Visible = true;
 docWD = objWD.Documents.Open("C:/試作アプリケーション/test.doc",0,-1); //読取専用属性で開く
}

//* HTMLの該当部 *//
<script type="text/JavaScript" src="printout.js"></script>
<input name="po" type="button" onclick="printout:printout();" value="印刷" class="button"></input>


Nomura さん 2002年 03月 01日 09時 18分 07秒

初めて記入させて頂きます。
本当はマルチポストはよくないことは承知ですが、
他の掲示板はで投稿したところ、1週間Resが全くつかないので、
スクリプト専門のこちらで投稿させてもらいました。

VBScriptのシェル以外から手動で既に起動されている
EXE(例えばペイントブラシ)のWindowをActiveにする
方法で悩んでいます。

とにかくProgIDさえ取得できれば、外部から手動で立ち上げていても
WshShell.AppActivate (ここにProgIDを直接数字で指定)
でアクティブにできることは実験の結果わかりました。
【PIDはタスクマネージャーで手動で確認した】
何かうまい手はありますか?
===============================

vbsファイルの中からExecメソッドを用いて
起動したアプリは以下のような処理でWindow(フォーム)の
アクティブを切り替えることができます。
(例1)

option Explicit
Dim WshShell 'WSH Shellオブジェクト
Dim objExe 'as object
Dim objCalc 'as object

Set WshShell = CreateObject("WScript.Shell")
Set objExe = WshShell.Exec("C:\VBtestProgram\XMLTest\XMLTest.exe")
'XMLTestは自作プログラム
Set objCalc = WshShell.Exec("calc")

WScript.Sleep 1000
WshShell.AppActivate objExe.ProcessID
WshShell.AppActivate objCalc.ProcessID


ここで、VBSとは全く無関係にペイントブラシが
手動操作で事前に起動されているものとします。


WshShell.AppActivate "ペイント"
if err.number <> 0 then
msgbox err.description,vbokonly
end if

この処理を付け加えると、タスクバーのところで
確かにペイントがActiveになり、点滅しますが、
メイン画面ではまったく表示されないまま
隠れています。

質問1:外部アプリケーション(この例ではペイントブラシ)
    をActiveにして、
    かつちゃんと画面が切り替わり、そのフォームが
    前面に出る方法はあるでしょうか?

質問2:VBSから起動したわけではない、外部アプリケーションの
    ProgIDの取得をする方法がありますか?(VBScriptの範囲内で)
    GetObjectはあるようだが、単純なEXEには通用しない模様。

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

To: kani さん

> 当方の希望は
> 「サーバーのHTMLからWordを使用してドキュメントを作成、
> 印刷を行う」ということなのですが、
> それに関してもう一つお聞きしたいことがございます。
> 1.ネットワークマシンにあるHTMLを開いている。
> 2.あるアクション(クリックなど)でWordを起動したい。
>  (この時Wordはローカルのものを開ければよい)
> 3.Wordが起動できない。
>
> Wordを起動できないことがネックになってます。

これってASPの話ですか?
あと、起動できないというのは、具体的にどういうコードを実行した場合
のことでしょうか。



To: たる さん

> registration要素の場所は特に決めなくてもいいみたいですよ。
> PI(Proccessing Instruction)は場所に指定があります。
> ここではpackage要素がdocumentElementなのでその上です。

そういえば、WSCのClassIDはどうやって決定するんでしたっけ。
なんか、ウィザードみたいなのがあったような気も…。



To: モッチョ さん

> WSHでWindows9x系をリモートでシャットダウンできるのでしょうか?

WMIでできますよ。
33-26 管理人むたぐち 2001/03/28 17:39



To: まおまお さん

> やりたい事は、ホームページのデータをテキストに読み込む事です。
> 下のコードのイメージでDocumentオブジェクトをセットし、
> .Body.InnerHTMLでソースを取得しようとしています。
>
> Set IE = CreateObject("InternetExplorer.Application")
> Set Doc = IE.Document
> content = Doc.Body.InnerHTML
>
> が、このページはフレーム構成となっており、フレームの定義部分しか取得
> できず、肝心の本文を読み込むことができません。

これも過去記事にあるなあ…。
26-15 管理人むたぐち 2000/12/15 01:58

> ついでにInternetExplorerオブジェクト(下位のDocumentオブジェクト等
> も含め)についてVBよりで詳しく説明しているページをご存知でしたらおし
> えてください。MSの英語サイトは意味がわかりませんでした・・・

ないと思います。
日本語訳がされる見込みもなさそうなので、英語版MSDNライブラリをあたってください。



To: クッキー さん

> ↑の「また、この掲示板の記事をダウンロードし、Outlook ExpressやDatula等のMUAで読むための拙作スクリプトもどうぞ。」の、ダウンロードまではしてみたものの、それからどうすれば良いのか分かりません。「インポート」はどうすれば良いのでしょうか?よろしくお願いします。

wshbbs.vbsに使い方の説明を書いてるんですが、見てもらえませんでしたか(泣)
あとはお使いのMUAのヘルプを参照してくださいとしか言いようが…。

クッキー さん 2002年 02月 28日 09時 54分 56秒

こんにちは。お世話になります。
↑の「また、この掲示板の記事をダウンロードし、Outlook ExpressやDatula等のMUAで読むための拙作スクリプトもどうぞ。」の、ダウンロードまではしてみたものの、それからどうすれば良いのか分かりません。「インポート」はどうすれば良いのでしょうか?よろしくお願いします。

play さん 2002年 02月 28日 08時 24分 53秒

管理人むたぐちさん、唯一のご回答本当にありがとうございます。
お礼の返信が遅れまして申し訳ありませんでした。
自分で構文解析ルーチンを作成の方向で考えてみます。



まおまお さん (maoma16@infoseek.jp) 2002年 02月 26日 22時 17分 02秒

こんばんわ。
いつもこちらのページを参考にさせていただいてます。

そこで解決出来ない事がありまして、質問させて頂きたいのですが、

やりたい事は、ホームページのデータをテキストに読み込む事です。
下のコードのイメージでDocumentオブジェクトをセットし、
.Body.InnerHTMLでソースを取得しようとしています。

Set IE = CreateObject("InternetExplorer.Application")
Set Doc = IE.Document
content = Doc.Body.InnerHTML

が、このページはフレーム構成となっており、フレームの定義部分しか取得
できず、肝心の本文を読み込むことができません。

Documentオブジェクトの理解が足りない
JavaScriptの知識もまったく無い

という状況ですので、手も足もでません。
どなたか救いの手を差し伸べていただけないものでしょうか。

ついでにInternetExplorerオブジェクト(下位のDocumentオブジェクト等
も含め)についてVBよりで詳しく説明しているページをご存知でしたらおし
えてください。MSの英語サイトは意味がわかりませんでした・・・

モッチョ さん 2002年 02月 26日 20時 44分 39秒

WSHでWindows9x系をリモートでシャットダウンできるのでしょうか?
やるとしたら、押したキーを転送(?)っていうやつでやるんですかねえ。。。。

シナプス さん (sin-horie@mtc.biglobe.ne.jp) 2002年 02月 26日 02時 59分 22秒

上手くいきました。
たるさんどうもありがとうございます。
COMはなんだか説明がごちゃごちゃしていて難しそうな気がして
手を出さなかったのですけど。基本だけなら思ったよりシンプルなんですね.
実際にやってみるものですね。

たる さん 2002年 02月 25日 23時 30分 36秒

To: シナプス さん

>VBScriptでComに挑戦しようと思ったのですが。
おしい。

なるべく要素、属性は小文字で入れましょう。
registration要素の場所は特に決めなくてもいいみたいですよ。
PI(Proccessing Instruction)は場所に指定があります。
ここではpackage要素がdocumentElementなのでその上です。

<?xml version="1.0" ?>
<?Component Error="True" Debug="True"?>
<package>
<component>
<registration progid="progID.myComponents" description="Add One And Two"
version="1" />
<public>
<method Name="myAdd"/>
<property Name="One"/>
<property Name="Two"/>
</public>
<script language="VBScript">
<![CDATA[
Function myADD()
myAdd=One+Two
End Function
]]>
</script>
</component>
</package>

上記を*.wscで保存し登録してからサンプルコード

Set oComponents = CreateObject("progID.myComponents")
oComponents.One = 1
oComponents.Two = 2
MsgBox oComponents.myAdd

クッキー さん 2002年 02月 25日 20時 08分 20秒

To:139さま

コードの添削ありがとうございました。
昨日からウイルス騒動が起きましてお返事が遅れてしまいました(^^ゞ

>原因としては「&」が1個足りない。「lMaxDepth」が訳の分からん事になっている
本当に自分では訳が分からなくなってたので、助かりました(^o^)/

>いちおう以上を修正したら動いたんですけど、それが仕様にあってるかどうかは
>知らないので悪しからず。(何がしたいのかは読んでない…。)
>#はずしてたらゴメンなさい。
全然大丈夫でした!!ありがとうございました。


To:管理人むたぐちさま
To:たるさま

フォルダのプロパティの件、お世話になりました。
上記の件も含め、無事に解決しました。
ありがとうございました。

みゆ さん 2002年 02月 25日 16時 10分 40秒

139様

ご回答ありがとうございます。
返事が遅くなって申し訳ありません。

さっそく試してみます。
また、何かありましたら、よろしくお願いします。

kani さん 2002年 02月 25日 10時 49分 08秒

管理人むたぐち様

過去記事およびそちらから参照されているURLを見てみました。
とても参考になりました。ありがとうございます。
JScriptで簡単に実現できることだと考えていましたが、
もっと関連技術について勉強する必要がありそうです。

当方の希望は
「サーバーのHTMLからWordを使用してドキュメントを作成、
印刷を行う」ということなのですが、
それに関してもう一つお聞きしたいことがございます。
1.ネットワークマシンにあるHTMLを開いている。
2.あるアクション(クリックなど)でWordを起動したい。
 (この時Wordはローカルのものを開ければよい)
3.Wordが起動できない。

Wordを起動できないことがネックになってます。
どんな些細なことでも結構です、何か良い方策がございましたら
皆様よろしくお願いします。

環境
サーバー   Win2000 Server
クライアント Win2000 Pro
Office XP

シナプス さん (sin-horie@mtc.biglobe.ne.jp) 2002年 02月 25日 07時 19分 39秒

http://www.geocities.co.jp/Bookend-Akiko/9813/puroguramu/MyForstCom.txt
VBScriptでComに挑戦しようと思ったのですが。
初挑戦なのでどうもよく分かりません。
特に<registration> の当たりが。
これを取り合えず自分のパソコンで
CreateObjectで呼び出せるようにしたいのですが。

たる さん 2002年 02月 25日 01時 36分 36秒

To:むたぐち さん

>> ちなみに、DIRコマンドはWinMeの出力に準拠しています。
>> なので、他のOSでは改正の余地ありかもしれません。
>Win2000では、dirコマンドの出力形式が全然違うので、根本から書き直さなきゃ
>駄目っぽいです。そもそも/vオプションすらない(^^;
遅ればせながら、XPを入れたのでちょっと確認。
…うわ、確かにこのオプションのあり様ではこの関数を使うことが出来ない。
この関数は存在するログを加工せず2次元でとるものなので畑違い。そもそもLog→DB用なもんで

>WSHの、WshScriptExecオブジェクトを使えば、ファイル化は必要なさそうです。
ですね。作った当初は知らなかったんです。環境も5.5でしたし。
今はそれを知っているのにリライトしなかったのはウォーターフォールのせいです。(なんのこったら)

To: クッキー さん
>お尋ねしたいことというのは、「指定したフォルダの中の最大の階層数」を求めるのは可能なのかなと思いまして・・・。
各々のDir名の\の数から最初のDir名の\の数を引いてその最大
と思ったけど求めるのはDBに入れてからのほうが簡単かな。

139 さん 2002年 02月 24日 23時 48分 17秒

クッキーさま

 ちょこっと見てみました。
 15行目でエラーがでてますねぇ。(dimを1として空白行を含む)

 >" (" & FormatNumber(lSize,0) & " バイト)" & " ファイル数: " _
 >FormatNumber(lFile,0) & "、フォルダ数: " & FormatNumber(lFolder,0) & vbCrLf & " 最深階層: " & (lMaxDepth,0) & vbCrLf

 を以下のように変更してみて下さい。

 " (" & FormatNumber(lSize,0) & " バイト)" & " ファイル数: " & _
 FormatNumber(lFile,0) & "、フォルダ数: " & FormatNumber(lFolder,0) & vbCrLf & " 最深階層: " & lMaxDepth & vbCrLf

 原因としては「&」が1個足りない。「lMaxDepth」が訳の分からん事になっている。
 ですかね。
 いちおう以上を修正したら動いたんですけど、それが仕様にあってるかどうかは
 知らないので悪しからず。(何がしたいのかは読んでない…。)
 #はずしてたらゴメンなさい。
 #このスクリプトを実行するとNortonが反応しちゃってうざいです。

Lib30さま
 >とはいえ、その能力はあるけれどもあえてそこには身をおかないという
 >スタイルもいいですよね。
 そんなタイソウなものではありませんよー。
 わたしは「ぷろぐらみんぐ」で飯を食っていく自信は無いので…。
 気に入らないものをコーディングしていくのは苦痛じゃないですか?


クッキー さん 2002年 02月 24日 20時 15分 08秒

To: 管理人むたぐちさん

お返事ありがとうございます。
むたぐちさんのアドバイスどおりに書き換えたつもりが、エラーが出るようになってしまいました。
私はどこを書き間違えてしまったのでしょうか(T-T)

分からなくなって何度も書き換えた結果、本当に分からなくなってしまいました(>_<)
何度もすみませんが、よろしくお願いします。

Dim lFile,lFolder,lSize,lTotalFile,lTotalFolder,lTotalSize,lMaxDepth,lDepth

Set Fs = WScript.CreateObject("Scripting.FileSystemObject")
For Each sArg In WScript.Arguments
If Fs.FolderExists(sArg) Then
lFile=0 : lFolder=0 : lSize=0 : lMaxDepth=0 : lDepth=0

Set oFolder = Fs.GetFolder(sArg)
Call MakeList(oFolder)
lTotalFile = lTotalFile + lFile
lTotalFolder = lTotalFolder + lFolder
lTotalSize = lTotalSize + lSize
sLines = sLines & oFolder.Path & " サイズ: " & sz(lSize) & _
" (" & FormatNumber(lSize,0) & " バイト)" & " ファイル数: " _
FormatNumber(lFile,0) & "、フォルダ数: " & FormatNumber(lFolder,0) & vbCrLf & " 最深階層: " & (lMaxDepth,0) & vbCrLf
End If
Next

sLines = sLines & "合計 " & " サイズ: " & sz(lTotalSize) & _
" (" & FormatNumber(lTotalSize,0) & " バイト)" & " ファイル数: " & _
FormatNumber(lTotalFile,0) & "、フォルダ数: " & FormatNumber(lTotalFolder,0) & " 最深階層: " & FormatNumber(lTotalMaxDepth,0)

MsgBox sLines

Sub MakeList(Folder)
For Each oFile In Folder.Files
lFile = lFile + 1
lSize = lSize + oFile.Size
Next
For Each oSubFolder In Folder.SubFolders
lFolder = lFolder + 1
lDepth = lDepth + 1
If lDepth > lMaxDepth Then lMaxDepth = lDepth
Call MakeList(oSubFolder)
lDepth = lDepth - 1
Next
End Sub

Function sz (s)
If s=>1073741824 Then
sz=Round(s/1073741824,2) & " GB"
ElseIf s=>1048576 Then
sz=Round(s/1048576,2) & " MB"
ElseIf s=>1024 Then
sz=Round(s/1024,2) & " KB"
Else
sz=s & "バイト"
End If
End Function

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

To: たる さん

> ログ解析ツールのメイン関数の流用でいけるかなと思ったら、一つのプログラム並に正規表現がきつい。
> ちなみに、DIRコマンドはWinMeの出力に準拠しています。
> なので、他のOSでは改正の余地ありかもしれません。

Win2000では、dirコマンドの出力形式が全然違うので、根本から書き直さなきゃ
駄目っぽいです。そもそも/vオプションすらない(^^;

WSHの、WshScriptExecオブジェクトを使えば、ファイル化は必要なさそうです。



To: クッキー さん

> 例えば「一つのフォルダ中にもフォルダが何個もあって、その各フォルダの中にもフォルダがあって・・・」
> 階層がどんどん増えていきますよね。
> お尋ねしたいことというのは、「指定したフォルダの中の最大の階層数」を求めるのは可能なのかなと思いまして・・・。

可能ですよ。
1.DimにlMaxDepth,lDepthの二変数追加。
2.初期化部分でlMaxDepth=0 : lDepth=0
3.sLines = ... & " 最深階層: " & lMaxDepth & vbCrLf のようにする。
4.For Each oSubFolder In Folder.SubFolders
lFolder = lFolder + 1
lDepth = lDepth + 1
If lDepth > lMaxDepth Then lMaxDepth = lDepth
Call MakeList(oSubFolder)
lDepth = lDepth - 1
Next
のようにする。こんなもんでしょう。

クッキー さん 2002年 02月 24日 12時 22分 39秒

To むたぐちさん
To たるさん

さっそくのご回答、ありがとうございます!

すごいですね!試してみたらフォルダの情報がメッセージボックスやテキストファイルに出てきたので、感動です!
それとですね、もう一つお尋ねしたいことが出てきたのですが・・・。

例えば「一つのフォルダ中にもフォルダが何個もあって、その各フォルダの中にもフォルダがあって・・・」
階層がどんどん増えていきますよね。
お尋ねしたいことというのは、「指定したフォルダの中の最大の階層数」を求めるのは可能なのかなと思いまして・・・。

何度もすみませんが、ご教授お願いします。

たる さん 2002年 02月 24日 04時 10分 58秒

To: クッキー さん

こんなもんでどうでしょうか?
ログ解析ツールのメイン関数の流用でいけるかなと思ったら、一つのプログラム並に正規表現がきつい。
ちなみに、DIRコマンドはWinMeの出力に準拠しています。
なので、他のOSでは改正の余地ありかもしれません。
あと、定数csSubRegsWordsBlockの最後はコメントにある通り変えてください。
と思っていたら、先を越されてしまった。
まぁいいや、後で検索しやすいし。投稿しておこうっと。

Option Explicit
Function LogAnalysis(sDir)
'ver0.02 (last'02/02/24)
Const ForReading = 1, ForWriting = 2
Const csRegsWordsBlockBegin = "ディレクトリは"
Const csRegsWordsBlockEnd = " バイトが割り当てられています"
Const csSubRegsWordsBlock = "ディレクトリは(.*?)\r\n[\s\S]*([0-9,]+) 個\s+[0-9,]* バイトのファイルがあります\.\r\n\s+([0-9,]*) ディレクトリ " '最後のディレクトリは半角
Const clMaxSubMaches = 2 '=(取得したい3個のパラメータ - 1)
Dim sCommand
sCommand = "command.com /c dir /s /v " & sDir
Const clMaxMatches = 10000

Dim i, oFS
Dim WshShell, oExec, sInput, sLineInput
Dim oTS, oRegs, oMatches, oMatch, t, sDest, WshProcEnv
Dim alDirAndFileCount()

ReDim alDirAndFileCount(clMaxSubMaches,clMaxMatches)
Set WshShell = CreateObject("WScript.Shell")
Set WshProcEnv = WshShell.Environment("Process")
WshShell.Run sCommand & " >" & WshProcEnv("TEMP") & "\testfile.txt", , True
Set oFS = CreateObject("Scripting.FileSystemObject")
Set oTS = oFS.OpenTextFile(WshProcEnv("TEMP") & "\testfile.txt", ForReading)
Set oRegs = New RegExp
Do While Not oTS.AtEndOfStream
sInput = ""
oRegs.multiline = False
oRegs.Pattern = csRegsWordsBlockBegin
Do
If oTS.AtEndOfStream Then Exit Do
sLineInput = oTS.ReadLine
Loop Until oRegs.Test(sLineInput)
If oTS.AtEndOfStream Then Exit Do
oRegs.Pattern = csRegsWordsBlockEnd
Do
sInput = sInput & sLineInput & vbNewLine
If oTS.AtEndOfStream Then Exit Do
sLineInput = oTS.ReadLine
Loop Until oRegs.Test(sLineInput)
sInput = sInput & sLineInput & vbNewLine
oRegs.multiline = True
oRegs.Pattern = csSubRegsWordsBlock
' MsgBox oRegs.Test(sInput) & vbNewLine & sInput
If Not oRegs.Test(sInput) Then WScript.Quit
Set oMatches = oRegs.Execute(sInput)
Set oMatch = oMatches(0)
' sDest = ""
For i= 0 To oMatch.SubMatches.Count - 1
' sDest = sDest & oMatch.SubMatches(i)
alDirAndFileCount(i, t) = oMatch.SubMatches(i)
Next
MsgBox "ファイル数: " & alDirAndFileCount(1,t) & vbNewLine & "ディレクトリ数: " & alDirAndFileCount(2,t) , , alDirAndFileCount(0, t) '確認用(これをはずすと寡黙)
t = t + 1
Loop
ReDim Preserve alDirAndFileCount(clMaxSubMaches, t - 1)
oTS.Close
Set oTS = Nothing
oFS.DeleteFile WshProcEnv("TEMP") & "\testfile.txt"
Set oFS = Nothing
LogAnalysis = alDirAndFileCount
End Function

Dim avDest, oArgs
Set oArgs = WScript.Arguments
If oArgs.Count <= 0 Then WScript.Quit
avDest = LogAnalysis(oArgs(0))
'このあとavDest(n, t)をお好きなように
'n=0,1,2
'0:Dir名, 1:ファイル数, 2:SubDir数

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

To: Lib30 さん

> 最近はホント何もやることがないので(←勉強しろ!)毎日きてます。
> 早く戻ってこ〜いとか言ってみたり。

はいはい、どうも。戻ってきましたぜ。



To: play さん

> ・VC++6.0(WindowsNT4.0)にて作成した、DLL内機能関数を実行、結果取得するコードを
> コンパイルの必要がなく、簡単にコーディングを行ないたいと考えています。
> (各型宣言、各型入出力引数、各型戻り値等の定義等可能)

WSHというかVBScript、JScriptでは、DLL内関数を実行することは基本的にはできません。
(いわゆるCOMコンポーネント(IUnknownを実装してるもの)は、呼び出し可能)
それと、VBScript、JScriptには変数の型宣言ができません。

結論として、普通のDLLの関数を呼び出すことは、WSH(VBScript・JScript)からは
できないということになります。
スクリプト系の言語なら、Ruby等はDLL呼び出しができるようです。Perlもかな?



To: KOUJI さん

> 何を、押したかを判別することは簡単にできますか?

簡単にはできないですね。
こういう用途には、HTA等が向いていると思います。



To: kani さん

> WSH(JScript)でActiveXObjectを生成する際(具体的にはWord/Excel)に
> リモートサーバー上でオブジェクトを生成する方法というのがあります。
> 以下のように引数にコンピュータ名(IPアドレス)を指定してみましたが
> 当方Wordを生成することができません。

過去にこの話題が出てました。
45-34 管理人むたぐち 2001/09/01 01:53

結局、WMIもリモートWSHもCreateObjectも、みんなDCOMがキモみたいですねえ。



To: クッキー さん

> WSHでフォルダの更新日やサイズを抽出したりするのを読ませていただいたのですが、例えばフォルダのプロパティの中の、「フォルダ数何個、ファイル数何個」という情報を抽出することはできますでしょうか。ちなみに、一つのフォルダだったら、右クリックのプロパティで見れば早いですが、大量のフォルダの情報をリストみたいにしたいのです。

フォルダのプロパティでも、あのファイル数やフォルダ数は、情報として保持されているわけではなく、
サブフォルダを再帰的に検索して、逐一カウントしているわけです。
WSHからも、同様の方法で、ファイル数・フォルダ数を数えてやることは可能です。

…はて、このスクリプト、確かに書いた覚えがあるんですが、どこいったか忘れたなあ。
まあいいや。ひさしぶりに、ここにも書き下ろしスクリプトを載せよう(^^;
フォルダをD&Dしてください。

Dim lFile,lFolder,lSize,lTotalFile,lTotalFolder,lTotalSize

Set Fs = WScript.CreateObject("Scripting.FileSystemObject")
For Each sArg In WScript.Arguments
If Fs.FolderExists(sArg) Then
lFile=0 : lFolder=0 : lSize=0
Set oFolder = Fs.GetFolder(sArg)
Call MakeList(oFolder)
lTotalFile = lTotalFile + lFile
lTotalFolder = lTotalFolder + lFolder
lTotalSize = lTotalSize + lSize
sLines = sLines & oFolder.Path & " サイズ: " & sz(lSize) & _
" (" & FormatNumber(lSize,0) & " バイト)" & " ファイル数: " & _
FormatNumber(lFile,0) & "、フォルダ数: " & FormatNumber(lFolder,0) & vbCrLf
End If
Next

sLines = sLines & "合計 " & " サイズ: " & sz(lTotalSize) & _
" (" & FormatNumber(lTotalSize,0) & " バイト)" & " ファイル数: " & _
FormatNumber(lTotalFile,0) & "、フォルダ数: " & FormatNumber(lTotalFolder,0)

MsgBox sLines

Sub MakeList(Folder)
For Each oFile In Folder.Files
lFile = lFile + 1
lSize = lSize + oFile.Size
Next
For Each oSubFolder In Folder.SubFolders
lFolder = lFolder + 1
Call MakeList(oSubFolder)
Next
End Sub

Function sz (s)
If s=>1073741824 Then
sz=Round(s/1073741824,2) & " GB"
ElseIf s=>1048576 Then
sz=Round(s/1048576,2) & " MB"
ElseIf s=>1024 Then
sz=Round(s/1024,2) & " KB"
Else
sz=s & "バイト"
End If
End Function


クッキー さん 2002年 02月 23日 12時 31分 02秒

こんにちは。はじめて質問させていただきます。
WSHでフォルダの更新日やサイズを抽出したりするのを読ませていただいたのですが、例えばフォルダのプロパティの中の、「フォルダ数何個、ファイル数何個」という情報を抽出することはできますでしょうか。ちなみに、一つのフォルダだったら、右クリックのプロパティで見れば早いですが、大量のフォルダの情報をリストみたいにしたいのです。

kani さん 2002年 02月 22日 19時 32分 43秒

はじめて投稿いたします。よろしくお願いします。

【質問】
WSH(JScript)でActiveXObjectを生成する際(具体的にはWord/Excel)に
リモートサーバー上でオブジェクトを生成する方法というのがあります。
以下のように引数にコンピュータ名(IPアドレス)を指定してみましたが
当方Wordを生成することができません。

var objWD = new ActiveXObject("Word.Application","PC01");
var objWD = new ActiveXObject("Word.Application","192.168.0.132");

【参照】
MSDNライブラリのページ(解説の一番下の方にあります)
http://www.microsoft.com/JAPAN/developer/library/script56/js56jsobjactivexobject.htm

どなたか実現されている方がおりましたら状況を教えて頂きたいです。

KOUJI さん 2002年 02月 22日 11時 39分 20秒

この前は、有難うございました。
早速ですが、質問です。
WSH2.0では、キーを送れるようですが、
何を、押したかを判別することは簡単にできますか?
たとえば、↑ キーを押したなら、MsgBoxを表示させるとか、
    ENTER キーを押したなら、音をだす
など、ゲーム系で、使われるような、コマンド?が使いたいです。
よろしければ、どなたか、簡単な、例文をかいていただけるとうれしいです。
宜しくお願いします。

play さん 2002年 02月 22日 10時 08分 22秒

こんにちははじめまして、playといいます。

VBS等スクリプト/インタプリタの知識は、ほとんど無い者です。(スイマセン)
変な質問内容となっていましたら申し訳ありません。

・VC++6.0(WindowsNT4.0)にて作成した、DLL内機能関数を実行、結果取得するコードを
コンパイルの必要がなく、簡単にコーディングを行ないたいと考えています。
(各型宣言、各型入出力引数、各型戻り値等の定義等可能)

他に
・分岐条件は、if, else if, else, goto 等で良い。
・ステップ実行が可能。
等々...

とりあえずこの内容で、WSHが適切であるか、自分で
構文解析ルーチンを作成した方が良いのか、また他の良いものがあるか、判断ができかねています。

どなたかご助言をお願いします。

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

任意ナビ復活。
http://www.roy.hi-ho.ne.jp/cgi-bin/user/mutaguchi/clickcnt.cgi?http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/src/navi2.lzh

Lib30 さん 2002年 02月 22日 01時 05分 56秒

ハードディスクが逝ってしまった(涙)。
やはりこの前ふたを開けたのが原因だと思います。
そのときはふたを閉じたら元に戻ったので、油断して
あたらしめのファイルしかバックアップしてませんでした。
おそらく物理的な故障だと思われるので復旧は絶望的(涙)。
入試直前にもかかわらず毎日勉強もせずパソコンばっかやってたので
バチがあたったのかも。


To 139さん

>>優勝すると$10000とGoole本社にVIP招待だとか。良い案が思いついたら応募してみようかなあ。
>Goole本社に招待されても…。英語がわからん。
>わたしは「ぷろぐらまー」では無いので無理ですが、頑張って下さい。

cshでCGIを組めるような人間は十分「プログラマー」でしょう(笑い)
とはいえ、その能力はあるけれどもあえてそこには身をおかないという
スタイルもいいですよね。
まあ、こういう場合、重要なのはプログラミング力よりもアイデアだと思うので、
いい案が思いついたらコーティングは外注(=詳しい友人に頼む)というのもありです。


To 管理人さん

最近はホント何もやることがないので(←勉強しろ!)毎日きてます。
早く戻ってこ〜いとか言ってみたり。

139 さん 2002年 02月 22日 00時 21分 12秒

こんばんは。
1日中cshでCGI組んでたら頭痛いです。

管理人さま、汀佐五右衛門さま(←読めません…。)
 レスありがとうございます。
 >BASP21のソケットコントロールを使ってやるというのは?
 あっ!すっかり忘れてました。
 気が向いたら組み直します。

 >StdOutプロパティ
 残念ながら無理かと。
 1.win98ではTELNETすると別プログラムが起動しStdOutに返さない。
 2.標準TELNETまたはCUI版TELNETには「Quit」が送れない。
 が難点となっています。
 #私はPingはBAT+VBAで作ってました。(今思えばちゃちい。)
 #System Scripting Runtime を使えばWSHからPingができますよ。
 #↑はnslookupも出来るのが素晴らしいです。
 #NTやUnix/Linuxを使わなくていいので楽チンです。

dragon さん 2002年 02月 21日 19時 05分 08秒

dragonです。

解決いたしました。
下記部分を
WSH.run "C:\My Documents\VBS_test\Ion\mdcp.exe"

WSH.run """C:\My Documents\VBS_test\Ion\mdcp.exe"""
上記の様に変更すれば実行されました。
("""は、Runメソッドがロングファイルネームに完全対応したいないため)
これで、自由にHTMLからアプリケーションを起動できます。
お騒がせしました。

SATA さん 2002年 02月 21日 15時 29分 41秒

To: 139さん
VBScriptのリファレンスだけ見てWSHのリファレンスを見てませんでした。
WScript.Quitで希望どおりの動作をできました。
ありがとうございました。

dragon さん 2002年 02月 21日 13時 26分 34秒

初めましてdragonといいます。

VBScriptを調べていて、ここにたどり着きました。
早速で申し訳ありませんが、教えていただきたいことがあります。

HTMLで以下のリストを作りました。
...(略)
sub douyo()
dim WSH
Set WSH = CreateObject("WScript.Shell")
WSH.run "C:\My Documents\VBS_test\Ion\mdcp.exe"
end sub
...(略)
<INPUT TYPE=button value="run" OnClick=douyo()>
...(略)
実行してみましたが、下記のエラーがでました。
「指定されたファイルが見つかりません。」
フルパスで書いたり、相対パスで書いたりしたのですが
同様の結果になってしまいます。
しかし、この部分を切り出して、VBSファイルにして実行すると、
ちゃんと起動するのです。
解決方法が解らずこまっています。
どなたかご存知の方御教授ください。よろしくお願いします。

汀佐五右衛門 さん 2002年 02月 21日 09時 57分 57秒

To: 139さん

>WHSでTELNET(正確にはTELNETではないのですが)する方法があれば教えて下さい。
>目的はSMTP,POPポートの監視です。

上記ですが、WSH5.6の新機能である標準I/OストリームにアクセスするStdOutプロパティ(WshScriptExecオブジェクト)で実現できないでしょうか。はずしてたらごめんなさい。

私事ですが、以前Perlを使ってpingの出力メッセージからnetwork接続の診断をするプログラムを作成しました。そのとき使ったのがバッククォートによるコマンド置換だったのですが、上記オブジェクトを使えば同じことができるようです。ちょっと試してみただけなので実績というほどのものはありません。 

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

To: KOUJI さん

> vbにあるkeydownはvbsではあるんでしょうか?というのは、、、
> エクセルのE12のところでenterを押した場合、G12にとぶというのを
> とりあえずつくりたいのです。(vbsで)

できるかどうかわかりませんが、とりあえず、

WScript.ConnectObjectでアクティブシート?のオブジェクトに接続し、
keydownイベントをバインドしてみてください。

その際、
Do
WScript.Sleep 100
Loop
のような空ループを回しておいて、keydownイベント発生前に、スクリプトが終了しないように
してください。



To: 139 さん

> 少しづつ投稿件数増えてるような気がしてるのですが…。

2chと掛け持ちだと睡眠時間が削られるので、最近はこっちが
どうも放置プレイ気味ですねえ。昔はそれこそ毎日返信書いてました(^^;

>  E12のところで押すという事はEXCELを開いてるって事ですよね。
>  VBAマクロで作った方が楽なのでは?

と私も思うけど、あえてチャレンジしてみるってことかな、と。



To: Lib30 さん

> WSHとは関係ないのですが、Gooleがプログラミングコンテストをやってるみたいです。
> http://www.google.com/programming-contest/
> ここのページのコードに「興味深い機能」を付加しろというものらしいです。
> 優勝すると$10000とGoole本社にVIP招待だとか。良い案が思いついたら応募してみようかなあ。

http://pc.2ch.net/test/read.cgi/tech/1013181405/ 盛り上がってないけど。

私は最近、自分的ブーム再来の「何か」とからめてなんかやりたいな。
いや、ちょっと考えてるんだけど、対象がメジャーになり得ぬものだから、賞金とか
そういうのは関係ないけど。

> >改行以外の文字列にヒットさせるのって、正しくはどういうパターンを書けば
> >いいんでしょう。
> >普通なら、[^\n]とかでいいと思うんですが。
>
> .じゃダメですか?っていうかネタ?

いや、マジボケです。もう寝ます。



To: 139 さん

>  WHSでTELNET(正確にはTELNETではないのですが)する方法があれば教えて下さい。

あ、139さんてば、WSHをWHSと書き間違えてますよ。

>  目的はSMTP,POPポートの監視です。
>  流れとしては
>  1.Telnet mail.xxx.xxx.jp 25(or 110)
>  2.ログオンメッセージ?「Welcome … ESMTP …」を拾ってくる。
>  3.ログオンメッセージが拾えなかったらメールを飛ばす。
>  という感じにしたいのです。

BASP21のソケットコントロールを使ってやるというのは?

139 さん 2002年 02月 20日 23時 43分 17秒

Lib30さま
 >優勝すると$10000とGoole本社にVIP招待だとか。良い案が思いついたら応募してみようかなあ。
 Goole本社に招待されても…。英語がわからん。
 わたしは「ぷろぐらまー」では無いので無理ですが、頑張って下さい。

これだけ書き込むのも何なので、ついでに質問を。
 WHSでTELNET(正確にはTELNETではないのですが)する方法があれば教えて下さい。
 目的はSMTP,POPポートの監視です。
 流れとしては
 1.Telnet mail.xxx.xxx.jp 25(or 110)
 2.ログオンメッセージ?「Welcome … ESMTP …」を拾ってくる。
 3.ログオンメッセージが拾えなかったらメールを飛ばす。
 という感じにしたいのです。

 今は、TeraTermでマクロを組んで、それをVBSから呼び出しているのですが
 20分毎に24時間呼び出し続けていると、TeraTermだかWindowsがエラーを出
 してしまいます。
 1日1回自動で再起動をかけているのですが、3日に1度ほどエラーが出てしま
 います。
 環境はWin98SEで、そのスクリプト専用機です。(HTTPの監視もしてますが)
 お金と時間のかからない良い方法があればご教授ください。



Lib30 さん (lib30@write-off.port5.com) 2002年 02月 20日 22時 47分 37秒
URL:http://www.ob.aitai.ne.jp/~kazoo/

WSHとは関係ないのですが、Gooleがプログラミングコンテストをやってるみたいです。
http://www.google.com/programming-contest/
ここのページのコードに「興味深い機能」を付加しろというものらしいです。
優勝すると$10000とGoole本社にVIP招待だとか。良い案が思いついたら応募してみようかなあ。




To みゆ さん

>Set LogFile = FSO.CreateTextFile(LogPATH, True)
>
>で、ログファイルがあればクリア、なければ作成という感じにしたのですが、
>この場合に、ログが作成できないという可能性はあるでしょうか?
>また、その場合にはどのようなことで判断できるでしょうか?

可能性としては、ログが既に存在し、それが読みとり専用属性だったり他のプロセスで
ロックされてたりする場合があります。その際はエラーが発生するのでそのエラーを
トラップすればログの作成に失敗したと考えることができるのではないでしょうか。



To 管理人さん

>改行以外の文字列にヒットさせるのって、正しくはどういうパターンを書けば
>いいんでしょう。
>普通なら、[^\n]とかでいいと思うんですが。

.じゃダメですか?っていうかネタ?


139 さん 2002年 02月 20日 22時 20分 20秒

管理人さま
>この掲示板から私がいなくなることも、ないとは言い切れないかも(^^;
それは寂しいですね。
少しづつ投稿件数増えてるような気がしてるのですが…。

SATAさま
 Quitメソッドでは駄目でしょうか?
 Wscript.quit ←こんな感じ。

KUJIさま
 >エクセルのE12のところでenterを押した場合、G12にとぶ
 何故VBSで作る必要があるのでしょう?
 E12のところで押すという事はEXCELを開いてるって事ですよね。
 VBAマクロで作った方が楽なのでは?
 #EXCELの入力規則機能かなんかで実現できそうな気がしないでも…。

#みなさまへ:何か間違っていたら訂正しといて下さいませ。


SATA さん (sata@hicat.ne.jp) 2002年 02月 20日 16時 51分 10秒

はじめまして、VBSのことで教えてください。

VBのEndステートメントの様にスクリプト自体を終了する命令は
無いのでしょうか。

やりたい事は最初にWScript.Argumentsから取得したパラメータのチェックを
行いエラーの場合はスクリプトを終了させたいのです。
現在はチェック後のメインルーチンを関数化して正常時のみその関数を
呼び出すようにしています。

宜しくお願いします。

KOUJI さん (shakityaki@hotmail.com) 2002年 02月 20日 16時 37分 46秒

vbにあるkeydownはvbsではあるんでしょうか?というのは、、、
エクセルのE12のところでenterを押した場合、G12にとぶというのを
とりあえずつくりたいのです。(vbsで)
分かる方、是非、教えてください。
宜しくお願いします。

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

最近2chに書き込むネタを作る時間が、この掲示板よりだいぶん長くなってきてます。
やっぱり、人がたくさん見てるところだと反響も大きいので、やっててやりがいが
あるのです。この掲示板から私がいなくなることも、ないとは言い切れないかも(^^;

WSHスレ、フォルダカスタマイズスレについてはもう書いたので、今回はもう一つ、
私が出没するスレを。
http://pc.2ch.net/test/read.cgi/win/1011990181/ 「何か」スレ。
今、AIとか単語学習とかWeb上のテキストを取り込んでどうとか、結構
おもしろい議論になってます。

私も以前作った「任意ナビ」で参戦したいところなのですが、そのままでは
いろいろと不都合があるので、書き直してます。
HTAにsstp_nh.ocxを組み込み、window.openでナビゲートさせるウィンドウを開き、
そのonloadイベントをGetRefするようにしました。
ってこの説明でわかる人はつわものかも。



To: FOMA & FOMA さん

> AcrobatReaderのOLE Automationを使用していますが全文を印刷する時に、printpageやprintpagessilent等を使用するには、ページ番号を指定する必要があります。開いたPDFファイルの総ページ数を取得する方法をご存知の方、教えて頂けないでしょうか?

CAcroPDDocクラスに、GetNumPagesメソッドってのがありますね。
これだと思うんですが、使い方は良くわかりません。
というか、これはReaderじゃないAcrobatの機能でした。

gotoNextPageとprintをエラーが出るまで繰り返す、とかはだめですかね。



To: かめ さん

> サーバー上のプログラムを実行したいのですが、実行を許可するはずのWSHが組み込まれたWindowsscript.admを発見できません。

結論から言うと、Windowsscript.admはこの世には存在しないらしいです。
詳しくは、
http://pc.2ch.net/test/read.cgi/win/1009175619/299- (って私の書き込みですが)
でも、結局、この方はリモートWSHうまくできなかったらしい。

どなたか、この方法でリモートWSHを動作できている方、いませんかねえ。
DCOMの構成がポイントだと思うのですが。DCOMの構成については、WMIの話題のときに
触れてますので参考にしてください。
28-36 管理人むたぐち 2001/01/18 11:20
28-46 管理人むたぐち 2001/01/21 20:41
33-26 管理人むたぐち 2001/03/28 17:39
あたり。


To: Lib30 さん

> ものつくり大学合格しました。

おめでとうございます。

入試といえば、http://www.menkaishazetsu.com/txt/j-chugaku.html 激しくワラタ。

> 名前を見て一瞬引きました。まるみエッチDって...。

無駄に凝った命名だなあ。

> Windowsでは改行は\r\nなのでは?

これがWindowsで正規表現を扱う上で、面倒な問題を発生してるような気が
するんですが。
改行以外の文字列にヒットさせるのって、正しくはどういうパターンを書けば
いいんでしょう。
普通なら、[^\n]とかでいいと思うんですが。

Lib30 さん (lib30@write-off.port5.com) 2002年 02月 19日 23時 34分 41秒
URL:http://www.ob.aitai.ne.jp/~kazoo/

ものつくり大学合格しました。
去年は何かと話題になった大学ですが、一応私立では第一志望です。
というか、ほかの私大は全部受からなかった(涙)



To むたぐち さん

>> またWSHと関係ない話ですが、秋葉原でこれを買ってきました。
>> http://mac.akibakan.com/select/#marumihd
>
>怪しいもの好きなんですか?
>この手の(笑)
>http://akiba.ascii24.com/akiba/news/2002/02/15/633656-000.html


別にそういった変なものが好きというわけではないのですが、
ハードディスクが実際動く様子を見てみたかったのです。
前に雑誌に載って他のを見つけてどうしてもほしかったのですが、
名前を見て一瞬引きました。まるみエッチDって...。


To ひっし さん

Windowsでは改行は\r\nなのでは?


139 さん 2002年 02月 19日 22時 09分 54秒

みゆさま

CreateTextFile(LogPATH, True)
の第2引数は上書きの可否しか行えないと思うのですが?
FileExists メソッドを使って処理して見てください。

かめ さん (kamimura@jck.net) 2002年 02月 19日 19時 02分 03秒

リモートアクセスのやり方を教えてください!!

 WSHの機能で離れた場所のコンピュータにアクセスして、プログラムを実行することが出来ることが紹介されていました。クライアントはWin98でサーバはWin2000で
サーバー上のプログラムを実行したいのですが、実行を許可するはずのWSHが組み込まれたWindowsscript.admを発見できません。

 ご存知のかた、教えてください。

みゆ さん 2002年 02月 19日 12時 24分 47秒

はじめまして、みゆといいます
最近WSHをはじめた初心者です。

Set LogFile = FSO.CreateTextFile(LogPATH, True)

で、ログファイルがあればクリア、なければ作成という感じにしたのですが、
この場合に、ログが作成できないという可能性はあるでしょうか?
また、その場合にはどのようなことで判断できるでしょうか?

どなたか、知っている方がいらしたら教えてください。

Fujita さん (mt3-akt@abox4.so-net.ne.jp) 2002年 02月 19日 08時 53分 37秒

To 土屋さん

>CreateTextFileではなくて、OpenTextFileを追加書込みで使います。
>こんなところでどうでしょう。

なるほど、OpenTextFileを使えば出来るのですね。
試してみます。
ありがとうございました。また分からなくなったら、質問させて頂きます。

土屋 さん 2002年 02月 19日 08時 47分 46秒

Dear Fujita さん

CreateTextFileではなくて、OpenTextFileを追加書込みで使います。
こんなところでどうでしょう。

Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim FS, objFile, Intext
Intext = InputBox("追加する項目を入力して下さい。","追加項目入力")
Set FS = CreateObject("Scripting.FileSystemObject")
Set objFile = FS.OpenTextFile("c:\testfile.txt", ForAppending, True)
objFile.WriteLine Intext
objFile.Close
Set objFile = Nothing
Set FS = Nothing

Return