またきました > Badtrans
To SIGNAL9 さん
BASP21の掲示板で発見。
>ちょっとした検査スクリプトを書いてみました。
実行してみたところ、どうも、うちのは大丈夫なようです(よかった)。
Badtransはメールを開いたりプレビューするだけでも感染するようですね。
今のところ、Nortonが水際で止めているので被害を免れています。
そういうわけで、ちょっとNortonは常駐をはずせません。> 土屋 さん
To 土屋 さん
>これって、NortonやMDMなどの常駐ソフトとの相性の問題ってないですか?
>特にMDM(VSなどをインストールするとすぐ常駐するようになります)をはずしたら、
>うわさに高いMEが、最近めったに落ちなくなってます。
ん?MDMってなんでしょう?タスクマネージャーでプロセス一覧を見ても
ないようですが(VBはインストールされているのですが)。
初めて投稿します。
Win9xで、ドメインにログインしたときの
ドメインサーバー名を取得する方法って
誰かご存じですか?
WinNTは分かるのですが・・・
よろしくお願いします。
To:むたぐちさん
>いえいえ、待ってました。
どうもありがとうございます。
>・Efx_Capture.vbsが「パラメータが間違っています」というエラーになります。
げげ。いちおうチェックはWinNT4.0SP6SRPとWin2KSP2SRPで行ってるんですが。
むたぐちさん、OSは何をお使いでしたっけ。
もし9X系ですと、OS依存度の高いAPIも若干入ってますんで、9X〜Meだと動かない
のもあるかもしれません…(XPはインストールすらしていない)
手元に9Xがないんでテストが十分にできず申し訳ないです。
>・壁紙を設定したとき、レジストリが書き換わっていないような気が…?
えっと、これは故意にそうしてあります。この機能の使い方を考えるに、ログオン
中に定期的に書き換えとか、そういう用途かな、と思ったものと、「レジストリは
いじりません」というのがいちおう仕様といえば仕様なんで(ドキュメントに書いと
けばよかったですね^^;)。
やっぱり書き込んだほうがよろしいでしょうか。
>あと、LZWに関してですが、特許に触れないデコード法を採用してはいかがでしょう?
これなんですが、デコードはよしとしてもエンコードが問題なんで…。GIFのRLEという
手もある(実際には内部的には使える状態にはした)んですが、どーも互換性の問題も
ありまして、ああいう玉虫色にさせてもらってます。
おそらく、次の版ではGIFは切り捨てることにすると思います。
#…次の版があればですが(^^;;)
#最近、MS系の洗脳ぢゃない技術セミナーなんかいくと
#「COMはもう終わりね。今からなんか作るんなら.NETにしてちょ」と言われまくって
#るんで。
To: 土屋 さん
> > WMIへの入門
> > マイクロソフト・ウインドウズ管理手段(WMI)技術は
> > デスクトップ管理特別対策本部の(DMTF)ウェブ・ベースの
> > 企業管理(WBEM)イニシアチブおよびDMTF共通情報モデル(CIM)の
> > インプリメンテーションです。
>
> だそうな。おおっ。なんだか凄そうだぞ。(さっぱり意味はわかってませんが)
> DMTFなんて特に凄そう。。。
デスクトップ管理特別対策本部!
ぜひうちのデスクトップを守ってほしい。
日本語ならこういうのがありましたよ。
http://www.microsoft.com/japan/technet/win2000/win2ksrv/prodfact/wmixwdm.asp
ん? 1998年?
http://www.google.com/search?hl=ja&q=DMTF+wbem&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
検索すると、MS以外のページがいっぱい引っかかります。別にMSの技術という
わけではないですしね。
> http://csx.jp/~tsuchiya/
> こんなのはどうでしょう。あちこちに投稿したものなんかをまとめてみようかと。
おお、いいですね。
リンク張らせていただきます。
もう一つのページとは、今後使い分けされていくのでしょうか? (スクリプト関係は新ページに移動とか)
To: SIGNAL9 さん
> えー、お待たせしました(別に待っちゃいない?^^;)
いえいえ、待ってました。
> Doodle2のVectorへの登録が完了しました。
> http://www.vector.co.jp/soft/winnt/prog/se219120.html
>
> まだまだ不具合も多いかと思いますが、御笑覧いただければ幸いです。
さっそくダウンロードしてみました。
サンプルスクリプトを動かしてみて、気づいた点をいくつか。
・Efx_Capture.vbsが「パラメータが間違っています」というエラーになります。
・壁紙を設定したとき、レジストリが書き換わっていないような気が…?
私も何かDoodle2を使ったスクリプトを書いてみたいですね。
謝辞にご紹介、どうもありがとうございます。
あと、LZWに関してですが、特許に触れないデコード法を採用してはいかがでしょう?
29-39 松島 さん 2001/01/30 01:19
http://homepage1.nifty.com/uchi/software.htm
> #むたぐちさん、お手数ですが、リンクをまた張っていただけるのでしたら、
> #こちらの方にしていただけますか。旧番はしばらく削除せずに残しておこう
> #かと思いますが、あちらはもうスクラップにするつもりですので。
了解です。
> そうそう、owcというのは Office Web コンポーネントというコントロールです。
おー、すげー! あ、もう遅いのでOWCに関しては後日コメントしますです。おやすみー。
To:Lib30 さん
>さいきん W32.Badtrans.B というウイルスがはやっていますが、
>うちにもメールに載ってやってきました。しかも4回も。
>ほとんどは知らない人からでしたが(知っている人からのもあった)
ちょっとした検査スクリプトを書いてみました。
ここのスクリプト中のURLに書いてあることを読めば何故なのかはLib30さんなら納得いくかと思います。
かかった場合のテストは出来ませんのでひょっとしたら漏れがあるかも。
Set WSHShell = Wscript.CreateObject("Wscript.Shell")
On Error Resume Next
sRegValue = WSHShell.RegRead ("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\")
'bFlag = Err.Number <> 0
Err.Clear
If InStr(sRegValue,"kernel32") <> 0 Then
Msgbox "BADTRANS.Bに罹っています。詳しくはこちら", vbExclamation, "ウィルス発見"
Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate "http://www.trendmicro.co.jp/virusinfo/default3.asp?VName=WORM_BADTRANS.B"
Do While IE.Busy:WScript.Sleep 100:Loop
IE.Visible=True
Else
Msgbox "BADTRANS.Bには罹っていないようです。", vbInformation ,"ウィルス情報"
End If
それにしても送った側は分からないみたいですね。
なので、もし受けたら警告メールを出されるようにした方が親切かも知れません。
もし、このスクリプトをローカルで実行するときは感染したPCは下記の症状を伴いますので、
なるべくVirusCheck.vbsみたいなありがちな名前にしないほうが良いと思います。
#すべてのキー入力を入力したユーザー名や入力された時間などの情報とともに記録します。
#ワームは記録した情報をメールにて予め決められた任意のアドレスに送信します。
ところで質問があります。"%sysdir%\kernel32.exe"というプログラムが提供するサービス(名前は分かりません)を殺したいのですが、
どうやったら出来ますでしょうか?
あと"%sysdir%\kdll.dll"というDLLの常駐も殺したいです。
こういったものは名前がわからないと無理なんでしょうか。
以前お世話になりましたが、また質問です。
UNIXシェルではプログラムの中断(Cntl-C等)を認識できますが、
WSHにはこれに相当するコマンドは無いのでしょうか。
UNIXシェル例)
trap "echo SIGNAL traped; rm -f tmp$$.* ; exit 10" 1 2 15
のようにして中断終了時に一時ファイルを削除したいのです。
ご存知の方がおられましたらお教え願います。
土屋さん>
はじめまして。
>> sendkeysと同等で、アクティブウインドウに2バイト文字を送信するには
>WSHだとSendMessageなどのAPI使うわけにもいかないので、
>いったん漢字をクリップボードに送ったあと、
>SendKeysで^Vで貼り付けるという具合になるのでは。
>WSHでクリップボードを使う技は、過去ログを探すといろいろ出てきますよ。
アドバイス、ありがとうございました。
こういう「迂回技」もあるんですね。
早速試してみます。
OWCスクリプト、すいません。勉強してみます。(^^ゞ
(初体験なものでしてゥゥ)
win2kのコンパネ→ネットワークとダイヤルアップ接続にある
ローカルエリア接続を無効/有効にするスクリプトをWSHで書けるでしょうか。
実現性についてご教示ください。
Dear むたぐち さん、Lib30 さん
>>私の常用してるDonutR(http://tds.sourceforge.net/)はなかなかいいですよ。
ほんとですね。立ち上がりが軽し、いろいろ気がきいているし。
例のOWCも動くし。(あたりまえか)
Opera6.0も使ってみたんですが、これって軽快ブラウザっていうわりには、
起動にIEの何倍もの時間がかかったりしてます。
うーん。うわさほどには。
うちにもBadtransがうはうはやってきてます。
ずいぶん古いメールにRE:がついてやってきたりします。
ウィルスも身近なものになったものですね。
> エラーで終了するのではなく、固まってしまうのです。ウインドウを
> 切り替えようとしてもできないし、キーボードも受け付けません。
> そういうわけで、謝ってくれないんです。
これって、NortonやMDMなどの常駐ソフトとの相性の問題ってないですか?
特にMDM(VSなどをインストールするとすぐ常駐するようになります)をはずしたら、
うわさに高いMEが、最近めったに落ちなくなってます。
Dear pokopon さん
> sendkeysと同等で、アクティブウインドウに2バイト文字を送信するには
> どうしたらよいのでしょうか?
WSHだとSendMessageなどのAPI使うわけにもいかないので、
いったん漢字をクリップボードに送ったあと、
SendKeysで^Vで貼り付けるという具合になるのでは。
WSHでクリップボードを使う技は、過去ログを探すといろいろ出てきますよ。
ところで、出てきたついでといってはなんですが、
例のOWCを使うスクリプトの例です。
Office2000が必要らしい。IEも。
Set IE = CreateObject("InternetExplorer.Application")
IE.AddressBar = False
IE.MenuBar = FALSE
IE.StatusBar = False
IE.Navigate "about:blank"
Do While IE.Busy:WScript.Sleep 100:Loop
IE.Visible=True
IE.Document.Write "<html><Title>OWC</Title><body><DIV ALIGN=center><OBJECT classid=clsid:0002E510-0000-0000-C000-000000000046 id=Spreadsheet1></OBJECT></DIV></body></html>"
With IE.Document.Spreadsheet1
.TitleBar.Caption = "TEST"
.TitleBar.Interior.Color = "DodgerBlue"
.CSVData = "氏名,綴り方,算術,蘭語,合計" & vbCrLf & _
"私,95,65,78,""=sum(B2:D2)""" & vbCrLf & _
"あなた,75,77,59,""=sum(B3:D3)"""
End With
さいきん W32.Badtrans.B というウイルスがはやっていますが、
うちにもメールに載ってやってきました。しかも4回も。
ほとんどは知らない人からでしたが(知っている人からのもあった)
Nortonが見つけて削除してくれているので今のところ安心です。
でも、こういうウイルスはアドレス帳に載っている人宛に
自分を添付したメールを送るわけだから、僕は全く知らない人の
アドレス帳の中に自分のアドレスも登録されているということになります。
ちょっと複雑な感じです。
To 管理人むたぐち さん
>> うちのパソコンなIE6なんですけれども、ことあるごとに固まります。
>> OSはWin2000なんですが、タスクマネージャーで殺しても
>> 元に戻らずOSごと逝ってくれます。
>
>私のところではとくに問題は出てませんねえ。
>といっても、iexplore.exe自体はめったに使わないのですが。
>でもIE6って逝く時丁寧に謝ってくれるんでしょ? 一回見てみたいです。
エラーで終了するのではなく、固まってしまうのです。ウインドウを
切り替えようとしてもできないし、キーボードも受け付けません。
そういうわけで、謝ってくれないんです。
>私の常用してるDonutR(http://tds.sourceforge.net/)はなかなかいいですよ。
これ、いいですね。タブブラウザは以前一度Cuamを使ったことがありましたが、
なぜか一部の設定が保存されなかったり、ScriptのOn/Offが動作しなかったりと
ちょっと使い心地が悪かったので以後使ってませんでした。
でもDonutRはそこらへんがしっかりとしていて使いやすいです。
そして何よりアイコンがいい!!
あとは、ツールバーに自分でアプリを登録できたら完璧。
>あ、そうそう。Operaの最新版(ver. 6)はついに日本語表示が可能になりましたよ。
>http://www.opera.com/pressreleases/20011129.html
>Operaって何気にタブブラウザだったりする…。
Operaはタブブラウザとしては今一歩といったところです。
タブをダブルクリックでリロードとかホイールでクリックすると閉じるといった
動作を割り当てられないのは、慣れた身にとってはつらい。
# 噂によれば、マウスである図形を描く(マウスジェスチャー)ことによって
# 戻るや更新ができるらしい。
# ちなみにMozillaも(中途半端だけれども)タブがついていたりします。
むたぐちさん>
この間はsendkeysの件で有難うございました。
おかげさまで、上手くいきました。
というこで、欲がでてきまして、「漢字」も送信できないものかと思っています。
sendkeys はバイト単位でのキーの送信で、もともとの目的が違うのですが、日本語(2バイト)を送る方法はないのでしょうか?
sendkeysと同等で、アクティブウインドウに2バイト文字を送信するにはどうしたらよいのでしょうか?
むたぐちさん
>To: noir さん
>
>> 自分の Windows 2000 マシンではこれで正常に動いていたのですが、
>> リクエストした人の Windows Me マシンではここで Wscript.exe
>> が停止してしまいました。
>>
>> いろいろ調べた結果、間に次のようなコードを入れたらよさそうなことが
>> わかりました。
>>
>> while (btype_job.Status == 0) {
>> WScript.Sleep(100);
>> }
>
>2000とMEでプロセス実行終了のタイミングが違うということではないでしょ>うか。
>MEではちょっと待ってやる必要があると。
アドバイスありがとうございます。
このプロセス終了待ちを入れても、Meではうまくいかなかったので、
別の原因を探ったところ、WScript.StdOut プロパティからの
読み出しが、wscript.exe ではできない (cscript.exe ではOK)
という記述がヘルプにあり、試しに cscript.exe で動かしてみた
ところ成功しました。結局、コマンドの出力をテンポラリファイルに
書き出して、それを後で読むように変更することで解決しましたが、
WshScriptExec オブジェクトの StdOut プロパティのヘルプには
そのあたりの説明はないんですよね…。
Dear SIGNAL9 さん
> ここからDLできるOWebComp.EXE(自己解凍アーカイブ)にはいくつかの
> スクリプト例が含まれています。
ありがとうございます。
しかし、すごいですね。
MSOfficeって密かにそんなにすごいものをインストールしてたんだ。。。
FileSystemObjectでエクセルファイル作ってたり、なんだか違った世界が開けてきますね。
コンポーネントをオブジェクトブラウザで見てみると、
おおっ、こんな機能まで、、って感じで感激。
しかも軽いし。
ところで、この中のたとえばSpreadsheetなんて、
Delphiのフォームに貼り付けて使えるかもしれませんね。
そうすると、Formula Oneをはるかにしのぐ(なにせ本家本元)ものができたりして。
いやあ、ただでさえ手につかない仕事がいっそう・・・(以下ノーコメント)
To:土屋さん
>近々、某MLにも紹介させていただきますのでよろしくお願いします。
ありがとうございます。バグレポートをよろしくと、お伝えください(^^;)
OWCのWSH用サンプルですが、WSH用ということだとちょっと見つから
なかったです。もっともASPと同じですし、VBA・VBからでも使い方は
いっしょですので、MSの検索で漁ってみてください。いくつか引っか
かります。
例えば英語ですが
http://support.microsoft.com/support/kb/articles/Q258/1/87.ASP
ここからDLできるOWebComp.EXE(自己解凍アーカイブ)にはいくつかの
スクリプト例が含まれています。
プログラマーズガイドは下記に。
http://www.microsoft.com/JAPAN/developer/library/odeopg/deovrworkingwithofficewebcomponents.htm
もっともOWCのヘルプファイルは日本語ですし、土屋さんならヘルプ
だけで組めます(^^)。
単純な例ではこんな感じです;
Set Spreadsheet1 = CreateObject("OWC.Spreadsheet")
Spreadsheet1.ActiveSheet.Cells.Clear
Spreadsheet1.ActiveSheet.Cells(2, 1).Value = "白人"
Spreadsheet1.ActiveSheet.Cells(3, 1).Value = "黒人"
Spreadsheet1.ActiveSheet.Cells(4, 1).Value = "アジア系"
Spreadsheet1.ActiveSheet.Cells(5, 1).Value = "ラテン系"
Spreadsheet1.ActiveSheet.Cells(1, 2).Value = "ペロー"
Spreadsheet1.ActiveSheet.Cells(2, 2).Value = 0.2
Spreadsheet1.ActiveSheet.Cells(3, 2).Value = 0.06
Spreadsheet1.ActiveSheet.Cells(4, 2).Value = 0.17
Spreadsheet1.ActiveSheet.Cells(5, 2).Value = 0.13
Spreadsheet1.ActiveSheet.Cells(1, 3).Value = "クリントン"
Spreadsheet1.ActiveSheet.Cells(2, 3).Value = 0.38
Spreadsheet1.ActiveSheet.Cells(3, 3).Value = 0.82
Spreadsheet1.ActiveSheet.Cells(4, 3).Value = 0.28
Spreadsheet1.ActiveSheet.Cells(5, 3).Value = 0.62
Spreadsheet1.ActiveSheet.Export "TEST.HTM",0 ' HTML形式で出力
Spreadsheet1.ActiveSheet.Export "TEST.XLS",0 ' BIFF(XLS)形式形式で出力
Set Spreadsheet1 = Nothing
Dear SIGNAL9 さん
さっそくダウンロードさせていただきました。
おぉ、ワンダフル。
なかなか快適にサムネイルができてよいですね。
近々、某MLにも紹介させていただきますのでよろしくお願いします。
OWCって名前だけ聞いたことがあったんですが、興味津々。
どこかにWSHで動かすようなサンプルってないですか?
To:むたぐちさん、土屋さん
えー、お待たせしました(別に待っちゃいない?^^;)
Doodle2のVectorへの登録が完了しました。
http://www.vector.co.jp/soft/winnt/prog/se219120.html
まだまだ不具合も多いかと思いますが、御笑覧いただければ幸いです。
#むたぐちさん、お手数ですが、リンクをまた張っていただけるのでしたら、
#こちらの方にしていただけますか。旧番はしばらく削除せずに残しておこう
#かと思いますが、あちらはもうスクラップにするつもりですので。
そうそう、owcというのは Office Web コンポーネントというコントロールです。
邪推するに、ASPを使いサーバサイドでExcelを動かそうという無謀なユーザが多
かったためMSがOffice2000から附属させている”オートメーション(非対話的)
操作を考慮したExcelのサブセット”のことです。
・グラフオブジェクト
・データソースコントロール
・ピボットテーブルリスト
・ワークシート
という四つのコントロールで、要するにExcelの機能を分解してコントロール
に分けたもの…というものです。
ASPにはWSHとちがいいわゆる対話画面(コンソール)というものが存在しない
ため、呼び出されるオブジェクトはウィンドウハンドルなどを使用しない、
「見えない」オブジェクトでないと具合が悪いのです(例えばよく見かけるの
は、サーバサイドでExcelを動かしたはいいものの、ASPからはダイアログに応
答する手段がないため結果的にExcelをハングさせてしまう…というケース)。
OWCですと、ダイアログなどを出す心配もないため、非対話的に使う場合には
適しています。Office自体をインストールしなくても単体(コントロールだ
け)で動きますので、挙動も軽いようです。
Dear むたぐち さん
> http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/monitordotnet.asp
> こうなります。
実はわけがわかんなかったので、某サイトで翻訳してみたら、
> WMIへの入門
> マイクロソフト・ウインドウズ管理手段(WMI)技術は
> デスクトップ管理特別対策本部の(DMTF)ウェブ・ベースの
> 企業管理(WBEM)イニシアチブおよびDMTF共通情報モデル(CIM)の
> インプリメンテーションです。
だそうな。おおっ。なんだか凄そうだぞ。(さっぱり意味はわかってませんが)
DMTFなんて特に凄そう。。。
閑話休題(それはさておき)、
http://csx.jp/~tsuchiya/
こんなのはどうでしょう。あちこちに投稿したものなんかをまとめてみようかと。
(実は無料ホームページを申し込んではみたんですが、ネタがないのでとりあえず作ってみだだけという話もちらほらちらほらはらほろひれはら)
○ .NETでWMIはどうなるんだ?
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/monitordotnet.asp
こうなります。
(手抜きかよ)
To: Lib30 さん
> うちのパソコンなIE6なんですけれども、ことあるごとに固まります。
> OSはWin2000なんですが、タスクマネージャーで殺しても
> 元に戻らずOSごと逝ってくれます。
私のところではとくに問題は出てませんねえ。
といっても、iexplore.exe自体はめったに使わないのですが。
でもIE6って逝く時丁寧に謝ってくれるんでしょ? 一回見てみたいです。
> HTMLレンダリングエンジン等、ブラウザとしての性能には満足しているのですが、
> アプリケーションソフトとしての性能はさっぱりです。
> 現在IEコンポーネントのフリーブラウザに乗り換えようか検討中。
私の常用してるDonutR(http://tds.sourceforge.net/)はなかなかいいですよ。
更新止まってますが…。
使いにくい部分も確かにあるんですが、もう捨てられないです。
(ポップアップ抑止のデータ資産が…)
Googleツールバーかその相当品が使えれば言うことなしなんですがねえ。
IEコンポで市販品なブラウザもあります。
http://www.pro-g.co.jp/samurai/
BugBrowserのソースが元になっているという噂。ダウンローダーつき。
# パッケージにひろゆき氏と侍魂(http://www6.plala.or.jp/private-hp/samuraidamasii/)の健氏が…。
あと、変り種としてはこんなのも。
http://www.geocities.co.jp/Playtown-Denei/4192/ttwc.html
「なんでもタブ化計画 TeraTermWindowChanger」
これを使うと、IEがそのままタブブラウザになります。IEのウィンドウ外にタブがつくわけです。
あ、そうそう。Operaの最新版(ver. 6)はついに日本語表示が可能になりましたよ。
http://www.opera.com/pressreleases/20011129.html
Operaって何気にタブブラウザだったりする…。
> タイトルバーのないHTAのウインドウをドラッグする
面白いですね、これ。
VBではなんかAPIを使わないと実現できなかったような。
ドラッグの速度があまりにも速すぎると、誤動作しちゃいますね。
(ウィンドウ内でonmousemoveが捕捉されなかった場合かな?)
これはどうしようもないですか。やっぱり。
うちのパソコンなIE6なんですけれども、ことあるごとに固まります。
OSはWin2000なんですが、タスクマネージャーで殺しても
元に戻らずOSごと逝ってくれます。
何度も再インストールしているうちに、「以前の環境に戻す」
ファイルが消えてしまったようでIE5.5にも戻すことができませんし。
HTMLレンダリングエンジン等、ブラウザとしての性能には満足しているのですが、
アプリケーションソフトとしての性能はさっぱりです。
現在IEコンポーネントのフリーブラウザに乗り換えようか検討中。
みなさんのところのIEはちゃんと動いていますか?
タイトルバーのないHTAのウインドウをドラッグする
<HTML>
<HEAD>
<TITLE>動くWindow</TITLE>
<HTA:APPLICATION BORDER="none" SCROLL="no">
<SCRIPT TYPE="text/javascript">
<!--
resizeTo(300,200)
var dflag = false;
var posX, posY;
with(document){
onmousedown = function(){dflag=true;posX=event.clientX;posY=event.clientY;}
onmouseup = function(){dflag = false}
onmousemove = function(){if(dflag){window.moveTo(event.screenX-posX,event.screenY-posY)}}
}
//-->
</SCRIPT>
<STYLE TYPE="text/css">
<!--
body{
border:6px outset green;
font:menu;
background:green;
}
-->
</STYLE>
</HEAD>
<BODY>
<input type="button" onclick="window.close()" value="閉じる"
onmousedown="setTimeout('dflag=false',0)">
<!-- ↑ボタンを押している間はドラッグできないようにする -->
</BODY>
</HTML>
○ファイルの生成を監視する
以前この掲示板で質問を受けたような気がするのですが、WSHでファイルの生成を監視する
ことができるようなのでご報告。
具体的にはWMIを使ってやります。
26-36 管理人むたぐち 2000/12/19 02:28 でも使ったExecNotificationQueryメソッドを
使うのですが、今回はWQLに"__InstanceCreationEvent"を指定し、CIM_FileDataのインスタンスの生成
(ここではC:\test)を監視します。
WQLの指定の仕方については
http://communities.msn.com/windowsscript/wmiinformationseries.msnw?action=view_list&row=2&viewtype=2&sortstring=
http://communities.msn.com/windowsscript/wmiinformationseries.msnw?action=view_list&row=3&viewtype=2&sortstring=
を参考にしました。というかそのままですが。
で、実際に書いてみたのが下のコードですが、実は期待通りに動きませんでした。
それどころか実行すると10secごとにFDDにアクセスが行くようになり、wscriptの
プロセスを殺しても止まらず、WinMgmtのプロセスは殺すことすらできない…。
私はVS.NETのデバッグを使って無理やり殺しましたが、実行には十分注意してください。
で、何で動かないんでしょうねえ?
'注意:このスクリプトを実行すると大変なことになります!
Set Locator = WScript.CreateObject("WbemScripting.SWbemLocator") 'SWbemLocatorオブジェクト作成
Set oService = Locator.ConnectServer 'SWbemServicesオブジェクト取得
Set oEvent = oService.ExecNotificationQuery _
("select targetinstance.Name from __InstanceCreationEvent within 10 where " & _
"targetinstance isa 'CIM_DataFile' and targetinstance.Drive = 'C:' and " & _
"targetinstance.Path = '\\test\\'")
On Error Resume Next
Do
WScript.Sleep 100
Set oEvt = oEvent.NextEvent(500)
If Err.Number <>0 Then
Err.Clear
Else
MsgBox oEvt.TargetInstance.FileName & "が生成しました。"
Exit Do
End If
Loop
'注意:このスクリプトを実行すると大変なことになります!
To: 新井雅之 さん
> メールの送受信する時にエラーメッセージが出ます、エラー番号0x800CCC0D
> 特に送信が、悪いです
何のメールソフトか、どんなOSを使ってるのか、インターネットへの接続形態はなんなのか、
エラーが発生するときの状況、等々ぜんぜん情報不足です。というか、これだと
ただの愚痴とも取れますよ。
あと、エラー番号というのは通常そのソフトを作った人が見ないと(or エラーの仕様書が公開されている)、
その意味がわからないです。
…で、この掲示板は何の掲示板だったっけ? (^^;
To: SIGNAL9 さん
> ># Tabular Data Control (TDC)もWSHから呼び出す方法がわかれば、ソート
> ># に使えるんですけどねえ。TDC自体はIE4以上に付属しているのでシステム標準機能ですし。
>
> MSDNに解説がありました。
> http://msdn.microsoft.com/library/default.asp?url=/workshop/database/tdc/overview.asp
>
> ご参考までに。
ありがとうございます。手持ちのMSDNライブラリ(古い)にはTDCリファレンスページへの
リンクはあるんですが実体がないのですよ(^^;
> ぼくはOffice2K以降附属のOWCは最近結構使います。本体のOfficeプロ
> グラムと違って非対話のスクリプト呼び出しのことを考えて作ってある
> し(元々WSHよりさらに非対話的(^^;)なASP用途だからでしょうが)、
OWCってなんでしたっけ?
To: 土屋 さん
> WSHからTabular Data Controlを呼び出ししようとしたんですが、
> ファイルの読み込み、ソートまではなんとかなったらしいんですが、
> 肝心のResetのところでエラーが出て先に進めませんでした。
> やはり、IEなどに貼りついてないとだめなんでしょうか。
いい線まで行ってますね。
TDCのProgIDって"TDCCtl.TDCCtl"でいいんですよね?
> ファイル取得に限定するのなら、OfficeシリーズのFileSearchを使う手もありますね。
> これだと、サブフォルダー内の検索も簡単だし、ファイル名のワイルドカードも使えます。
ふーん。何でもあるなあ。
Officeは多機能COMコンポーネントですね。
To: noir さん
> 自分の Windows 2000 マシンではこれで正常に動いていたのですが、
> リクエストした人の Windows Me マシンではここで Wscript.exe
> が停止してしまいました。
>
> いろいろ調べた結果、間に次のようなコードを入れたらよさそうなことが
> わかりました。
>
> while (btype_job.Status == 0) {
> WScript.Sleep(100);
> }
2000とMEでプロセス実行終了のタイミングが違うということではないでしょうか。
MEではちょっと待ってやる必要があると。
2000とMEでは、%comspec%はそれぞれコマンドプロンプトとDOSプロンプトという
別のものですから、動作が一致しないのもまあ納得できる話ではあります。
To: akipow さん
> SQLのDBに接続したあと、データを利用したいのですが、
> どのようにすればよいでしょう。
ちょっとこの掲示板の過去記事を検索すれば、いっぱいでてきますよん。
最近なら52-16 土屋 さん 2001/11/16 02:24 とか。っていうかつい先日だ(^^;
To: 後藤 さん
> Outlook Expressを開いたとき
> パスワードとユーザー名入力するところで
> パスワードが分からないときどうすればいいんですか
パスワードってのは、わかっている人だけがアクセスできるようにするための仕組みなので、
わからない人はアクセスできません。
もし、「今は与えられたパスワードを忘れてしまったが、そのパスワードを知る正当な
権利を持っている」というなら、パスワード発行元に再発行を要求してください。
発行元は、会社や大学のネットワークならネットワーク管理者、自宅からのアクセスなら
プロバイダになるでしょう。
もし、「自分が設定したパスワードを忘れてしまった」という場合でも、やはり
ネットワーク管理者・プロバイダに相談してください。本人であることの証明さえできれば、
普通はパスワードを再設定してくれます。
で、この掲示板は何の…。
Outlook Expressを開いたとき
パスワードとユーザー名入力するところで
パスワードが分からないときどうすればいいんですか
NNTPで2ch。
http://pc.2ch.net/test/read.cgi/prog/1006827894/
ひろゆき氏とvoid氏が、同じスレにいることがまず驚きだ。
(もっとも、void氏は、先月からプログラマ板に頻繁に登場しているのだが)
SQLのDBに接続したあと、データを利用したいのですが、
どのようにすればよいでしょう。
(フィールドの参照方法をおしえてください)
To:FMVユーザーさん
>Vbsの中で「Goto文」を使いたいのですがどのように記述すればいいのでしょうか?
>いろいろ試してみたのですがうまくうごきませんでした
初めまして。
VBSではGoto文は使えません。 お疲れさまでした。(^^;)
オフィシャルヘルプの VBScript/ユーザーガイド/"VBA の機能で
VBScript に含まれていない機能"
(VBAにはあるけどVBSにはない機能ってこと)の項目の中に、
制御構造として GoToステートメントが入ってます。
・・・なので、Goto文は使えないです。
ただし、VBSの中でも On Error GoTo 0 ってキーワードは使えますが、
普通のGoto文とは全然意味が違うヤツです。
ではでは。
To むたぐちさん
>WSHからは他に、WMIのWin32_Processクラスを使ってProcessIDにアクセスする
>ことができます。
ご教授有難うございました。少し頑張って勉強したいと思います。
(親ウィンドウから別の子ウインドウが出来た場合のProsessIDの取得に困っていました)
はじめましてFMVユーザーといいます
最近Vbsに興味をもち修行中です
非常に初歩的なのですが
Vbsの中で「Goto文」を使いたいのですがどのように記述すればいいのでしょうか?
いろいろ試してみたのですがうまくうごきませんでした
よろしくお願いします
はじめまして。noirと申します。よろしくお願いします。
WSH についての貴重な情報源として活用させていただいております。
今回、Windows 上で新松文書を一太郎文書(あるいはテキストファイル)に
変換できないか、というある人のリクエストに応じて、管理工学研究所の
btype.com を WSH から呼び出して出力を保存するスクリプトを作って
みました。
http://www.st.rim.or.jp/~noir/softlib/matu2taro.lzh
に置いたのがそれですが、私自身が一太郎を持っておらず、情報が足りない
ため、文書ウィンドウに書き出した内容を保存するところがまだ未完成です。
実はそれ以前につまづいたことがありました。WSH 5.6 からサポートされて
いる、Exec メソッドの返り値オブジェクトの StdOut プロパティから
テキストを読み出すため、次のようなコードを書きました。
btype_job = wshshell.Exec("%comspec% /c " + btype_cmdfile.ShortPath
+ " " + bunfile.ShortPath);
// --- //
if (!btype_job.StdOut.AtEndOfStream) {
text = btype_job.StdOut.ReadAll().replace("\x1a", "");
}
自分の Windows 2000 マシンではこれで正常に動いていたのですが、
リクエストした人の Windows Me マシンではここで Wscript.exe
が停止してしまいました。
いろいろ調べた結果、間に次のようなコードを入れたらよさそうなことが
わかりました。
while (btype_job.Status == 0) {
WScript.Sleep(100);
}
この修正を加えた後、まだ Me マシンのほうでは実行してみていませんが、
この不具合について何かアドバイスなどがありましたら教えていただければ
幸いです。
To むたぐちさん
ご連絡ありがとうございます。
ひきつずき調査してみたいとおもいます
ありがとうございます。
Dear みなさん
WSHからTabular Data Controlを呼び出ししようとしたんですが、
ファイルの読み込み、ソートまではなんとかなったらしいんですが、
肝心のResetのところでエラーが出て先に進めませんでした。
やはり、IEなどに貼りついてないとだめなんでしょうか。
CSVファイルの中身をソートするなら、DAOやADOからいきなりSQL(OrderBy)をかけてソートされたレコードセットを取得する手もありますね。
ファイル取得に限定するのなら、OfficeシリーズのFileSearchを使う手もありますね。
これだと、サブフォルダー内の検索も簡単だし、ファイル名のワイルドカードも使えます。
とりあえず、Excelを利用した例です。詳しくはVBAのヘルプに出ています。
Const msoSortByFileName = 1
Const msoSortOrderAscending = 1
Const msoFileTypeAllFiles = 1
Set objXL = CreateObject("Excel.Application")
Set objFS = objXL.Application.FileSearch
With objFS
.LookIn = "C:\test"
.FileName = "*.jpg"
.SearchSubFolders = False
.FileType = msoFileTypeAllFiles
If .Execute(msoSortbyFileName, msoSortOrderAscending) > 0 Then
MsgBox .FoundFiles.Count & _
" 個のファイルが見つかりました。"
' For i = 1 To .FoundFiles.Count
' MsgBox .FoundFiles(i)
' Next
Else
MsgBox "検索条件を満たすファイルはありません。"
End If
End With
Set objFS = Nothing
Set objXL = Nothing
To:管理人むたぐち さん
># Tabular Data Control (TDC)もWSHから呼び出す方法がわかれば、ソート
># に使えるんですけどねえ。TDC自体はIE4以上に付属しているのでシステム標準機能ですし。
MSDNに解説がありました。
http://msdn.microsoft.com/library/default.asp?url=/workshop/database/tdc/overview.asp
ご参考までに。
ぼくはOffice2K以降附属のOWCは最近結構使います。本体のOfficeプロ
グラムと違って非対話のスクリプト呼び出しのことを考えて作ってある
し(元々WSHよりさらに非対話的(^^;)なASP用途だからでしょうが)、
本体をエッチラコと起動するよりは遥かに速い…ような気がします(笑)
まあ、単純なソートならADO(MDAC)でやっちゃいますが。
メールの送受信する時にエラーメッセージが出ます、エラー番号0x800CCC0D
特に送信が、悪いです
To: アオタ さん
> ではこんどは少し変化球を
> Excelを起動するので多分一番遅いですよ
Excelは思いもつかなかったですねえ。
WSHでソート、いろんな手段が確立されてきましたね。
# Tabular Data Control (TDC)もWSHから呼び出す方法がわかれば、ソート
# に使えるんですけどねえ。TDC自体はIE4以上に付属しているのでシステム標準機能ですし。
> 3年ぐらい前\30,000 で買った128MB と最近買った\4,000 の128MB のメモリと元からついてる32MBが
> あるので多分大丈夫でしょう
>
> いやー昔に買ったほうのメモリがバカらしく感じますねー
いや、ほんとに。昔のことは忘れましょう。
To: pokopon さん
> ですので、AppActivateで制御し、sendkeyを使う場合には、それぞれを使い分けする必要がありまして、これがまた面倒でした。ExecならProcessIDで管理可能ですので、「100発100中」です。
WSHからは他に、WMIのWin32_Processクラスを使ってProcessIDにアクセスすることができます。
こちらは全プロセスの列挙とかもできるので、AppActivateと組み合わせるとより
楽しめるんじゃないかと思います。
38-39 管理人むたぐち 2001/06/10 08:52
To: カミーユ さん
> ここでかくべきことではないかもしれないのですが、関係あるかもしれないので教えてください。自分のPCなんですけど、フォルダを開いたり、ファイルの移動を
> しているだけで、メモリが足りませんとエラーメッセージが出るんです。
> それで、ctrl+Alt+Deleteキーでシャットダウンしようとすると、wscriptが
> 何個も(多いときは二十個くらい)立ち上がった状態になってしまいました。
なんかウィルスの仕業っぽいですねえ。
意図してスクリプトを実行しているのではないのなら、ウィルス感染を疑った方がいいでしょう。
ここでかくべきことではないかもしれないのですが、関係あるかもしれないので教えてください。自分のPCなんですけど、フォルダを開いたり、ファイルの移動を
しているだけで、メモリが足りませんとエラーメッセージが出るんです。
それで、ctrl+Alt+Deleteキーでシャットダウンしようとすると、wscriptが
何個も(多いときは二十個くらい)立ち上がった状態になってしまいました。
最近ずっとこんな調子で、PCを立ち上げてから五分くらいしかPCが使用できません。どなたか解決策ご存知の方いらっしゃいませんか?システムはWin98のセカンドエディションです。
http://communities.msn.com/windowsscript
ここの異常な情報量は何なんだ!?
ぜんぜん知らなかったです。知らなかった人は、すぐにお気に入りに入れましょう。
申し訳ありません
2001年 11月 26日 00時 21分 43秒 の書き込みの中の
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' エクセルの終了
objExcel.DisplayAlerts = bDisplayAlerts
Call objExcel.Quit
の
上下を逆
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' エクセルの終了
Call objExcel.Quit <<<<<
objExcel.DisplayAlerts = bDisplayAlerts <<<<<
にしてください
しないと、保存確認メッセージが表示されます
To むたぐちさん
す ば ら ひ 〜〜
見事解決いたしました。
>RunメソッドじゃなくてExecメソッドを使った理由は、ProcessIDプロパティが
>使えるので、AppActivate誤爆が防げるためです。その代わりにウィンドウスタイル指定が
>できないんで、最小化もSendKeysでやってます。
>Execメソッドでウィンドウスタイル指定ができたら、文句ないんですけどねえ。
>そこまで気が回らなかったのかな。> 開発チーム。
Execメソッド、勉強になりました。こういう起動方法は、後でそのウインドウを制御する場合にはとても便利でした。
>AppActivate誤爆
これに悩まされていましたので、一石二丁で解決です。
余談ですが、この手法でwinpopup(Win9x系)を制御しようと思ったのですが、
ウィンドウ名が95/98 と Me で違うんです。
95/98 系winpopup→「ポップアップ サービス」(実は半角カタカナ、おまけに空白が1文字付き)
Me系 winpopup→「ポップアップ サービス」(全角に変更されていました)
ですので、AppActivateで制御し、sendkeyを使う場合には、それぞれを使い分けする必要がありまして、これがまた面倒でした。ExecならProcessIDで管理可能ですので、「100発100中」です。
今回もいろいろと勉強になりました。本当にありがとうございました。
やっぱり、みなさんすっごいですね。1つ質問すると4つも5つも方法が出てくる
のは感謝です。自分の頭ん中がすかすかな感じがします。がんばってるつもり何ですがまだまだ!
早速、各種方法を試してみます。ありがとうございます。
ではこんどは少し変化球を
Excelを起動するので多分一番遅いですよ
<SCRIPT>
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' 変数の宣言を強制する
Option Explicit
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' 定数の宣言
Const xlText = &HFFFFEFC2
Const xlAscending = 1
Const xlDescending = 2
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' 変数の宣言 上段から オブジェクト変数、文字列型変数、整数値変数
Dim objFSO, objShell, objWScriptShell, objFolder, objFile, objSelFolder, objExcel
Dim strSelFolderPath, strSaveName
Dim i
Dim bDisplayAlerts
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' オブジェクト変数を初期化
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objShell = WScript.CreateObject("Shell.Application")
Set objWScriptShell = WScript.CreateObject("WScript.Shell")
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' 保存するファイルパスを設定
strSaveName = objWScriptShell.SpecialFolders( "Desktop" ) & "\list.txt"
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' フォルダ選択ダイアログの表示
Set objSelFolder = objShell.BrowseForFolder( 0, "フォルダを選んでください", &H10 )
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' 選択されたフォルダパスを得る
If objSelFolder Is Nothing Then WScript.Quit
strSelFolderPath = CStr( objSelFolder.Items.Item.path )
If strSelFolderPath="" Then WScript.Quit
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' 検索するフォルダを得る
Set objFolder = objFSO.GetFolder( strSelFolderPath )
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' エクセルの起動
Set objExcel = WScript.CreateObject("Excel.Application")
objExcel.Workbooks.Add
bDisplayAlerts = objExcel.DisplayAlerts
objExcel.DisplayAlerts = False
objExcel.Visible = False
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' エクセルに書き込み
i = CInt( 1 )
For Each objFile In objFolder.Files
If LCase( objFSO.GetExtensionName( objFile.Name ))="jpg" Then
objExcel.Cells( i, 1 ) = objFile.Name
i = i + 1
End If
Next
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' ソート & 保存
Call objExcel.Range( objExcel.Cells( 1, 1 ), objExcel.Cells( i, 1 )).Sort( objExcel.Range( objExcel.Cells( 1, 1 ), objExcel.Cells( i, 1 )), xlAscending )
Call objExcel.ActiveSheet.SaveAs( strSaveName, xlText )
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' エクセルの終了
objExcel.DisplayAlerts = bDisplayAlerts
Call objExcel.Quit
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' 後処理
Set objExcel = Nothing
Set objFolder = Nothing
Set objFSO = Nothing
Set objShell = Nothing
Set objWScriptShell = Nothing
Set objSelFolder = Nothing
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' 終了
MsgBox "終了しました" & vbCrlf & CStr( i-1 ) & "件"
</SCRIPT>
To: 管理人むたぐち さん
> Win2000はいいですよ。
> sp2も出てかなり枯れてきましたし、メモリさえ積んでれば軽いです。
3年ぐらい前\30,000 で買った128MB と最近買った\4,000 の128MB のメモリと元からついてる32MBが
あるので多分大丈夫でしょう
いやー昔に買ったほうのメモリがバカらしく感じますねー
To: 土屋 さん
> 失礼しました。MEもプレースバーがついておりました。
> これを私はメモ帳の開くで、どんなダイアログが出てくるかで確認しています。
そういえば、Win2000でもアプリによってはプレースバーなしのダイアログが
表示されることがありますね。
comdlg32.dllの呼び出し方によるんでしょうか。
> > こんなのもあるんですね。このサンプルはASPなので、WSH用にリライトしてみましょう。
> > …また今度。
>
> そんなこと言わずにぃ。
> ではちょっと。
おお、これはいいですねえ。
難しいコードをいろいろ書かなきゃならんのかと思ったら、意外と
Dictionaryオブジェクト風ですね。
(配列じゃないというのが面倒っぽいですけど)
いろいいろ応用が効きそうです。
To: pokopon さん
> WSHShell.Run "notepad.exe",1,false
> として、ノートパッドを開きました。
>
> このノートパッドを最小化した場合に、それをWHSで「元のウィンドウ」にする方法を探せないでいます。
>
> 再度、
> WSHShell.Run "notepad.exe",1,false
> とすれば、2重に起動しますし、オプションを、9としても、再び新しいノートパッドが開きます。
> HELPから:ウィンドウをアクティブにして表示します。ウィンドウが最小化または最大化されている場合は、元のサイズと位置に戻ります。アプリケーションで最小化ウィンドウを復元するときには、このフラグを指定してください。
> とあったので使ってみましたがゥゥ、だめ?
>
> すなわち、「最小化」してあるアプリを「元のウィンドウ」にしたいのですけど。
WshShell.Runで元のウィンドウに戻すことができるのは、二重起動ができないアプリとフォルダに
限ります。
> WshShell.AppActivate
> で、できますでしょうか?
説明文によると、最大化や最小化には影響を与えないとあるので無理でしょう。
というか無理でした。
以下のスクリプトは、「元のサイズに戻す」キーコードをウィンドウに送ってやることで
元にサイズに戻しています。
RunメソッドじゃなくてExecメソッドを使った理由は、ProcessIDプロパティが
使えるので、AppActivate誤爆が防げるためです。その代わりにウィンドウスタイル指定が
できないんで、最小化もSendKeysでやってます。
Execメソッドでウィンドウスタイル指定ができたら、文句ないんですけどねえ。
そこまで気が回らなかったのかな。> 開発チーム。
Set WshShell = WScript.CreateObject("WScript.Shell")
Set oExec = WshShell.Exec("notepad")
Do Until WshShell.AppActivate(oExec.ProcessID)
WScript.Sleep 100
Loop
WshShell.SendKeys "% N" '最小化。Alt+スペース→N
WScript.Sleep 5000 '5秒待つ。
If oExec.Status=0 Then
Do Until WshShell.AppActivate(oExec.ProcessID)
WScript.Sleep 100
Loop
WshShell.SendKeys "% R" '元のサイズに戻す
Else
MsgBox "メモ帳は終了されています。"
End If
久方ぶりにお邪魔します。 pokoponです。
いつも、困った時にお邪魔しておりますが、今回もまたお願いします。
OSはWin2Kです。
初歩的な質問かとは思いますが、
WSHShell.Run "notepad.exe",1,false
として、ノートパッドを開きました。
このノートパッドを最小化した場合に、それをWHSで「元のウィンドウ」にする方法を探せないでいます。
再度、
WSHShell.Run "notepad.exe",1,false
とすれば、2重に起動しますし、オプションを、9としても、再び新しいノートパッドが開きます。
HELPから:ウィンドウをアクティブにして表示します。ウィンドウが最小化または最大化されている場合は、元のサイズと位置に戻ります。アプリケーションで最小化ウィンドウを復元するときには、このフラグを指定してください。
とあったので使ってみましたがゥゥ、だめ?
すなわち、「最小化」してあるアプリを「元のウィンドウ」にしたいのですけど。
WshShell.AppActivate
で、できますでしょうか?
Shellオブジェクトかとも思ったのですが、
「特定の最小化されたアプリだけ」の指定方法がわからずじまいです。
すいませんが、教えて下さい。
Dear むたぐち さん
> ああ、そう言われればあのプレースバーはWin2000とXPだけのものだったんですね。
失礼しました。MEもプレースバーがついておりました。
これを私はメモ帳の開くで、どんなダイアログが出てくるかで確認しています。
> こんなのもあるんですね。このサンプルはASPなので、WSH用にリライトしてみましょう。
> …また今度。
そんなこと言わずにぃ。
ではちょっと。
'Const adInteger = 3
'Const adBSTR = 8
'Const adChar = 129
Const adWChar = 130
Dim FS,strFolder,newFile,objFile,objFolder
Set FS = CreateObject("Scripting.FileSystemObject")
Set Shell=Wscript.CreateObject("Shell.Application")
Set objFolder=Shell.BrowseForFolder(0,"フォルダを選んでください",&H10)
If objFolder Is Nothing Then WScript.Quit
strFolder = objFolder.Items.Item.path
If Not FS.FolderExists(strFolder) Then WScript.Quit
Set objFolder = Nothing
Set Shell= Nothing
Set RS = CreateObject("ADODB.Recordset")
RS.Fields.Append "Name",adWChar,250
RS.CursorLocation = 3 'adUseClient
RS.CursorType = 1 'adOpenKeyset
RS.Open
Set objFolder = FS.GetFolder(strFolder)
For Each objFile In objFolder.Files
If LCase(Right(objFile.Name,3)) = "jpg" Then
RS.Addnew
RS.Fields("Name").Value = objFile.Name
RS.Update
End If
Next
MsgBox RS.RecordCount
If RS.RecordCount > 0 Then
RS.Sort = "Name"
Set newFile = FS.CreateTextFile("C:\Notes\list.txt",True)
RS.MoveFirst
While Not RS.EOF
newFile.WriteLine Trim(RS.Fields("Name").Value)
RS.MoveNext
Wend
newFile.Close
MsgBox "一覧を作成したファイルはlist.txtです"
Else
MsgBox "該当のファイルはありませんでした"
End If
RS.Close
Set RS = Nothing
Set newFile = Nothing
Set objFolder = Nothing
Set FS = Nothing
Set WshShell = WScript.CreateObject("WScript.Shell")
Set Shell = WScript.CreateObject("Shell.Application")
Set Fs = WScript.CreateObject("Scripting.FileSystemObject")
Set oFolder=Shell.BrowseForFolder(0,"フォルダを選んでください",&H10+&H1)
If oFolder Is Nothing Then WScript.Quit
sFolder=oFolder.Self.Path
If Right(sFolder,1)="\" Then sFolder=Left(sFolder,Len(sFolder)-1)
Set oExec=WshShell.Exec("cmd.exe /c DIR /B /O:N " & sFolder & "\*.jpg")
sResult=oExec.stdOut.ReadAll
If sResult="" Then
MsgBox oExec.stdErr.ReadAll
Else
Fs.CreateTextFile("list.txt").Write sResult
MsgBox "終了しました。"
End If
こうしないと元の処理内容と一致しないですね。
To: 土屋 さん
> 関係ない話で恐縮ですが、携帯の着メロにラジオ体操第一を入れて喜んでいたのですが、
> 家内から、それ、今流行っているわよ、と言われてちょっとがっくり。
> ああ人生に涙ありも流行っているのかなあ。
> で、唐獅子牡丹に落ち着きましたが、電話に出たときの声がなんか高倉健になってしまいそう。。。
私は今のところ携帯を持ってないんですが、着メロってやっぱり、「俺こんな着メロにしてるんだぜぇ、
どうだ、すごいだろ」というもんなんでしょうか?
お前、聞かせたいだけなんちゃうかと。小一時間問い詰めたい。
> 98やMEだとExcelを使わないとあの、左側のプレースバーを出せないし、、、
> と考えて現在先送り中に・・・)
ああ、そう言われればあのプレースバーはWin2000とXPだけのものだったんですね。
Officeって、新バージョンのWindowsのインターフェースを一部先取りすることが
よくありますが、いざ新バージョンのWindowsが出てしまうと、そのインターフェースの
実現の仕方がシステム標準でないだけに、いろいろ変なことになってしまったり
しなかったり。
> のところをたどっていったら、似たアプローチがなんと紹介されているではありませんか。
> http://www.geocities.co.jp/SiliconValley/4334/unibon/archive/adosort.html
> うーむ。2年前に先を越されておりましたか。。。
こんなのもあるんですね。このサンプルはASPなので、WSH用にリライトしてみましょう。
…また今度。
To: Lib30 さん
> > LibL2/LibL3はどうっすか?
>
> ほしい!!
> ちなみに、半年くらい前に出たWinMe搭載のLibretto(L1だったかな?)が、
> 近くのジョウシンで109800円で売ってました。買いたい衝動に駆られましたが、
> 今年は私は受験生、いくら金がかかるかわからないのでぐっとこらえました。
モバイルPC通の俺から言わせてもらえば今、モバイラーの間での最新流行はやっぱり、
Libretto、これだね。
Libretto L1。これが通の頼み方。
Librettoってのは競合機よりちょっと重くなってる。そん代わり値段が安め。これ。
で、それにWindows XPインストール。これ最強。
しかしこれを頼むと次からジョーシン店員にマークされるという危険も伴う、諸刃の剣。
素人にはお薦め出来ない。
まあお前らド素人は、新LOOX-Sの発売でも待ってなさいってこった。
…吉野家コピペって楽しい。
> ちなみに、今一番ほしいパソコンはMacだったりします。
> ああ、G4 Cubeほしかったなあ(WSH掲示板でこんなこと言っていいのだろうか)。
ぜひApple Scriptのことを教えてください。
To: 筑集眺餅 さん
> おぉ、これを WSH的に焼き直せば、
Set WshShell = WScript.CreateObject("WScript.Shell")
Set Shell = WScript.CreateObject("Shell.Application")
Set oFolder=Shell.BrowseForFolder(0,"フォルダを選んでください",&H10+&H1)
If oFolder Is Nothing Then WScript.Quit
sFolder=oFolder.Self.Path
If Right(sFolder,1)="\" Then sFolder=Left(sFolder,Len(sFolder)-1)
Set oExec=WshShell.Exec("cmd.exe /c DIR /B /O:N " & sFolder & "\*.jpg")
sResult=oExec.stdOut.ReadAll
If sResult="" Then
MsgBox oExec.stdErr.ReadAll
Else
MsgBox sResult
End If
というスクリプトを書いてたら、先を越されてしまった(^^;
To:sattoさん、Lib30さん
>WSH的なアプローチと異なりますが、DIRとリダイレクションを使って
>DIR /B /O:N *.jpg > list.txt
>とやるのもありです。
おぉ、これを WSH的に焼き直せば、
myFolder="""D:\~doc\My Document\My Pictures"""
Set oExec=oShell.Exec("cmd.exe /c dir /b /o:n *.jpg " & myFolder)
sLine=oExec.StdOut.ReadAll
newFile.WriteLine(sLine)
とかってのも、ありですね。(^^)
ちょっくら風邪でダウン。
あと、やはり家族がXPを買いました。Professionalを。
でも自分パソコンは2000なので、しばらく様子見。
To 管理人むたぐち さん
> LibL2/LibL3はどうっすか?
ほしい!!
ちなみに、半年くらい前に出たWinMe搭載のLibretto(L1だったかな?)が、
近くのジョウシンで109800円で売ってました。買いたい衝動に駆られましたが、
今年は私は受験生、いくら金がかかるかわからないのでぐっとこらえました。
ちなみに、今一番ほしいパソコンはMacだったりします。
ああ、G4 Cubeほしかったなあ(WSH掲示板でこんなこと言っていいのだろうか)。
To satto さん
WSH的なアプローチと異なりますが、DIRとリダイレクションを使って
DIR /B /O:N *.jpg > list.txt
とやるのもありです。
関係ない話で恐縮ですが、携帯の着メロにラジオ体操第一を入れて喜んでいたのですが、
家内から、それ、今流行っているわよ、と言われてちょっとがっくり。
ああ人生に涙ありも流行っているのかなあ。
で、唐獅子牡丹に落ち着きましたが、電話に出たときの声がなんか高倉健になってしまいそう。。。
Dear むたぐち さん & 筑集眺餅 さん
>>98とXPのバージョンもご存知の方教えて下さい。
>>98はやっぱり4.10かな?
>よいしょっ、むたぐちさんのスクリプトを走らせてっと。
>XP(Pro) 5.1.2600.0
>と出ました。
>Windows 2002 ってところでしょう。
ありがとうございます。
なるほど。カーネルおじさんのバージョンを調べればOKだったんですね。
私はAPIで調べる代物をDelphiで作ってフロッピィに入れて持ち運び、
調べていたのでありました。(なんと手間な)
(その代わりWSHの使えない95やNTでも動作しましたが)
XPって奮発して5.6とか6とかにするのかなと思っていましたが、
そうでもなかったんですね。
(でもMEのバージョンはなんか微笑ましい・・・)
お陰様で、これで、遠い将来、コモンダイアログを呼び出すActiveX コンポーネントが、
公開される日がやってくるかもしれません。
(ないよりはあった方がいいかな、とも思うんですが、
結構Excelを使う方法もお手軽でいいし、
98やMEだとExcelを使わないとあの、左側のプレースバーを出せないし、、、
と考えて現在先送り中に・・・)
Dear satto さん & アオタ さん & むたぐち さん
奥の手として、ADOを使った2次元配列の高速ソートの例を持ち出そうと思ったのですが、
>他のコンポーネントを使う方法について。
>6-01 SIGNAL9 さん 1999/12/22 18:29
のところをたどっていったら、似たアプローチがなんと紹介されているではありませんか。
http://www.geocities.co.jp/SiliconValley/4334/unibon/archive/adosort.html
うーむ。2年前に先を越されておりましたか。。。
この方法は、ADOの最近のバージョンだと、データをそのまま保存しておくことも可能なので、
Dictionaryみたいに、その都度読み込ませる手間も省けます。
また、ソートキーが複数指定できるので、表みたいなデータを扱う際には結構便利だと思います。
さらに、ソートキーには自動的にインデックスがつけられるので、件数が多いソートの場合には効果が期待できるかと。
To: ひろすけ さん
> 現在、個人的にADSLでWEBサーバーを構築中なのですが、
> そのWEBは一般の人に見て頂くものではなく、
> 個人的に(私 ひろすけのみが)遠隔地から見るためものなのですが、
> 私的にのみ利用したいためDynamicDNSにて名前の解決をしてもらわず、
> 毎回定時にw2yをRestartさせその時取得したグローバルIPをメールで
> 遠隔地にいる私のところまで送信する
> という計画をしています。
これ、面白いですね。
ちょっと本題からはずれますが、ファイアウォール等であらゆるポートが閉められていても、
普通POP3とSNTPは空いてるわけですし、それを利用したらリモート管理もどきができそう。
# 無理があるかな?
> ケース1
>
> ADSL回線からADSL対応モデムに接続し、その先にW2Y pro(WEBサーバー)を接続しているケースの
> W2Y proのグローバルIPの取得
これについては、
40-27 管理人むたぐち 2001/07/01 23:12
19-02 管理人むたぐち 2000/07/31 18:28
等を参考にしてください。NICにグローバルアドレスが割り当てられているときは、
そんなに難しくありません。
> ケース2
>
> ADSL回線からADSL対応ルーターモデム(内側のIP→192.168.0.1)に接続し、
> HUBに接続し、その先にW2Y pro(WEBサーバー→192.168.0.2)を接続しているケースの
> ADSL対応ルーターモデムの外側のグローバルIPの取得
>
> ※ ケース2ではルーター側でNATテーブル(ポートマッピング)が行われ
> httpプロトコル(80)→192.168.0.2のPCと定義ずけられています。
これが問題ですねえ。
ルーターに何らかの方法でアクセスし、グローバルIPの情報を取ってくる必要があります。
これは完全にルーター依存だと思うのですが、たとえば私の使っているMegaBit Gear TE4100
の場合、ルーター上のCGIによって情報が取得できます。
http://ユーザー名:パスワード@ルーターのプライベートIP/cgi-bin/main.cgi?cc_webname=STATUS
とすると、ルーターのグローバルIPアドレスを含んだHTMLを取得できます。
(IPアドレスの値だけを取り出すコードが別途必要)
PerlですがMegaBit Gear TE4100の出力するHTMLを解釈してグローバルIPを
調べるスクリプトがありました。
http://www.kkoba.com/homeserver/ipchange.shtml
あと、ルーターの中にはtelnetサーバーとなるものがあり、その場合はtelnetを使って
グローバルIPアドレスが調べられると思います。
大変だと思いますが、チャレンジしてみてください。
To: 筑集眺餅 さん
> ワシの環境はADSLだけですが、アクチベできました。
> 「ダイヤルアップ」の中に電話番号がいらない「広帯域」ってのが
> 含められてるようです。
ひとまず、ほっ。
> よいしょっ、むたぐちさんのスクリプトを走らせてっと。
> XP(Pro) 5.1.2600.0
> と出ました。
> Windows 2002 ってところでしょう。
…一応システムのプロパティで確認しといてください…(ちょっとだけ自信ない)
To: satto さん
> ところで以下のスクリプトで取出したファイル名を名前順とかに並び替え又は
> 取込む時点で名前順に "list.txt" に排出するにはどうしたら?
> 「VBScript V5.5 ドキュメント」などをダウンロードして見てるんですが書いてないような?どうでしょう?
まずは一応。最新版のWSHとヘルプを入れることをお勧めします。
Windows Script5.6のヘルプは、かなり良くできてますので、これだけでも
見る価値ありです。
本題は、アオタさんへの返信で…
To: アオタ さん
> との事ですので JScript を使用してみてはどうでしょう
> JScript では配列はArrayオブジェクトなのですが、そのメンバにSortメソッドがあるので
> 一番楽にできると思います。
VBSからJSのSortメソッドを呼び出す方法について、過去に書いたので参照してください。
10-32 管理人むたぐち 2000/03/13 02:20
10-13 管理人むたぐち 2000/03/04 02:34
10-08 管理人むたぐち 2000/03/03 13:12
> しかし、VBScript でも配列をソートするだけでいいので作ってみました
> のでどうぞ(直球勝負ですのでお見苦しいところがあるやも知れません)
> 駄スクリプトですが、そのへんはご容赦を…
直球ソートもあります。
5-50 管理人むたぐち 1999/12/22 18:02
6-02 【おじさま】 さん 1999/12/22 19:18
他のコンポーネントを使う方法について。
6-01 SIGNAL9 さん 1999/12/22 18:29
> うちの学校の先生もこのことについてお怒りでした
> 学校内のLAN(NTサーバ)に入れなかったそうで
これ、非常に大問題だと思うんですが、あまり取りざたされていないのが奇妙な感じです。
Win9xにさえできることが、何でできないんだぁ。
> 私は、Win2000 が欲しいです
> さすがに、約4年前のPC(PenU266MHz)にはあれ(XP)は重いでしょうから
Win2000はいいですよ。
sp2も出てかなり枯れてきましたし、メモリさえ積んでれば軽いです。
> でも、あの見た目はちょっと好きなので残念でしょうがないです
私はLunaインターフェースダメ派なんですけどね。
いや、英語版はまだましだと思うんですが、どうも日本語化にセンスが感じられんのです。いろいろと。
Win2000にその手のシェルを乗っけたら、WinXPっぽくなるスキンとかもあるようですよ。
でも、たいていそういうのは重かったりするのだが(^^;
お久しぶりです アオタです
To: satto さん
はじめまして
アオタ と申します
私はほとんどROM 専門ですので何度かここで拝見しておりました
> ところで以下のスクリプトで取出したファイル名を名前順とかに並び替え又は
> 取込む時点で名前順に "list.txt" に排出するにはどうしたら?
> 「VBScript V5.5 ドキュメント」などをダウンロードして見てるんですが書いてないような?どうでしょう?
との事ですので JScript を使用してみてはどうでしょう
JScript では配列はArrayオブジェクトなのですが、そのメンバにSortメソッドがあるので
一番楽にできると思います。
<ArrayオブジェクトのSortメソッド>
http://www.microsoft.com/japan/developer/library/script56/js56jsmthsort.htm
</ArrayオブジェクトのSortメソッド>
しかし、VBScript でも配列をソートするだけでいいので作ってみました
のでどうぞ(直球勝負ですのでお見苦しいところがあるやも知れません)
駄スクリプトですが、そのへんはご容赦を…
<スクリプト>
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' 変数の宣言を強制する
Option Explicit
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' 定数の宣言
Const ForWriting=2
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' 変数の宣言 上段から オブジェクト変数、文字列型変数、整数値変数
Dim objFSO, objShell, objWScriptShell, objFolder, objSelFolder, objFile, objFileSave
Dim strFileArray(), strSelFolderPath
Dim i, j, nCnt
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' オブジェクト変数を初期化
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objShell = WScript.CreateObject("Shell.Application")
Set objWScriptShell = WScript.CreateObject("WScript.Shell")
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' フォルダ選択ダイアログの表示
Set objSelFolder = objShell.BrowseForFolder( 0, "フォルダを選んでください", &H10 )
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' フォルダ選択ダイアログで[キャンセル]を押すとエラーが発生する
' エラーなら処理を中断
On Error Resume Next
strSelFolderPath = CStr( objSelFolder.Items.Item.path )
If Err.Number<>0 Then WScript.Quit
If strSelFolderPath="" Then WScript.Quit
On Error GoTo 0
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' 保存するファイルをオープン
' 検索するフォルダを得る
Set objFileSave = objFSO.OpenTextFile( WScript.CreateObject( "WScript.Shell" ).SpecialFolders( "Desktop" ) & "\list.txt", ForWriting, True )
Set objFolder = objFSO.GetFolder( strSelFolderPath )
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' ファイル名を格納する配列を確保
ReDim strFileArray(objFolder.Files.Count)
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' 配列に格納 まだソートされていない
i = CInt( 0 )
For Each objFile In objFolder.Files
If LCase( objFSO.GetExtensionName( objFile.Name ))="jpg" Then
strFileArray(i) = objFile.Name
i = i + 1
End If
Next
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' 配列ないのファイル名をソート
Dim strSwap
nCnt = CInt( i )
For i=CInt( 0 ) To nCnt
For j=CInt( i+1 ) To nCnt
If StrComp( strFileArray(i), strFileArray(j), vbTextCompare )>0 Then
strSwap = strFileArray(i)
strFileArray(i) = strFileArray(j)
strFileArray(j) = strSwap
End If
Next
Next
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' ファイル名をファイルに保存
For i=CInt( 0 ) To nCnt
If strFileArray(i)<>"" Then objFileSave.WriteLine(strFileArray(i))
Next
MsgBox "終了" & vbCrlf & nCnt & "件"
'''''''''''''''''''''''''''''''''''''''''''''''''''''
' 後処理
objFileSave.Close
Set objFileSave = Nothing
Set objFolder = Nothing
Set objFSO = Nothing
Set objShell = Nothing
Set objWScriptShell = Nothing
Set objSelFolder = Nothing
</スクリプト>
あとは、これを煮るなり焼くなり無視するなりどうぞ
To: 管理人むたぐち さん
> えっ、WindowsXP HomeEditionって、NTドメインに参加できないの??
> これから発売されるPCにプリインストールされるOSって、だいたいHomeEditionだろうし、
> NTドメインな研究室の次期ネットワーク管理者になる私としては、非常に困るんですけど。
> Professionalにアップグレードしろ、なんて言えぬ…。
> # もしくはWin98/2000にダウングレードしろ、ってか。(MEはとてもじゃないがすすめられん)
うちの学校の先生もこのことについてお怒りでした
学校内のLAN(NTサーバ)に入れなかったそうで
私は、Win2000 が欲しいです
さすがに、約4年前のPC(PenU266MHz)にはあれ(XP)は重いでしょうから
でも、あの見た目はちょっと好きなので残念でしょうがないです
相当ご無沙汰です。その節は(どの節?)お世話になりました。
ところで以下のスクリプトで取出したファイル名を名前順とかに並び替え又は
取込む時点で名前順に "list.txt" に排出するにはどうしたら?
「VBScript V5.5 ドキュメント」などをダウンロードして見てるんですが書いてないような?どうでしょう?
Dim FS ,myFolder
Set FS = CreateObject("Scripting.FileSystemObject")
Set Shell=Wscript.CreateObject("Shell.Application")
Set f=Shell.BrowseForFolder(0,"フォルダを選んでください",&H10)
myFolder = f.Items.Item.path
If myFolder = "" Then WScript.Quit
Set newFile = FS.CreateTextFile("list.txt",True)
Set objFolder = FS.GetFolder(myFolder)
Dim objFile
For Each objFile In objFolder.Files
If LCase(Right(objFile.Name,3)) = "jpg" Then
newFile.WriteLine(objFile.Name)
End If
Next
To:むたぐちさん
>えっ、アクティベーションってダイヤルアップか電話だって??
>アナログ回線なんてないよ…いちいち電話するのか?
ワシの環境はADSLだけですが、アクチベできました。
「ダイヤルアップ」の中に電話番号がいらない「広帯域」ってのが
含められてるようです。
To:土屋さん
>98とXPのバージョンもご存知の方教えて下さい。
>98はやっぱり4.10かな?
よいしょっ、むたぐちさんのスクリプトを走らせてっと。
XP(Pro) 5.1.2600.0
と出ました。
Windows 2002 ってところでしょう。
To:むたぐちさん、Lib30さん
>> …sprintfって何でしたっけ。
>Cでは当たり前のように使う、整形した文字列を出力する関数です。
書式(format)付きで標準出力に出力するのが printf で、
メモリ上の string に出力するのが sprintf だったっす。
関数の overload がないと、やたら名前が増えて大変っす。