ばんのしゃーによかばんた さん 2005年 06月 15日 16時 08分 32秒

ところで、
ストリームの\005SummaryInformationも、同様に、
NotePad.EXE /A hoge.xxx:^ESummaryInformation.
で見れます。/AとControl+Eと末尾のdotがコツです。

序でに、
ファイルのプロパティの概要タブのキ−ワード欄が、
このようにして、\005SummaryInformationにあるのが見えるにも拘らず、

FolderItem.ExtendedProperty("DocKeywords")

FolderItem.ExtendedProperty("{F29F85E0-4FF9-1068-AB91-08002B27B3D9}5")

で、取り出せそうなものなのに、何故か取り出せません。
どうしてなんでしょう?


ばんのしゃーによかばんた さん 2005年 06月 15日 16時 07分 59秒

>いつも想定外 さん 2005年 05月 23日 11時 58分 15秒
>いろいろ検討しましたが、Passwd等だけでなくプログラム自体を
>あまり見られたくなかったので、今回はVBで作成し、exeファイルに
>することにいたします。

exeファイルにするだけなら、VBなんぞを使わなくても、

(注) 以下は文字化けではありません。真っ当なx86CPU機械命令です。
一部、新出尚之さんのcom2txtでエンコードされてますが。。。

バッチをhoge.exeにする。
――――――――――――――――――――――――――――――――――――――
:=7%00%AAPY5$>P_-|<P^)<$@P_4+PZ-@ P58(P52>P-`v,@P-B>4UP5I@P-]!P5U PHHHPu
:com2txtNideP504,nPQX4.P-n=PRX5.2P58FP5=I,TPRX-4SP-x84kP54N,%P5{N,vP-^8P
:/XP5>kPRX-/SPFFWXVZ##:!BAT2COM V1.03 1996
:!zQ|A@@@@@@@@@@@@@@A\_byBPUP@WGxnOs|?@@@@@@@@@N\B@@@@@@@@@@@@@OhncAXG@R
:zII`dACa^|@@G{TED^U`YWG`\NGxozoaTAnP\@|zYtEHozLlBy???rkhOoA{xN@[dG@ONfWp
:]^GueX~bzNE`\AKhlfBPG{prz@O`lA@GTO`OqN]@|}SgEtBhC|OWPEKo|n@pDnbBXK@^bN?w
:PHKlXFBpD@z~gzKhpVApDnbRXI@PxWo@@A~xC|OWP?TED^U`YWTsuN\WPKmB?MHXo{`|\^zp
:NCqrpNG{xO@[dF@ONdVu|GWa}YVOhncaXG@RzKI`dA~r{FA`lA@OcOGeHncaxl@BzKE`pAsR
:EZG?hncaXG@RzKI`dA~r{FA`lA@L~LCaxAc@xd@SO?c`Xl@BZJAPk@]CB~|`JyA@AW|z]_]Q
:nCqpbIOapAc@X^@RZJAPk@]A\rpKg???Jnz?@rpKg???Jnz|fx@TsMHT\f`stA]_QGQxd~C@
:DNA{?q@kzA@HhN`@@r{_Ndl@vjb|\mzPH|_gXHlG{FAfXCCYBbypJ|x@N{O`BtRltaAk`aM\
:taKhd^@pDnc@XE@P^z_@FxHRWMHR[EEapAnr@An@AKsRF\TB{EE`LAnBDesREXgWLBzxVx@D
:sMHP@oPuq~KdIAUB@@Pt}MTuAEPst=
@ECHO OFF
START /MIN net use \\サーバ名\共有名 パスワード /user:ユーザ名
――――――――――――――――――――――――――――――――――――――
あるいは、
スクリプトをhoge.exeにする。
――――――――――――――――――――――――――――――――――――――
'?7%00%CCPY-@=PZ5+"P5ZJP^-p*P_-`yPW5KGP5I@P,=P_15$@P_,TP^-&!P5U PHHHPPQu
'Nide/com2txt/X40PR553P58APZVX5WtPR-O9P/-ssP5)eP@@RPZX,AP/5oNP5WI'P-"9PS
'?[XP5^?P-UrPRXRNNNNNN'!VBS2COM 1.05 2003-08-01
'!cLbcpPFcqPFcrPFKvHlnK@BK?k@JnP@`|jyt@~fZ@Hd~opFNqSO?L|B~rpFyB@CsigPMnP
'@`|jxfN@Uu{NmzdHoWnP@`Ic`E]@SrknowQt@fNPUuYD]Gb?^Npxl~opEGcmvy@BBpC_JnSz
'pzxGPCjnoxIlXEHD^Nv{zA@HhN`@@r{TGsiHo_b|^KOk|AJ|\m@`@|_g\cb@WGQPDoP{DDt~
'mCmDkMHWHQcmv{oPF|@@Fx@DoMHWHBLlBtSLta@@@@@@@@W@@@@Fp@@@ACStuSTDUCOP=
'! START WScript.EXE //E:VBS //NoLogo
MsgBox "ここにスクリプト"
――――――――――――――――――――――――――――――――――――――
スクリプトソースを見た目ちょっと隠すなら、
Execute(UnEscape("スクリプトをEscape()した文字列"))
としてやればよいでしょう。


ばんのしゃーによかばんた さん 2005年 06月 15日 16時 07分 19秒

>いつも想定外 さん 2005年 05月 22日 02時 33分 23秒
>vbsファイルの中にサーバへ接続するIDとPasswdが埋め込まれていて
>可能な限りvbsファイルの中身を見せたくないのですが。。。。

こういう隠し方もあります。

ショートカットファイルにスクリプトをストリームでくっ付けて、
そのターゲットに指定する。

test.url
――――――――――――――――――――――――――――――――――――――
[InternetShortcut]
URL=file:///C:/Documents and Settings/hoge/デスクトップ/test.url:%05hoge.vbs
――――――――――――――――――――――――――――――――――――――

test.wsh
――――――――――――――――――――――――――――――――――――――
[ScriptFile]
Path=C:\Documents and Settings\hoge\デスクトップ\test.wsh:^Ehoge.vbs
――――――――――――――――――――――――――――――――――――――

スクリプト自体は、以下で作成します。

NotePad.EXE test.url:^Ehoge.vbs
NotePad.EXE test.wsh:^Ehoge.vbs

^E %05は制御文字です。

これなら、普通の人には、なかなか見えないのではないでしょうか。


鈴木 さん 2005年 06月 15日 09時 46分 32秒

To ちゃっぴ さん 2005年 06月 14日 20時 30分 36秒

返答ありがとうございます。

>Closeしてます?

Closeしてるつもりだったのですが、
CreateTextFileで作成・WriteLineで書いた後にCloseしてましたが、
OpenTextFileで開き・Readで読んだ後のCloseを行ってませんでした。

OpenTextFileで開き・Readで読んだ後のCloseを行ったところ、
削除できました。
ありがとうございました。

Readで読んだ後のCloseは以前行っていたのですが、
コードが誤っていたので失敗し、
Readで読んだ後のCloseは不可と思ってました。


ちゃっぴ さん 2005年 06月 14日 20時 30分 36秒

To 鈴木 さん 2005年 06月 14日 15時 11分 25秒

> CreateTextFileで作成・OpenTextFileで開き・Readで読むと
> DeleteFileで削除不可・書き込みできません エラーが発生します。
> Readで読む を行わない場合、DeleteFileで削除は成功します。

Closeしてます?
あと、Set TextStreamObject = Nothingも行ってますか?

To 管理人むたぐち さん

こないだ、OWA(Outlook Web Access)の利用者数を集計してくれと
頼まれましたので、早速Log Parserを使用してみました。

IISのLogを解析しましたが、らくちんですね。

Programingもしてみましたが、RegstryにQueryをかけられるのは、
使えるかも・・・

ばんのしゃーによかばんた さん 2005年 06月 14日 16時 35分 43秒

>vagabond さん 2005年 05月 23日 15時 32分 22秒
>WshShell.Runで実行したいコマンドは、以下の行です。
>runas /user:ドメイン名\管理ユーザー名 "net user %1 /active /domain"
>WshShell.Runの引数は""で括る必要があるはずですが、実行したいコマンド文に、既に「"」とか「\」が含まれていて、どのように記述すれば正しく動くのか、よく分かりません。

>単にロングファイルネームのパスを実行したい時は、
>WshShell.Run """C:\\Program Files\\Adobe\\Reader\\AcroRd32.exe"""
>こんな記述で良いのは知ってるんですが・・・
 
いいえ、その記法は、JScriptとVBScriptが混乱していて、動かないでしょう。

いつもは、手作業で、ソースを埋め込み文字列に変えているのですが、
ミスが多くて、そのバグ取りに結構な時間と労力が取られます。
なので、作ってみました。
――――――――――――――――――――――――――――――――――――――
<html><head>
<meta http-equiv="content-type" content="text/html; charset=shift_jis">
<title>source2string.HTA V1.00</title>
<script language="vbscript">
' source2string.HTA converts source text to string data.
' Usage: Start source2string.HTA

Option Explicit

resizeTo 600,410

Sub ToString()
VBS_String.value=""
JS_String.value=""
If Source.value="" Then Exit Sub
VBS_String.value=VBS2String(Source.value)
JS_String.value=JS2String(Source.value)
End Sub

Sub ToVBS()
Source.value=""
If VBS_String.value="" Then Exit Sub
'On Error Resume Next
Source.value=Eval(VBS_String.value)
End Sub

Sub FromClip
Source.value=clipboardData.getData("text")
End Sub

Function VBS2String(ByVal src)
src=Replace(src,"""","""""")
src=Replace(src,vbCrLf,"""&vbCrLf&""")
src=Replace(src,vbCr,"""&vbCr&""")
src=Replace(src,vbLf,"""&vbLf&""")
VBS2String=""""&src&""""
End Function

Function JS2String(ByVal src)
src=Replace(src,"\","\\")
If InnerQuote(1).checked Or OuterQuote(1).checked Then
 src=Replace(src,"""","\""")
End If
If InnerQuote(1).checked Or OuterQuote(0).checked Then
 src=Replace(src,"'","\'")
End If
src=Replace(src,vbCr,"\r")
src=Replace(src,vbLf,"\n")
If OuterQuote(0).checked Then
 JS2String="'"&src&"'"
Else
 JS2String=""""&src&""""
End If
End Function

Function VBS2Clip()
clipboardData.setData "text",VBS_String.value
End Function

Function JS2Clip()
clipboardData.setData "text",JS_String.value
End Function

Sub Drop()
Call CancelDefault()
Source.value=window.event.dataTransfer.getData("text")
End Sub

Sub DragEnter()
Call CancelDefault()
window.event.dataTransfer.dropEffect="copy"
End Sub

Sub CancelDefault()
window.event.returnValue=False
End Sub
</script>

<script language=jscript>
function ToJS(){
Source.value="";
if(JS_String.value=="") return;
Source.value=eval(JS_String.value);
//try{Source.value=eval(JS_String.value);}catch(e){}
}
</script>
</head>
<body scroll="no" style="background:menu;">
<div> Source: &nbsp;
<button onclick="FromClip()">←From Clip</button>
<button onclick="ToString()">↓To String</button>
</div>
<textarea id="Source" style="width:100%;" rows="5"
onfocus="Me.select()" ondragenter="DragEnter()" ondragover="CancelDefault()" ondrop="Drop()">
</textarea>
<br>
<div>VBS String: &nbsp;
<button onclick="ToVBS()">↑To VBS Source</button>
<button onclick="VBS2Clip()">→To Clip</button>
</div>
<textarea id="VBS_String" style="width:100%;" rows="5" onfocus="Me.select()">
</textarea>
<br>
<div>JS String: &nbsp;
<button onclick="ToJS()">↑To JS Source</button>
<button onclick="JS2Clip()">→To Clip</button>
</div>
<textarea id="JS_String" style="width:100%;" rows="5" onfocus="Me.select()">
</textarea>
Outer Quote:
<input type=radio name=OuterQuote CHECKED >Single
<input type=radio name=OuterQuote >Double
/ Inner Qoute:
<input type=radio name=InnerQuote CHECKED >Specific
<input type=radio name=InnerQuote >Common
</body></html>
――――――――――――――――――――――――――――――――――――――


鈴木 さん 2005年 06月 14日 15時 11分 25秒

ファイル削除不可。

VBScriptです。

CreateTextFileで作成・OpenTextFileで開き・Readで読むとDeleteFileで削除不可・書き込みできません エラーが発生します。
Readで読む を行わない場合、DeleteFileで削除は成功します。

CreateFolderでフォルダ作成・その中にファイル作成・フォルダ毎削除DeleteFolderしても結果は同じです。

DeleteFileのパラメータforceで読み取り専用の属性を持つファイルも削除できるTrueをつけても削除不可でした。ちなみに読み取り専用ファイルではありません。

どなたか解決方法ご存知ですか?

管理人により削除 さん (管理人により削除) 2005年 06月 14日 04時 00分 57秒
URL:管理人により削除

管理人により削除

ばんのしゃーによかばんた さん 2005年 06月 08日 17時 46分 46秒

>ばんのしゃーによかばんた さん 2005年 05月 11日 18時 14分 47秒
>あと、ファイルの比較は、Windiff.exeに2ファイルをドロップ、が便利ですね。
>しかし、フォルダが異なると、2ファイルをドラッグできないのがなんとも不便。

>ばんのしゃーによかばんた さん 2005年 06月 02日 18時 00分 19秒
>ファイルの検索を使って出来ないものか、とやってみました。
>仕方がないので、共通の親フォルダまで上って、
>ファイル名をAND/OR条件で絞って検索し、
>検索結果から2ファイルをSendToのWinDiffにドロップ。

ファイルの検索ってWSHやHTAから使えないもんでしょうか。

>便利ですけど、まだ、ちょっと面倒臭いですねぇ。

別案。
――――――――――――――――――――――――――――――――――――――
Set wShell=CreateObject("WScript.Shell")
args=Array("WinDiff.EXE")
For Each arg In WScript.Arguments
 ReDim Preserve args(UBound(args)+1)
 args(UBound(args))=arg
Next

Set uf=CreateObject("Forms.Form.1")
Set tb=uf.Controls.Add("Forms.TextBox.1").Object
tb.MultiLine=True
tb.Text=""
tb.Paste

For Each arg In Split(tb.Text,vbCrLf)
 arg=Trim(arg)
 If arg<>"" Then
  ReDim Preserve args(UBound(args)+1)
  args(UBound(args))=arg
 End If
Next

For k=0 To UBound(args)
 If Left(args(k),1)="""" Then
 ElseIf InStr(args(k)," ") Then
  args(k)="""" & args(k) & """"
 End If
Next

args=Join(args)

'MsgBox "'" & args & "'"
wShell.Run args
――――――――――――――――――――――――――――――――――――――
2ファイルのうち、1ファイルのパス名をクリップボードに先に送っておき、
第二のファイルをこのスクリプトに送る/ドロップする。


管理人むたぐち さん 2005年 06月 08日 16時 56分 49秒

To: すがり さん

> あるURLにアクセスして、そのHTMLに含まれる特定の文字の存在有無を
> 判断するにはどのようにしたらよいのでしょうか?

MSXML2.XMLHTTPなどを使って対象URLにアクセスしてHTMLを取得し、
その文字列に対してVBSのInStr関数を使えば良いと思います。

管理人により削除 さん (管理人により削除

管理人により削除

可能かな? さん 2005年 06月 06日 10時 06分 49秒

ちゃっぴさん

ありがとうございます。
あとは自分でがんばってみます。

管理人により削除 さん (管理人により削除) 2005年 06月 05日 15時 53分 43秒
URL:管理人により削除

管理人により削除

ばんのしゃーによかばんた さん 2005年 06月 04日 15時 15分 47秒

>ばんのしゃーによかばんた さん 2005年 06月 02日 18時 00分 44秒
>XCOPY "C:\Documents and Settings\ユーザ\Local Settings\Temporary Internet Files" HOGE\ /S /H

こういう、コマンドプロンプトやバッチで、時間の掛かる処理をやるときは、
処理中メッセージや終了メッセージを出してほしいもんです。

そこで、
――――――――――――――――――――――――――――――――――――――
「時間の掛かる処理」 2>lockfile | MSHTA.EXE "about:<script>var fso=new ActiveXObject('Scripting.FileSystemObject');var interval;</script><script for=window event=onload>resizeTo(200,100);interval=setInterval('try{fso.DeleteFile(\'lockfile\');document.body.innerHTML=\'<\'+\'marquee bgcolor=red> Ended...<\'+\'/marquee>\';clearInterval(interval);}catch(e){}',1000);</script><body bgcolor=yellow><marquee>Running...</marquee></body>"
――――――――――――――――――――――――――――――――――――――

テスト用サンプル
――――――――――――――――――――――――――――――――――――――
NotePad.EXE 2>lockfile | MSHTA.EXE "about:<script>var fso=new ActiveXObject('Scripting.FileSystemObject');var interval;</script><script for=window event=onload>resizeTo(200,100);interval=setInterval('try{fso.DeleteFile(\'lockfile\');document.body.innerHTML=\'<\'+\'marquee bgcolor=red> Ended...<\'+\'/marquee>\';clearInterval(interval);}catch(e){}',1000);</script><body bgcolor=yellow><marquee>Running...</marquee></body>"
――――――――――――――――――――――――――――――――――――――


ちゃっぴ さん 2005年 06月 03日 23時 35分 53秒

To 可能かな? さん 2005年 06月 03日 15時 07分 16秒

この場合WMIよりもADSIの方がいいでしょう。

Accountを無効にするSampleです。
strComputer, strUserName にそれぞれHostName, UserNameを
入れてお使いください。

Sub S_AccountDisable(strComputer, strUserName)
  Dim objUser ' As ActiveDs.IADsUser
  
  ' IADsUser Object 取得
  Set objUser = GetObject("WinNT://" & strComputer & "/" & strUserName)
  
  With objUser
    .AccountDisabled = True   ' Account無効
    .SetInfo          ' Update
  End With
End Sub

IADsUser
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adsi/adsi/iadsuser.asp

アカウントロックに関しては過去にResしましたので
Logをあさってください。

ちなみにWMIでもある程度までは可能なようですが、
# というのは、Win32_UserAccout のProperty に
# Read & Write のものが存在するため
更新を行う Put_ Methodを使用しても Errorになってしまいましたので、
なんかSecurity設定が必要なのかも知れません。
# 詳細は調査に時間がかかりそうなので不明です。

管理人むたぐち さん 2005年 06月 03日 21時 13分 13秒

難しく考えないで、これで良かったです。

'クエリーの取得
If Env("REQUEST_METHOD")="GET" Then
     sQuery=Env("QUERY_STRING")
Else
     Set StdIn = WScript.StdIn
     sQuery = StdIn.Read (CLng(Env("Content_Length")))
End If

管理人むたぐち さん 2005年 06月 03日 20時 42分 21秒

管理人むたぐち さん 2005年 06月 02日 17時 15分 57秒
管理人むたぐち さん 2005年 06月 02日 17時 13分 25秒

の04WebServerに関する記事は、私の勘違いでした…。
%Query% に文字列がうまく渡りませんね。

ひろ さん 2005年 06月 03日 17時 33分 37秒

>ばんのしゃーによかばんた さん 2005年 06月 03日 15時 27分 38秒
>質問を文面通りに受け取ると、答えは、
>XCOPY "C:\Documents and Settings\ユーザ\Local Settings\Temporary >
>Internet Files" HOGE\ /S /H
>となりますが、これが問題とは思えないし。
>
>質問が漠としていて、問題が特定出来ません。:-<
>
>※管理人むたぐち さん は分かってリダイレクトされた?
すいません。私の勘違いのようでした。
ばんのしゃーによかばんたさん、管理人むたぐち さん ご回答真にありがとうございました。


すがり さん 2005年 06月 03日 15時 44分 28秒

はじめまして。

あるURLにアクセスして、そのHTMLに含まれる特定の文字の存在有無を
判断するにはどのようにしたらよいのでしょうか?

どうかご教授くださいませ。

ばんのしゃーによかばんた さん 2005年 06月 03日 15時 27分 38秒

>ひで さん 2005年 06月 01日 23時 08分 38秒
>以下のようなコードでWebから"print_sheet"マクロの実行を行っています。
>しかし特定PC環境でのみVBScriptエラー(黄色い三角のびっくりマーク)
>「マクロ'print_sheet'が見つかりません」が発生し、そのまま固まってしまいます。

マクロ云々ということは、WSH側というより、Excel側の問題でしょう。

excelPathにprint_sheetがないか、あるのに見えないか、でしょう。

あるのに見えないとすれば、修飾が足りないとか。
print_sheetが何処に在るのかを明示してみてはいかがでしょう。

これでは、まだ駄目かも。

Sheet1.print_sheet
ThisWorkBook.print_sheet
Module1.print_sheet

以下ならどうでしょう。

hoge.xls!Sheet1.print_sheet
hoge.xls!ThisWorkBook.print_sheet
hoge.xls!Module1.print_sheet

変数を使うと、こんな感じです。

>objExcel.Workbooks.Open(excelPath)
>Call objExcel.Run("print_sheet", ...

Set book=objExcel.Workbooks.Open(excelPath)
Call objExcel.Run( book.Name & "!" & book.ActiveSheet.Name & ".print_sheet", ...
Call objExcel.Run( book.Name & "!ThisWorkBook.print_sheet", ...
Call objExcel.Run( book.Name & "!Module1.print_sheet", ...


可能かな? さん 2005年 06月 03日 15時 07分 16秒

はじめまして。
WMIを使用して、「コンピュータの管理」→「ローカルユーザとグループ」
→「ユーザ」画面で行えるようなこと(アカウントの有効無効及びアカウントロックと解除)を行いたいのですが、そのようなことは可能でしょうか?

SWbemServiceオブジェクトのExecQueryで該当アカウントに対してWin32_UserAccountからオブジェクトを取得して各項目に対して値をセット
すると思うのですが。。。

WSH初心者 さん 2005年 06月 03日 01時 36分 56秒

はじめまして.
WSHをはじめたばっかりでちょっと困っています.
何かよい解決策があればと思い投稿させていただきました.

標準入力をWSHで呼んでちょっと編集してテキストファイルに出力する処理を行っているのですが,標準入力の文字の色情報(C++かなんかで処理してるっぽい)を取得するにはどうすればいいのでしょうか?

できればもとのソースをいじりたくないので,WSHですべての処理を行いたいのですが,WSHでそういった処理は無理なんでしょうか?

以上です.よろしくお願いします.

ばんのしゃーによかばんた さん 2005年 06月 02日 18時 00分 44秒

>ひろ さん 2005年 05月 31日 18時 23分 59秒
>インターネット一時ファイルの内容をコピーして別フォルダに保存する方法はないでしょうか?というのは、一時ファイルに含まれる特定ファイルをバッチ処理で抽出したいためです。FSOを使用したのですが、うまくいきませんでした。

質問が漠としていて、問題が特定出来ません。:-<

※管理人むたぐち さん は分かってリダイレクトされた?

質問を文面通りに受け取ると、答えは、
XCOPY "C:\Documents and Settings\ユーザ\Local Settings\Temporary Internet Files" HOGE\ /S /H
となりますが、これが問題とは思えないし。

XCOPYで出来るのなら、FSOでも出来ると思いますので、
FSOで、どう、うまく行かないのかの説明がないと、
何とも答えようがないですね。


ばんのしゃーによかばんた さん 2005年 06月 02日 18時 00分 19秒

>ばんのしゃーによかばんた さん 2005年 05月 11日 18時 14分 47秒
>あと、ファイルの比較は、Windiff.exeに2ファイルをドロップ、が便利ですね。
>しかし、フォルダが異なると、2ファイルをドラッグできないのがなんとも不便。
>ファイルの検索結果みたいなところに、任意のフォルダのファイルをドロップして
>集め、それらをまとめてドラッグして、アプリのドロップできるとよいのだけれど。

ファイルの検索を使って出来ないものか、とやってみました。

昔は、探す場所を複数、"hoge"+"hoge"のように指定出来たように思うのですが、
出来ません。なんで?

仕方がないので、共通の親フォルダまで上って、
ファイル名をAND/OR条件で絞って検索し、
検索結果から2ファイルをSendToのWinDiffにドロップ。

便利ですけど、まだ、ちょっと面倒臭いですねぇ。

※使えるのはAND/ORだけ? ヘルプを探したけれど、AND/ORも見つからない。:-<


SIGNAL9 さん 2005年 06月 02日 17時 48分 51秒

>むたぐちさん

ご意見ありがとうございます。見切りをつけるのに参考になってありがた
いです。

3は実装自体は簡単なので、サイズ見合いにしようと思います(下書きし
てリンクしてみたら、Doodle本体のサイズがけっこう膨れてしまいまし
た…。スレッドの問題があるのでwininetは使いたくないし、winsockで
ベタ書きしてみたのですが、DLLで800KBオーバーつーのはちょっと
どうかと思いますよね^^;。単体DLLというのはポリシーなので、分割も
したくないし)

4はちょっと考えてみます。TIFFやICONはたぶん手が回りませんが、アニ
GIFくらいはなんとかしたいです。

いつもながら、ありがとうございます。ではまたいずれm(__)m

管理人むたぐち さん 2005年 06月 02日 17時 15分 57秒

●04WebServer + WSHでCGIの注意点2(覚え書き)

「MIMEタイプの設定」で
application/x-vbscript          vbs
を追加。

管理人むたぐち さん 2005年 06月 02日 17時 13分 25秒

●04WebServer + WSHでCGIの注意点(覚え書き)

04WebServer : パーソナルWebサーバ
http://www.soft3304.net/04WebServer/

*.vbsに対して、以下の「CGI実行プログラム」を指定。
cscript.exe //nologo "%FilePath%" "%Query%"
※ ""で囲む。

*.vbs側でクエリーを取得する方法。
'クエリーの取得
Set Env = WshShell.Environment("Process") '環境変数
If Env("REQUEST_METHOD")="GET" Then
     sQuery=Env("QUERY_STRING")
ElseIf Env("REQUEST_METHOD")="POST" And WScript.Arguments.Count=1 Then
     sQuery=WScript.Arguments(0)
End If

AnHTTPDのように標準入力を読むのではなく、コマンドライン
オプションで取得。

管理人むたぐち さん 2005年 06月 02日 14時 32分 48秒

To: SIGNAL9 さん

お久しぶりです。

> 本日(2005/06/01)時点では以下の改修を考えています。

> 3:httpで画像を読み込むLoadFromHttp(URL)メソッド。

これですが、おっしゃるとおり、あったら便利ですが無くても
困らないメソッドですよね。お時間に余裕があるのなら実装
されてみてはいかがでしょう?
たしかに、XMLHTTPを使えば良いという話もありますが、
Doodle2だけで完結させてしまえれば、コードが綺麗になるという
話もありますし。

ただ、ここはシンプルに、引数をURLしか取らないほうがいいでしょうね。
やれReferだのやれPOSTだのTimeoutだの言い出すとキリがありませんし。
せいぜい、戻り値に失敗か成功を返すくらいで。
もっと込み入ったことをやる場合は、XMLHTTPを使ってください的に。

> 4:複数キャンバス。

私が以前リクエストした項目ですね。
アニGIFとかアイコンファイル、MultiPageTiffあたりをサポートするなら、
あったらいい感じがします。おっしゃるとおり、別コンポーネント(Doodle3?)
にすべきという意見もありだと思いますが、そこまでは大変なのでは
ないかという気がします。
既存の枠組みでの拡張が難しいのであれば、見送りも可じゃないですか?

もちろん、個人的にはあったら嬉しい項目ですが…。
以前この掲示板に出てきたように、フォルダ用icoファイルの生成とか、
VBSでanimation GIF uploader用サムネイル画像を出力したりとか、
できるようになりますしね。

画像・動画関係にはWSHは少し弱いので、使いやすいコンポーネントが
脇を固めてくれると本当にありがたいです。



To: ひで さん

> たとえば、Officeのバージョンは一緒でも
> 何かほかのソフトをインストールしたことによって、VBスクリプトエンジン
> (みたいなものが)上書きされ、RUNメソッドの使い方が変わってしまうみたいな
> ことがあるのでしょうか。

Runメソッドの動作が変わるかどうかはわかりませんが、VBScriptのエンジンが上書き
されるケースはあります。具体的には、IEをインストールしたり、
Windows Script 5.6を別途インストールしたり、Windows updateをしたり、です。
wscript.exe、vbscript.dllのバージョンは揃っていますか?

管理人むたぐち さん 2005年 06月 02日 14時 19分 19秒
URL:http://www.vector.co.jp/soft/win95/art/se367881.html

mp3_autofill.vbs(Windows95/98/Me/画像&サウンド)
http://www.vector.co.jp/soft/win95/art/se367881.html

ベクターでミラーを公開していただきました。
一般ユーザー層の方に使っていただけると良いなあ。

管理人により削除 さん 2005年 06月 01日 23時 11分 11秒

管理人により削除

ひで さん 2005年 06月 01日 23時 08分 38秒

こんばんは。
以下のようなコードでWebから"print_sheet"マクロの実行を行っています。
しかし特定PC環境でのみVBScriptエラー(黄色い三角のびっくりマーク)
「マクロ'print_sheet'が見つかりません」が発生し、そのまま固まってしまいます。

上手くいくPCと上手くいかないPCの原因切り分けに困っています。
何か良い方法ありましたらお願いします。

ちなみに、Win2000(SP4)+IE6.0(SP1)+Office2000(SR-1)です。
OKの環境とNGの環境で上記Versionは一致していました。

以下コード抜粋
=====================================================================
' Excelオブジェクト作成
Set objExcel = CreateObject("Excel.Application") ' エラーが発生した場合は終了する
If Err.Number <> 0 Then Exit Function
    
On Error GoTo 0
    
' Excelテンプレート起動
objExcel.Workbooks.Open(excelPath)
    
' 印刷マクロを実行する
Call objExcel.Run("print_sheet", Cstr(xmlPath), Cstr(previewFlg), Cstr(btnName))
=====================================================================

たとえば、Officeのバージョンは一緒でも
何かほかのソフトをインストールしたことによって、VBスクリプトエンジン
(みたいなものが)上書きされ、RUNメソッドの使い方が変わってしまうみたいな
ことがあるのでしょうか。


管理人により削除 さん (管理人により削除) 2005年 06月 01日 21時 50分 22秒
URL:管理人により削除

管理人により削除

SIGNAL9 さん 2005年 06月 01日 17時 08分 45秒

>むたぐちさま

 ROM専のSIGNAL9でございます。

 リンク頂いているDoodle2ですが、以前ご報告したとおり、開発環境をツ
ブしてしまったので改修はストップしておりました。
 ところが上手い具合に、いらなくなったノートPCを一台貰ったので、久しぶり
に更新してみようかと考えております。

 あまり利用者もいないようですし、.NET時代にいまさらという気もするので、
たぶんコレが最後の版になると思います。
  あいかわらず貧乏ヒマなしな生活してるのでいつになるか分かりませんが…

本日(2005/06/01)時点では以下の改修を考えています。

1:LZW特許失効に伴う、GIF圧縮機能の改善。
  「改善」というよりは「封印の解除」なんですが(^^;)。
  故意に手抜きをしていたGIFの圧縮を、ちょっとマジメに実装する。

2:フィルタ機能追加。
  以前に利用者の方からメールで要望を頂いた、
  (1)グレイスケール、(2)シャープネス、(3)ぼかし
  の各フィルタを付与する。
  (1)は単にドット単位にザァーっと計算していくだけ−既存のフィルタのパラ
  メータ弄るだけなんですが、(2)(3)は一次微分フィルタなんで、エフェクト
  前後のビットマップを部分的にでも保持してなきゃいけない。
  メモリは喰うわ遅いわで、元々のDoodleの設計思想からするとど〜よ?と思っ
  て見合わせていたのですが、もう最後だからどうでもいいや(笑)。
  つーか、下請けの関数そのものをメソッドにして公開しちまえばいいかな?

実装するかどうかちょっと悩んでるのは、

3:httpで画像を読み込むLoadFromHttp(URL)メソッド。
  これも以前利用者の方からメールで要望いただいたのですが、本当にいる
  のかなぁ?
  ServerXMLHttpとかで代用は出来るし、そっちの方が汎用性は高いし。
  どうしてもDLLのサイズも膨れるだろうし。

4:複数キャンバス。
  複数キャンバスに拡張するのは可能なのですが、あまり使い道がない
  ような気がする。
  元々Doodleではスクリプトの変数とVariant型のバイト配列で受け渡しが
  できるようにしたから、入れたり出したりすればわざわざコンポーネント
  内部で複数のビットマップを抱えなくてもいいかな…と思っていたので。
  アニGIFとかアイコンファイルとか考えると、複数持ててもいいかとも思っ
  たが、それだったらソレ専用にコンポーネント分けた方がいいかな?とも
  思ったり。

 よろしかったらご意見頂ければ幸いです。

ちゃっぴ さん 2005年 06月 01日 17時 08分 00秒

To bia さん 2005年 05月 31日 21時 48分 05秒

"AAA.BBB.co.jp\Adminユーザ名"形式で、Windows2000でも成功したのは、
SSL, cross-forest Kerberos認証が失敗して、
NetUserSetInfo API で認証されたためだからでしょう。

"CN=Adminユーザ名,OU=OU名,DC=AAA,DC=BBB,DC=co,DC=jp"でダメなのは、
LDAP形式の指定をNetUserSetInfo APIでは扱えないのだと思います。

"Adminユーザ名"の指定でダメなのとOKなのがある件ですが、
これは通常のLogonにもいえることですね。
# Domainへの認証ではまず間違いなく"Domain\Username"を使用します。

> ちなみにあまり関係ありませんが、Google デスクトップ検索
> (http://desktop.google.co.jp/)をインストールしてみました。

Main Machine に NOD32 を入れてますので、
ConflictしてInstallすらできない・・・

> Log Parser 2.2 日本語版

これ以外はほとんど使っているんですけどね・・・。
# ScriptOmaticは手放せません。
日本語版があったんですか・・・
早速試してみます。

WSH初心者 さん 2005年 06月 01日 16時 12分 48秒

To:管理人むたぐち様

解決しました。ありがとうございました。
仰る通り、文法レベルの単純なことが見えていなかったのはお恥ずかしい限りです。
とりあえず文法書を読みつつ、コーディングの数をこなすことを重ねようと思います。
本当にありがとうございました。

管理人により削除 さん 2005年 06月 01日 12時 23分 24秒
URL:管理人により削除

管理人により削除

bia さん 2005年 05月 31日 21時 48分 05秒

To ちゃっぴ さん 2005年 05月 25日 20時 09分 55秒

>To bia さん 2005年 05月 25日 19時 18分 08秒

>どういう風に変更したかを書いていただけると
>同様の問題で悩んでいる人の助けになると思います。
># 個人的にも興味がありますので・・・

遅くなりましたが、上記についての返答させて頂きます。

まず、結論からですが色々と試した結果、下記のような結果になりました。

  ''Windows2000(ドメイン不参加端末)=○:Windows2000(ドメイン参加端末)=○:WindowsXP=○
  Set objDsItem = objDs.OpenDSObject(LDAP_ADsPath, "AAA.BBB.co.jp\Adminユーザ名", "Adminパスワード", ADS_SECURE_AUTHENTICATION)

  objDsItem.SetPassword "設定パスワード"
  objDsItem.SetInfo

  
  ''Windows2000(ドメイン不参加端末)=×:Windows2000(ドメイン参加端末)=○:WindowsXP=○
  ''Set objDsItem = objDs.OpenDSObject(LDAP_ADsPath, "CN=Adminユーザ名,OU=OU名,DC=AAA,DC=BBB,DC=co,DC=jp", "Adminパスワード", ADS_SECURE_AUTHENTICATION)

  objDsItem.SetPassword "設定パスワード"
  objDsItem.SetInfo

    
  ''Windows2000(ドメイン不参加端末)=×:Windows2000(ドメイン参加端末)=?:WindowsXP=○
  ''Set objDsItem = objDs.OpenDSObject(LDAP_ADsPath, "Adminユーザ名", "Adminパスワード", ADS_SECURE_AUTHENTICATION)
  
  objDsItem.SetPassword "設定パスワード"
  objDsItem.SetInfo

私の環境ではドメインに参加させていない端末から2番の方法で処理を行っていたので、エラーになっているようでした。

ここで気になったのが、WindowsXP、2000に関わらず、全ての方法でOpenDSObjectやChangePasswordは処理が通るのにSetPasswordのみWindows2000で動作が不安定に感じたということです。

調べてみたところ、activeds.tlbおよびactiveds.dllのバージョンがXPと2000で違ったので、そこらへんに違いがあるのかな?と感じました。

また、上記の結果から、OpenDSObjectで使った認証をつかってSetPasswordの処理も認証しているのかな?とも思いました。(まと外れなら、すいません)

OpenDSObjectでエラーにならずにSetPasswordでエラーになったため、問題の切り分けに時間がかかりました。

また、上記の3番目で
Windows2000(ドメイン参加端末)=?
となっているのは処理が通る端末と通らない端末があったためです。
何か環境がちがうのかな><

以上、結果報告でした。

追伸:やはり、煮詰まっているときは他の人からの意見がとてもありがたく感じました。
視野が狭くなってるときには他の人からの意見であらたに試す事があることに気づくことができました。本当にありがとうございました。

管理人むたぐち さん 2005年 05月 31日 20時 40分 57秒

To: 魔界の仮面弁士 さん

> もっとも、私はLogParserを利用した事が無いのですが。(汗

今度勉強会でも開きましょうか?w
オフラインでもオンラインでも。どなたか講師をお招きして、
勉強させていただきたいですね。
ちょっと態度が受身かな。

> あれ。GDS と MSN-Search の両方を入れてらっしゃるんですか?

いえ、MSN-Searchはまだ正式版が出ていないので入れていません。
正式版が出たほうを先に入れると決めていたので、GDSが私の中では勝ちました。
Microsoftは頑張って開発を続けていただきたいです。

しかしこれ、便利ですね。プラグインがあるということは、きっとAPIも
公開されているんでしょう。私の使っているメールクライアントのDatulaの
メッセージもこれで検索できるようになると良いなあ。

IMEで変換したときに一瞬の「硬直」が発生するようになったのと、IE6でしか
検索結果を開けない不満点以外は、今のところ満足しています。



To: ひろ さん

> インターネット一時ファイルの内容をコピーして別フォルダに保存する方法はないでしょうか?

最近、ばんのしゃーによかばんたさんが検証されていました。

http://www.roy.hi-ho.ne.jp/mutaguchi/bbs/list131.shtml
ばんのしゃーによかばんた さん 2005年 04月 26日 16時 22分 13秒



To: WSH初心者 さん

> WshShellのRunメソッドを使って、テキストファイルの印刷を行おうとしています。
> notepadを開いて、ファイル名を指定して印刷しようとしているのですが上手くいきません。
>
> strTempFile = "c:\test\" & strTempName
> WSHShell.Run "C:\Windows\notepad.exe /p strTempFile",1,True

strTempFileは変数ですが、""で括ってしまうと文字列扱いを受けてしまうため
このコードではうまく動きません。
正しくはこうです。

strTempFile = "c:\test\" & strTempName
WSHShell.Run "C:\Windows\notepad.exe /p " & strTempFile,1,True

VBSの文法を学習なさることをお勧めします。

WSH初心者 さん 2005年 05月 31日 19時 27分 07秒

いつも参考にさせてもらっています。
大変悩んでおりまして、皆様のお知恵をお貸し頂けますでしょうか。


WshShellのRunメソッドを使って、テキストファイルの印刷を行おうとしています。
notepadを開いて、ファイル名を指定して印刷しようとしているのですが上手くいきません。

strTempFile = "c:\test\" & strTempName
WSHShell.Run "C:\Windows\notepad.exe /p strTempFile",1,True

上記のような形で、ファイル名を変数として指定したいのです。
テキストファイルへの書き込み自体はできており、後はこれを印刷すればいいのですが…
notepadは起動しますが、「ファイル strTempFile.txtが見つかりません。」とエラーになってしまいます。

Runメソッドを使っている以上はファイルパスの部分はベタ打ちしなければならないのでしょうか?
お手数ですが宜しくお願い致します。

ひろ さん 2005年 05月 31日 18時 23分 59秒

インターネット一時ファイルの内容をコピーして別フォルダに保存する方法はないでしょうか?というのは、一時ファイルに含まれる特定ファイルをバッチ処理で抽出したいためです。FSOを使用したのですが、うまくいきませんでした。
よろしくお願いいたします。

ばんのしゃーによかばんた さん 2005年 05月 31日 17時 33分 56秒

>ばんのしゃーによかばんた さん 2005年 05月 27日 16時 25分 17秒
>>\005SummaryInformationのバイナリをADO Streamでアクセスするのは、鬱。
>SummaryInfoを更新する方法です。

バイナリはあまり意識したくなかったのですが、
少なくとも、可変長サイズには対応する必要がありました。
それと、CodePageのエントリも必須なようです。
ずるずるバイナリの闇へ落ちて行きそう。

Sub ChangeProperty(FolderItem,Title,Lines)
Dim WindowsInstaller
Dim Database
Dim SummaryInformation
Dim Path
Dim BOM
Dim Size

ModifyDate=FolderItem.ModifyDate
Path=fso.BuildPath(fso.GetSpecialFolder(2).Path,fso.GetTempName())
Set WindowsInstaller=CreateObject("WindowsInstaller.Installer")
Set Database=WindowsInstaller.OpenDatabase(Path, 3)
Set SummaryInformation=Database.SummaryInformation(16)
Dim Prop
'Prop=FolderItem.ExtendedProperty("{F29F85E0-4FF9-1068-AB91-08002B27B3D9}1")
'WScript.Echo "CP",TypeName(Prop),Prop
Prop=FolderItem.ExtendedProperty("DocTitle")'2o
If Prop<>"" Then SummaryInformation.Property(2)=Prop
Prop=FolderItem.ExtendedProperty("DocSubject")'3o
If Prop<>"" Then SummaryInformation.Property(3)=Prop
Prop=FolderItem.ExtendedProperty("DocAuthor")'4o
If Prop<>"" Then SummaryInformation.Property(4)=Prop
'Prop=FolderItem.ExtendedProperty("DocKeywords")'5x o
'If Prop<>"" Then SummaryInformation.Property(5)=Prop
Prop=FolderItem.ExtendedProperty("DocComments")'6o
If Prop<>"" Then SummaryInformation.Property(6)=Prop
'Prop=FolderItem.ExtendedProperty("DocRevNumber")'9x o
'If Prop<>"" Then SummaryInformation.Property(9)=Prop

SummaryInformation.Property(1)=932 '&H3A4
'SummaryInformation.Property(&H80000000)=CLng(1041) '&H411
If Not IsEmpty(Title) Then
 SummaryInformation.Property(2)=Title
End If
SummaryInformation.Property(6)=Lines
SummaryInformation.Persist
Set SummaryInformation=Nothing
Database.Commit
Set Database=Nothing
Set WindowsInstaller=Nothing

Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2

Dim Src
Dim Dst

Set Src=CreateObject("ADODB.Stream")
Set Dst=CreateObject("ADODB.Stream")
Src.Open
Dst.Open
Src.Type=adTypeBinary
Dst.Type=adTypeBinary
Src.LoadFromFile Path
On Error Resume Next
Dst.LoadFromFile FolderItem.Path&":"&Chr(5)&"SummaryInformation"
On Error GoTo 0
'WScript.Echo "StreamSize",Dst.Size
Src.Position=&HA40
BOM=Src.Read(2)
If AscB(MidB(BOM,1,1))<>&HFE Then
 WScript.Echo "BOM1",AscB(MidB(BOM,1,1))
 WScript.Quit
End If
If AscB(MidB(BOM,2,1))<>&HFF Then
 WScript.Echo "BOM2",AscB(MidB(BOM,1,1))
 WScript.Quit
End If
Src.Position=&HA40+&H30
Size=Src.Read(4)
Size=AscB(MidB(Size,1,1))+AscB(MidB(Size,2,1))*256+AscB(MidB(Size,3,1))*256*256+AscB(MidB(Size,4,1))*256*256*256+&H30
'WScript.Echo "Size",Size
Src.Position=&HA40
Src.CopyTo Dst,Size
Dst.SetEOS
Dst.SaveToFile FolderItem.Path&":"&Chr(5)&"SummaryInformation", adSaveCreateOverWrite
Src.Close
Dst.Close
Set Src = Nothing
Set Dst = Nothing

fso.DeleteFile Path
FolderItem.ModifyDate=ModifyDate
End Sub


ばんのしゃーによかばんた さん 2005年 05月 31日 17時 33分 33秒

>ばんのしゃーによかばんた さん 2005年 04月 12日 15時 20分 11秒
>>ところが、CMD.EXEには「障害」があって、
>>グルーピング()中の)が正しく処理されないのです。
>さらに、<>のエスケープにも「障害」があるようです。:-<

閃きました。
ECHOの文字列を引用符で囲めば、これらの障害を回避できるので、
受け取る側で引用符を外せばよいのですが、問題はその外し方です。
面倒臭そうな方法しか思い付かず、このアプローチは放棄していたのですが、
意外と簡単な外し方が閃きました。

こちら、複数行インラインスクリプトの定石になります。

――――――――――――――――――――――――――――――――――――――
(
ECHO "Set wShell=CreateObject(""WScript.Shell"")"
ECHO "wShell.PopUp(""HOGE"")"
) | MSHTA.EXE vbscript:Execute(Eval(Replace(CreateObject("Scripting.FileSystemObject").GetStandardStream(0).ReadAll()^&"""close""",vbCrLf,"&vbCrLf&")))PAUSE
――――――――――――――――――――――――――――――――――――――

――――――――――――――――――――――――――――――――――――――
(
ECHO "<head>"
ECHO "<script language=vbscript>"
ECHO "Set wShell=CreateObject(""WScript.Shell"")"
ECHO "wShell.PopUp(""HOGE"")"
ECHO "close"
ECHO "</script>"
ECHO "</head>"
) | MSHTA.EXE vbscript:Eval(Replace(CreateObject("Scripting.FileSystemObject").GetStandardStream(0).ReadAll()^&"""""",vbCrLf,"&vbCrLf&"))
PAUSE
――――――――――――――――――――――――――――――――――――――


魔界の仮面弁士 さん 2005年 05月 31日 11時 09分 08秒

》管理人むたぐち さん 2005年 05月 30日 21時 00分 14秒
LogParserに関しては、eXConnのスレッドが参考になりますね。
http://www.exconn.net/Forums/ShowPost.aspx?PostID=225

もっとも、私はLogParserを利用した事が無いのですが。(汗


> ちなみにあまり関係ありませんが、Google デスクトップ検索
> (http://desktop.google.co.jp/)をインストールしてみました。
> MSN Search、負けるなー!
あれ。GDS と MSN-Search の両方を入れてらっしゃるんですか?

管理人むたぐち さん 2005年 05月 30日 21時 00分 14秒

最近、セキュリティ関係の達人、平たく言えばサーバー系・セキュリティ系MSMVPの皆様の間で、WSHが注目されているようです。といってもWSHそのものではなく、WSHから利用できるとあるコンポーネントです。

ダウンロードの詳細 : Log Parser 2.2 日本語版
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07

このLog Parserを使えば、サーバーのログを詳細に解析するスクリプトが容易に記述できるそうです。
私も小規模ながらサーバーを管理する身ですし、Scripting MVPの端くれとしてちょっと勉強してみようかなあと思います。

最近、にわかにブーム再燃の朗報でした^^

ちなみにあまり関係ありませんが、Google デスクトップ検索
(http://desktop.google.co.jp/)をインストールしてみました。
MSN Search、負けるなー!

管理人により削除 さん (管理人により削除) 2005年 05月 28日 19時 43分 34秒
URL:管理人により削除

管理人により削除

ばんのしゃーによかばんた さん 2005年 05月 28日 15時 43分 25秒

htaで、onloadだとちらっとするので、htaの先頭でmoveTo/resizeToすること
が多いのですが、startup時などで負荷が高いときに、
windowオブジェクトのアクセスエラーが出るときがあります。
先頭とonloadの両方に書いて、先頭はon error resume nextしておくのかなぁ。
他によい対処法はありますでしょうか?


ばんのしゃーによかばんた さん 2005年 05月 28日 15時 42分 56秒

>ばんのしゃーによかばんた さん 2005年 05月 22日 16時 36分 20秒
>Logoffスクリプトの代替で、Sub Auto_Close()を使う方法がありましたが、
>試してみると、なんか出来なくなっているみたいです。
>終了フェーズでは、WSHやCMD.EXEの新たな初期化が禁止されるようになった?
>XPから? 代替方法は全滅かも。
>VB FormのQueryUnload()を使うオーソドックスな方法も駄目です。
>がっくり。

補足。
確かに、他のバッチやWSHを新たに動かすのは、駄目なようですが、
Auto_Close()やQueryUnload()の中で処理する分には、よいようなので、
その範囲では使えます。
ただし、Logoffスクリプトと違って、待ち合わせをしてくれないので、
カウントダウン中に処理を終わらせないといけません。


管理人むたぐち さん 2005年 05月 28日 13時 09分 36秒

すみません。

 なお、このスクリプトは、xcopy の /s /dオプションと併用して用いることを(ほぼ)
 前提としています

の間違いです。

管理人むたぐち さん 2005年 05月 28日 13時 04分 31秒

「二つのフォルダに一つずつしかないファイルを消すスクリプト」のバグを数点修正して再upしました。

なお、このスクリプトは、xcopy の /u オプションと併用して用いることを(ほぼ)
前提としています。

そのため、二つのフォルダに一つずつしかない「フォルダ」と、その
フォルダ以下のファイルが削除されないのは仕様です。

ばんのしゃーによかばんた さん 2005年 05月 27日 16時 25分 17秒

>ばんのしゃーによかばんた さん 2005年 05月 01日 15時 46分 29秒
>SendKeysでなく、SummaryInfoを更新する方法はないものでしょうか?
>\005SummaryInformationのバイナリをADO Streamでアクセスするのは、鬱。
>ProgID="WindowsInstaller.Installer"で出来るかなと思ったのですが、駄目みたい。

SummaryInfoを更新する方法です。

WindowsInstaller.Installerでダミーのデータベースを作り、
OLEStorage内にSummaryInfoを作ります。
――――――――――――――――――――――――――――――――――――――
Set WindowsInstaller=CreateObject("WindowsInstaller.Installer")
Set Database=WindowsInstaller.OpenDatabase("C:\aaa\test.MSI", 3)
Set SummaryInformation=Database.SummaryInformation(16)
SummaryInformation.Property(2)="title"
SummaryInformation.Property(6)="comment"
SummaryInformation.Persist
Database.Commit
WScript.Quit
――――――――――――――――――――――――――――――――――――――

OLEStorage内にSummaryInfoを任意のファイルにNTFS Streamにコピーします。
――――――――――――――――――――――――――――――――――――――
Option Explicit
Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2
Dim fso
Dim sFile
Dim dFile
Dim Src
Dim Dst

Set fso=CreateObject("Scripting.FileSystemObject")

If WScript.Arguments.Count=2 Then
 sFile=fso.GetAbsolutePathName(WScript.Arguments(0))
 dFile=fso.GetAbsolutePathName(WScript.Arguments(1))
 dFile=dFile&":"&Chr(5)&"SummaryInformation"
Else
 WScript.Echo "Usage: CopySummaryInfo FromFile ToFile"
 WScript.Quit
End If

Set Src=CreateObject("ADODB.Stream")
Set Dst=CreateObject("ADODB.Stream")
Src.Open
Dst.Open
Src.Type=adTypeBinary
Dst.Type=adTypeBinary
Src.LoadFromFile sFile
Src.Position=&HA40
Src.CopyTo Dst,&HA0
Dst.SaveToFile dFile, adSaveCreateOverWrite
Src.Close
Dst.Close
Set Src = Nothing
Set Dst = Nothing
WScript.Quit
――――――――――――――――――――――――――――――――――――――


Return