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

>管理人むたぐち さん 2004年 11月 11日 21時 44分 04秒
>> 掲示板への書込ボタンを押すと下記エラーが発生。
>こちらでも再現しました。
>Googleの検索フォームを挿入したのがまずかったようです。
>とりあえず検索フォームを外してみたところ、正常動作するようになったみたいです。

この件ですが、いつまでも、とりあえず、のまんまはよくないです。:-<

|function set_cgi_vars() { // CGI変数のセット
|     var form = right.document.forms[0];
|     form.name.value = ini.name;
|     form.email.value = ini.email;

なので、単純に、検索フォームを書き込みフォームの後に持って行けばよいと思います。

あるいは、別ページにして、リンクするとか。

取り敢えず、切り抜いてローカルにて使わせて頂きます。
――――――――――――――――――――――――――――――――――――――
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=x-sjis">
<title>WSH Lab. 掲示板 検索</title>
</head>
<body bgcolor="#DEDBF7" text="#00006F">
<h1 align="left"><font color="#0000A0" size="5">WSH Lab.掲示板 検索</font></h1>
<hr>
<form action="http://www.google.com/search" method="GET" name="f">
Googleサイト内検索: <input type="hidden" name="hl" value="ja">
<input type="hidden" name="lr" value="lang_ja">
<input type="hidden" name="ie" value="Shift_JIS">
<input type="hidden" name="num" value="20">
<input type="text" value="" size="50" name="q">
<input type="hidden" name="q" value="site:roy.hi-ho.ne.jp">
<input type="submit" class="Btn" name="submit" value="検索">
</form>
<hr>
</body>
</html>
――――――――――――――――――――――――――――――――――――――


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

showModalDialogやshowModelessDialogのwindowも、HTAのwindowと同様に、
外部から捕捉できません。HTAの場合は、まだ、右クリックが利くケースも
ありますが、Dialogの場合は手も足も出ません。

唯一つ、^p(印刷)は利くようです。

前に、Norton AntiVirusがMSHTML.DLLを使っていると書いたことがあります。
試しに、スキャンの進行状況の画面で^pすると、こちらも利きました。

Generic / Text Onlyに出せば、スキャン結果をテキストに取り出せます。

フッターを見ると、
res://C:\PROGRA~1\NORTON~1\NAVComUI.DLL/QuickSummar...

もし、IEのデフォルトprint templateの設定が、レジストリとかで、
変更できるのであれば、DOMにアクセスして、HTML形式で取り出せるのですが、
どうなんでしょう?


管理人むたぐち さん 2005年 04月 23日 17時 24分 48秒

最後の行、
objRegistry.SetBinaryValue HKEY_CURRENT_USER,strPath,"TestValue",uBinary

の間違いです。不必要な括弧がくっついてました。
失礼しました。

管理人むたぐち さん 2005年 04月 23日 16時 40分 59秒

To: いおお さん

> この「長さ0のバイナリ」値をRegWriteメソッドで書くにはどうしたらよいのでしょうか?

WshShell.RegWriteでは無理そうなので、WMIを使ってみてはいかがでしょうか。
HKEY_CURRENT_USER\testに「TestValue」という名前の、長さ0のバイナリ値を作成する例です。

Const HKEY_CURRENT_USER = &H80000001
Set objRegistry = GetObject("Winmgmts:root\default:StdRegProv")
strPath = "test"
uBinary = Array()
objRegistry.CreateKey HKEY_CURRENT_USER,strPath
objRegistry.SetBinaryValue(HKEY_CURRENT_USER,strPath,"TestValue",uBinary


To: AKA さん

> ダブルクォーテーションがないと
> C:\Program Files\a
> と書いた場合、
> "C:\Program.exe"にパラメータ"Files\a"を渡すのか、
> "C:\Program Files"フォルダの"a.exe"を実行するのか
> まるっきり区別できないことになりますね。

なるほど、言われてみれば仰るとおりです。
謎でも何でもなく、当たり前の仕様だったわけですね。
当該の記述を訂正しておきました。ありがとうございます。

> ここで質問をして、おそらく、つまらないという理由で完全無視されたAKAです。

ここはMicrosoftの公式サポートサイトではないので、すべての質問に
回答が得られるとは限りません。
その点はご了承ください。

いりや さん 2005年 04月 23日 16時 30分 58秒

AKA さんの記事を拝見しましたが、AKA さんは (こちらのコミュニティーの誰かに) 無視されたと感じられたんですね。確かに近くの掲示板の投函をレスポンスはないようですね。

AKA さん 2005年 04月 23日 05時 21分 21秒

ここで質問をして、おそらく、つまらないという理由で完全無視されたAKAです。
(2004年 12月 05日 04時 39分 36秒)

ここの主催者、誰でしたっけ、裸の王様さんですか?

その王様さんのページ、妙なことが書いてありますな〜

http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/technic.htm
--------------------------------------------------------
アプリケーションの起動

 スクリプトからアプリケーションを起動するには、次のようにWshShellオブジェクトのRunメソッドを使用します。オプションも普通に指定できます。(ただしVBSで特別な意味を持つ記号を使うときは注意しましょう)

(中略)

 ただし、いずれの場合もスペースが含まれたLFN(ロングファイルネーム)は使えません(ファイルがない、というエラーになる)。どうしてもLFNを使いたい場合は、次のようにします。RunメソッドがLFNを完全にサポートしなかった理由はいまだ謎。

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run """C:\Program Files\Internet Explorer\IEXPLORE.EXE"""
'ダブルクォーテーションでくくる。一つ目の「"」は文字列を表し、次の「""」は文字列中では「"」と置き換えられる。
'したがって、DOSプロンプトとかでLFNを実行するとき「"」でくくるのと原理は同じ。
--------------------------------------------------------

まあ、ちょっとあり得ない記述としか言えないですね〜

まず当たり前の話として、
ダブルクォーテーションがないと
C:\Program Files\a
と書いた場合、
"C:\Program.exe"にパラメータ"Files\a"を渡すのか、
"C:\Program Files"フォルダの"a.exe"を実行するのか
まるっきり区別できないことになりますね。

Windowsの一部のアプリケーションでは、互換性のない変なコマンド行解釈が存在していて、例えば、単一のファイル名のみを引数にとるようなものは、スペースが間に入る名前が""で括ってなくても、結果的には同じですから、パス名として認識しているものもあります。

しかし、これは決して良いことではなく、むしろバグの部類に入ります。

UNIXやDOSのコマンドラインでは、元々パラメータにはファイル名がくるとは限らず、スペースを含む文字列を渡すことは当然でしたから、""はずっと普通に使用されてきました。
Cで、main()に引き数を渡す内部関数(__setargv()とか)はたいていこの処理を備えており(本来は必須)、プログラマが特に意識しなくても、""で括ったものは(間にスペースがあっても)一つのargvとしてセットされます。

まあ私はここ10年殆どBIOSコードしかいじってなかったからWindows(特にOOP)はさっぱりわからない愚か者ですが、もっと優しくしてくれたらよかったのにな〜と思いましたね。

いおお さん 2005年 04月 22日 12時 55分 02秒

Windows Script HostnのRegWriteメソッドにて
REG_BINARY値を書き込もうとしています。
レジストリエディタを使用し、新規−バイナリ等で作成した場合
データは(長さ0のバイナリ)になります。
この「長さ0のバイナリ」値をRegWriteメソッドで書くにはどうしたらよいのでしょうか?
宜しくお願いします。

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

>ばんのしゃーによかばんた さん 2005年 04月 20日 16時 35分 52秒

印刷の待ち合わせ方法は、VBScriptでは、

> ie.ExecWB OLECMDID_PRINT,OLECMDEXECOPT_DONTPROMPTUSER,PRINT_DONTBOTHERUSER+PRINT_WAITFORCOMPLETION

が効きました。

昔の記事にある方法、
ie.ReadyState<>4

ie.Document.body.onafterprint
は、さっぱり、効きませんでした。なんで?

また、JScriptで、
> ie.ExecWB(OLECMDID_PRINT,OLECMDEXECOPT_DONTPROMPTUSER,PRINT_DONTBOTHERUSER+PRINT_WAITFORCOMPLETION);
は、型の問題?で使えません。
第三引数はVARIANT of type VT_I2でないと駄目なようです。

なので、JScriptでは、印刷の待ち合わせは出来ません。


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

MsgBoxでは、vbCrLfより、vbLfがよいようです。

見た目は変わりませんが、
MsgBoxを^Cして、メモ帳に貼り付け、保存すると、
vbCrLfの場合、改行が潰れました。
vbLfだと、潰れません。

WScript.exe実行のWScript.Echoも同じでした。

CScript.exe実行のWScript.Echoは、
vbCrLf、vbLfのどっちでもCR+LFで同じでした。

WScript.StdOut.Write[Line]は、
vbCrLf、vbLfそれぞれのままでした。

まとめると、
MsgBoxとWScript.Echoは、vbLf
WScript.StdOut.Write[Line]は、vbCrLf
がよいようです。


faith さん 2005年 04月 21日 03時 22分 53秒

VBSでプログレスバーを表示させることはできますか?

ばんのしゃーによかばんた さん 2005年 04月 20日 16時 36分 14秒

>G-Luck さん 2005年 02月 28日 12時 06分 36秒
>現在、Excelを二つ起動していて、二番目に起動したExcelを取得したいのですが、その方法はあるでしょうか?
>現在は、GetObject(,"Excel.Application")で取得しているのですが、最初のものしか取得できません。
>環境 WinXP,Excel2003

もし、それぞれのExcel.Applicationで開いているファイル名が分かるのであれば、
以下の要領でExcel.Applicationが取れるようです。

work1.xls、work2.xlsの二つのファイルがあるとして、
――――――――――――――――――――――――――――――――――――――
Path=Left(WScript.ScriptFullName,InStrRev(WScript.ScriptFullName,"\"))
For k=1 To 2
Set xl=CreateObject("Excel.Application")
xl.Visible=True
xl.WorkBooks.Open(Path&"work"&k&".xls")
Next

For k=1 To 2
Set Book=GetObject(Path&"work"&k&".xls")
Set xl=Book.Application
xl.Caption="GetObject"
For j=1 To xl.WorkBooks.Count
 MsgBox xl.WorkBooks.Item(j).Name
Next
xl.Caption=Empty
Next
――――――――――――――――――――――――――――――――――――――


ばんのしゃーによかばんた さん 2005年 04月 20日 16時 35分 52秒

>ばんのしゃーによかばんた さん 2005年 04月 19日 15時 01分 24秒
>IE関係はセキュリティ修正で仕様がよく変転するので、個人用途ならいざ知らず、
>業務用途には、ちょっと考え物です。

とは言うものの、個人用途に限れば、IEで出来るのであれば、やはり便利です。

しかし、
RunDLL32.EXE MSHTML.DLL,PrintHTML
は、自動でスクリプトが無効になりますが、印刷設定ダイアログが出ます。
一方、
ie.ExecWB OLECMDID_PRINT,OLECMDEXECOPT_DONTPROMPTUSER
はWSHからドライブすると、印刷設定ダイアログは出ないのですが、
セキュリティダイアログが出ます。

両方共、出ない方法があればよいのです。そこで、

HtmPrint.VBS
――――――――――――――――――――――――――――――――――――――
Option Explicit
Dim ie
Dim url

Const OLECMDID_PRINT=6
Const OLECMDEXECOPT_DONTPROMPTUSER=2
Const PRINT_DONTBOTHERUSER=1
Const PRINT_WAITFORCOMPLETION=2

Set ie=WScript.CreateObject("InternetExplorer.Application","IE_")
'ie.Visible=True
For Each url In WScript.Arguments
 ie.Navigate2 url
 Do While ie.Busy Or ie.ReadyState<>4
  WScript.Sleep 100
 Loop
 ie.ExecWB OLECMDID_PRINT,OLECMDEXECOPT_DONTPROMPTUSER,PRINT_DONTBOTHERUSER+PRINT_WAITFORCOMPLETION
Next
ie.Quit

Sub IE_DocumentComplete(pDisp, URL)
ie.Document.designMode="On"
End Sub
――――――――――――――――――――――――――――――――――――――
'ie.Visible=Trueを生かして、
ie.ExecWBとie.Quitをコメントアウトすると、HTMLエディタ?になります。


hogehoge さん 2005年 04月 19日 16時 10分 41秒

visioファイルをPDF化する一連の作業をVBSを使用して自動化できないか調査中です。
現在、手作業で、Visioファイルを開いて
印刷を選択しPDFファイルを作成し
変換ファイルと同名.pdfとし保存する。

上記、Visioファイルは、数百あり
フォルダー単位に分かれているので
フォルダー単位で変換が出来れば非常にありがたいのですが

上記のような、ファイル変換スクリプトのサンプルが有る
URLをご教示頂けるとありがたいのですが。宜しくお願いします。


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

>シロウト さん 2005年 04月 18日 12時 23分 39秒
>WshShell.Run("rundll32.exe c:\WINNT\system\MSHTML.DLL,PrintHTML
""D:\p.html"" ""Canon LASER SHOT LBP-1210""")
>と実行しているんですが、
>どうしても印刷ダイアログが出てきます。

きっとIEのセキュリティ修正、
取り敢えず、無条件にダイアログを出して、穴を塞ぐ。
を繰り返した結果なんでしょう。

普通なら、wShell.SendKeys()すればよいのでしょうが、
ウィンドウを持たない環境では使えません。

なので、

>ばんのしゃーによかばんた さん 2005年 04月 16日 15時 47分 10秒
>ペイント以外の印刷方法は、レジストリのPrintキーを調べれば分かります

に挙げなかったのです。

IE関係はセキュリティ修正で仕様がよく変転するので、個人用途ならいざ知らず、
業務用途には、ちょっと考え物です。

前にも言いましたが、IE(及びその実体のMSHTML.DLL)なんか(おっと失礼)を使わず、
例えば、ほかのブラウザを使う。

netscape.exe /print(%1)

は、ダイアログが出ないみたいです。

ほかにHTMLを喰えそうなアプリを探して使う。などのほうが、よいのでは?

Word
――――――――――――――――――――――――――――――――――――――
Const wdDoNotSaveChanges=0
Const wdOpenFormatWebPages=7
Dim Background:Background=False
Set oWord=CreateObject("Word.Application")
For Each arg In WScript.Arguments
 Set oDoc = oWord.documents.Open(arg,,,,,,,,,wdOpenFormatWebPages)
 oDoc.PrintOut(Background)
 oDoc.Close(wdDoNotSaveChanges)
Next
oWord.Quit
――――――――――――――――――――――――――――――――――――――
Excel
――――――――――――――――――――――――――――――――――――――
Dim SaveChanges
SaveChanges=False
Set xl=CreateObject("Excel.Application")
For Each arg In WScript.Arguments
 xl.DisplayAlerts = False
 Set wBook = xl.WorkBooks.Open(arg)
 xl.DisplayAlerts = True
 Set wSheet = wBook.ActiveSheet
 wSheet.PrintOut
 wBook.Close(SaveChanges)
Next
xl.Quit
――――――――――――――――――――――――――――――――――――――


シロウト さん 2005年 04月 18日 12時 23分 39秒

皆様。

私は今、WSHでHTMLページを印刷するということをやりたいと思っています。
実行コードは
-------
WshShell.Run("rundll32.exe c:\WINNT\system\MSHTML.DLL,PrintHTML
""D:\p.html"" ""Canon LASER SHOT LBP-1210""")
-------
と実行しているんですが、
どうしても印刷ダイアログが出てきます。
間違った指定方法なんでしょうか?
それとも、MSHTML.dllではプリンタ指定出来ないのでしょうか?

皆様、ご教授宜しくお願いします。

hoshikuzu さん 2005年 04月 18日 00時 06分 33秒
URL:res: と mshtmler.dll


ええと、mshtmler.dll では
Microsoft HTML Editing Component's Resource DLL
の中身を見ているのでしょうか、もしそうですと私の知恵では
問題があるとは思えませんです。でも知らないだけかもしれません。

res://IEXPLORE.exe/%2316/1
なんかですと、リモートからwebページを通じて複数の窓を使って
clipboard経由で何か出来てしまうような気もいたしますがはっき
りとわかりません。特定のバージョンであると検知されるやもし
れません。
少なくとも、何か特定のアプリをインストール済みであろうと推理する
ことは可能かも知れません。

Secuniaのリスク評価では 気にしなくて良いほどになるかと思います。


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

>>hoshikuzu さん 2005年 04月 03日 23時 40分 04秒
>>●Secunia - Advisories - Microsoft Internet Explorer "sysimage:" Local File Detection Weakness
>>http://secunia.com/advisories/13396/
>>ですのでXPwithSP2ではsysimage://は忌避されているようです。
>
>もし、セキュリティ上、
><img src="res://mshtmler.dll/unknown.gif" onload="alert('img res ok')" onerror="alert('img res ng')" >
>も問題なんでしょうか?


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

>ばんのしゃーによかばんた さん 2005年 04月 10日 15時 51分 55秒
>HTAのHTMLWindow2オブジェクトを外部(WSH)から参照できるようにする方法。

を更に発展させて、

VBSからIEを使うときの定石、
ie.vbs
――――――――――――――――――――――――――――――――――――――
Set ie=CreateObject("InternetExplorer.Application")
ie.Navigate "about:blank"
ie.Visible=True
Do While ie.Busy Or ie.ReadyState<>4
 WScript.Sleep 100
Loop
ie.document.parentWindow.opener.document.title="change!"
WScript.Echo ie.Document.parentWindow.location
――――――――――――――――――――――――――――――――――――――
に相当する、
VBSからHTAを使うときの新、定石です。
hta.vbs
――――――――――――――――――――――――――――――――――――――
Name=Replace(WScript.ScriptName,".","_")
Set wShell=CreateObject("WScript.Shell")
wShell.Run "MSHTA.EXE ""javascript:void(open(""about:blank"","""&Name&""",""width=100,height=100""));"""
Do While Not wShell.AppActivate("about:blank")
 WScript.Sleep 100
Loop
Set Shell=CreateObject("Shell.Application")
Do While IsEmpty(ie)
 For Each ie In Shell.Windows
  If TypeName(ie.document)="HTMLDocument" Then
   If ie.document.parentWindow.name=Name Then
    If TypeName(ie.document.parentWindow.opener)="HTMLWindow2" Then
     ie.document.parentWindow.opener.document.title="change!"
     Exit For
    End If
   End If
  End If
 Next
 WScript.Sleep 100
Loop
Set hta=ie.document.parentWindow.opener
ie.Quit
WScript.Echo hta.location
――――――――――――――――――――――――――――――――――――――
このあと、セキュリティレベルを気にすることなく、オブジェクトなどを組み込めます。


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

JP189105 - ユーザーによる操作なしで Windows にプリンタを追加する方法

このrundll32 printui.dll,PrintUIEntryは、なかなか使えそうです。
バッチファイルかショートカットを作っておくとよいのでは。

以下、プリンタ名"Generic / Text Only"のサンプルです。

HelpPrintUI.CMD          PrintUI.DLLのヘルプ
rundll32 printui.dll,PrintUIEntry /?
rundll32 printui.dll,PrintUIEntry /Xs /n "Generic / Text Only" ?

TextOnlyInstall.CMD     "プリンタの追加"
rundll32 printui.dll,PrintUIEntry /if /f "%windir%\inf\ntprint.inf" /r "file:" /m "Generic / Text Only"

DefaultPrinter.CMD     "通常使うプリンタに設定(&F)"
rundll32 printui.dll,PrintUIEntry /y /n "Generic / Text Only"

PrinterProp.CMD          "プロパティ(&R)"
START rundll32 printui.dll,PrintUIEntry /p /n "Generic / Text Only"

PrintQueue.CMD          "開く(&O)"
START rundll32 printui.dll,PrintUIEntry /o /n "Generic / Text Only"

PausePrint.CMD          "一時停止(&A)"
rundll32 printui.dll,PrintUIEntry /Xs /n "Generic / Text Only" status pause

PrinterSetting.CMD     "プロパティ(&R)"の中の「印刷設定」
START rundll32 printui.dll,PrintUIEntry /e /n "Generic / Text Only"

PurgePrint.CMD          "印刷ドキュメントを削除(&G)"
rundll32 printui.dll,PrintUIEntry /Xs /n "Generic / Text Only" status purge

ResumePrint.CMD          "印刷の再開(&G)"
rundll32 printui.dll,PrintUIEntry /Xs /n "Generic / Text Only" status resume


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

>ばんのしゃーによかばんた さん 2004年 05月 16日 21時 42分 12秒
>MSHTML.DLLを見ていたら、Generic / Text Onlyという文字列がありました。

日本語の設定を忘れていました。
プリンタのプロパティで、
フォントの選択
コードページ

Japanese (932)
を選択します。

>IEなどで印刷すれば、レイアウトを保ったテキストが得られます。
>ただ、改行がLFのみなので、そのままNotePadで開くと改行が潰れます。

ここで、以下が役に立ちます。

>ばんのしゃーによかばんた さん 2005年 01月 14日 17時 45分 41秒
>explorer.exe /e,hoge.txt
>explorer.exe hoge.txt
>は、テキストファイルをNotePadでなく、
>それぞれexplorerとieで表示してくれるんですよね。
>表示専用に向いています。

そこで、ファイルをIEで開きます。
IEから「名前を付けて保存」し直すと改行が直ります。

テキストファイルの関連付けにIEを追加しておくとよいでしょう。
HKEY_CLASSES_ROOT\txtfile\shell\View\command\
"C:\Program Files\Internet Explorer\iexplore.exe" "%1"

また、テキストファイルの印刷は通常「メモ帳」を使って行いますが、
「メモ帳」の印刷結果はどうも、好きになれません。
上記のIEから印刷したほうがまだましです。

また、「メモ帳」では、Unicode、UTF-8の変換ができますが、IEでは、
さらに、JIS、EUCの変換が可能です。


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

こういう書き方が出来るんですね。
MSDNライブラリを検索しましたが、検索では「.」「:」が無視されるので、:-<
サンプルコード内に見掛けたものの、構文の説明が見つかりませんでした。:-<

<html>
<head>
<script>
function window::onload(){
alert(2);
}
function window.onunload(){
alert(4);
}
</script>
</head>
<body onload="vbscript:msgbox(1)" onbeforeunload="javascript:alert(3)" >
</body>
</html>


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

>hoshikuzu さん 2005年 04月 03日 23時 40分 04秒
>●Secunia - Advisories - Microsoft Internet Explorer "sysimage:" Local File Detection Weakness
>http://secunia.com/advisories/13396/
>ですのでXPwithSP2ではsysimage://は忌避されているようです。

もし、セキュリティ上、

<img src="sysimage://notepad.exe/small" onload="alert('img sysimage ok')" onerror="alert('img sysimage ng')" >

が問題なら、

<img src="res://mshtmler.dll/unknown.gif" onload="alert('img res ok')" onerror="alert('img res ng')" >

も問題なんでしょうか?


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

AKiOSさんのオリジナル版WSHLAB.HTAと
それをカストマイズした、ばんのしゃーによかばんた版WSHLAB2.HTAとの差分です。
オリジナル版はHTMLの表現様式への依存性が強く、
オリジナルのHTMファイルでないと動かなかったので、それを弱めてます。

ファイル C:WSHLAB.HTA と C:WSHLAB2.HTA を比較しています
***** C:WSHLAB.HTA
 578:     if (path.match(re_oldkiji) != null) {
 579:         n = parseInt(RegExp.$1);
 580:     } else if (path.match(re_newkiji) != null) {
***** C:WSHLAB2.HTA
 578:     if (path.match(re_oldkiji) != null) {
 579:         n = parseInt(RegExp.$1,10);
 580:     } else if (path.match(re_newkiji) != null) {
*****

***** C:WSHLAB.HTA
 832:     }
 833:     if (hitlist.length != 50 && !kijifiles[x].is_newkiji) {
 834:         warning(kijifiles[x].path, kijifiles[x].num);
 835:     }
 836:     return true;
***** C:WSHLAB2.HTA
 832:     }
 833: //   if (hitlist.length != 50 && !kijifiles[x].is_newkiji) {
 834: //       warning(kijifiles[x].path, kijifiles[x].num);
 835: //   }
 836:     return true;
*****

***** C:WSHLAB.HTA
 837: }
 838: function warning(fname, num) { // 警告メッセージの表示
 839:     var n = hitlist.length - 1;
 840:     var test = (hitlist[n].kiji.search(/\x00/) != -1);
 841:     var s = '<font color="blue">過去記事リスト['+num+"] &lt;"+fname+"&gt;";
 842:     if (test) {
 843:         if (hitlist.num == 2 && hitlist.length == 19) {
 844:             s += " の 741 行目";
 845:         } else {
 846:             s += " の "+(50-n)+" 番目の記事";
 847:         }
 848:         s += "にある文字コード 0 を取り除いてください。";
 849:     } else {
 850:         s += " は正常に読み込めないか、壊れている可能性があります。";
 851:     }
 852:     s += '</font>';
 853:     set_status(s, true);
 854: }
 855: function disp_result() { // 検索結果の表示
***** C:WSHLAB2.HTA
 837: }
 838: //function warning(fname, num) { // 警告メッセージの表示
 839: //   var n = hitlist.length - 1;
 840: //   var test = (hitlist[n].kiji.search(/\x00/) != -1);
 841: //   var s = '<font color="blue">過去記事リスト['+num+"] &lt;"+fname+"&gt;";
 842: //   if (test) {
 843: //       if (hitlist.num == 2 && hitlist.length == 19) {
 844: //           s += " の 741 行目";
 845: //       } else {
 846: //           s += " の "+(50-n)+" 番目の記事";
 847: //       }
 848: //       s += "にある文字コード 0 を取り除いてください。";
 849: //   } else {
 850: //       s += " は正常に読み込めないか、壊れている可能性があります。";
 851: //   }
 852: //   s += '</font>';
 853: //   set_status(s, true);
 854: //}
 855: function disp_result() { // 検索結果の表示
*****

***** C:WSHLAB.HTA
 912:         if (x != -1) {
 913:             kiji = kiji.substr(x); // 本文を取り出す
 914:         }
***** C:WSHLAB2.HTA
 912:         if (x != -1) {
 913: //           kiji = kiji.substr(x); // 本文を取り出す
 914:         }
*****

***** C:WSHLAB.HTA
 952:     fin.Close();
 953:     var a = new Array();
 954:     var begin;
 955:     var end = 0;
 956:     while (true) {
 957:         begin = s.indexOf("<STRONG>", end);
 958:         if (begin == -1) break;
 959:         end = s.indexOf("<HR>", begin);
 960:         a[a.length++] = s.substring(begin, end);
 961:     }
 962:     return a;
 963: }
***** C:WSHLAB2.HTA
 952:     fin.Close();
 953: //s=s.replace(/(<b><)(.*?)(<\/b>)/g,"<STRONG><$2</STRONG>");
 954: s=s.replace(/(<.+?>)/g,function(v,p,r){return v.toUpperCase();});
 955: //alert(s);
 956: //   var a = new Array();
 957: //   var begin;
 958: //   var end = 0;
 959: //   while (true) {
 960: //       begin = s.indexOf("<STRONG>", end);
 961: //       if (begin == -1) break;
 962: //       end = s.indexOf("<HR>", begin);
 963: //       a[a.length++] = s.substring(begin, end);
 964: //   }
 965: //   return a;
 966: //   return s.match(/<STRONG>[^\x00]*?<HR>/img);
 967:     return s.match(/<!-- \d+ -->[^\x00]*?<HR>/img);
 968: }
*****

***** C:WSHLAB.HTA
 964: function get_title(s, i) { // 記事よりタイトル(投稿者+日時)を取り出す
 965:     var name = '<a id="a" onclick="top.a_click('+i+')"'+
 966:               ' onmouseover="top.a_over(this)"'+
 967:               ' onmouseout="top.a_out(this)">$1 さん</a>';
 968:     return s.substring(0, s.indexOf("<BR>"))
 969:             .replace(/\(<A.*A>\)/, "")
 970:             .replace(/<STRONG><FONT SIZE="4">(.*)<\/FONT><\/STRONG>.*/, '<td nowrap>'+name+'<td>')
 971:             .replace(/<I> (\d+)年 (\d+)月 (\d+)日 (\d+)時 (\d+)分 (\d+)秒 <\/I>/, '<td nowrap>$1/$2/$3 $4:$5</td>')
 972: 
 973: }
***** C:WSHLAB2.HTA
 969: function get_title(s, i) { // 記事よりタイトル(投稿者+日時)を取り出す
 970: //   var name = '<a id="a" onclick="top.a_click('+i+')"'+
 971: //             ' onmouseover="top.a_over(this)"'+
 972: //             ' onmouseout="top.a_out(this)">$1 さん</a>';
 973: //   return s.substring(0, s.indexOf("<\/I>")+4)
 974: //           .replace(/[\r\n]/g, "")
 975: //           .replace(/\(<A.*A>\)/, "")
 976: //           .replace(/<STRONG><FONT SIZE=[^>]*>(.*)<\/FONT><\/STRONG>[^<]*/, '<td nowrap>'+name+'<td>')
 977: //           .replace(/[^>]*<I>\s?(\d+)年\s?(\d+)月\s?(\d+)日\s?(\d+)時\s?(\d+)分\s?(\d+)秒\s?<\/I>/, '<td nowrap>$1
 978: $2/$3 $4:$5</td>');
 979: s=s.replace(/[\r\n]/g, "");
 980: var m=s.match(/<FONT SIZE=[^>]*>(.*)<\/FONT>/i);
 981: var name;
 982: if (m) name=m[1];
 983: var r='<td nowrap>'+ '<a id="a" onclick="top.a_click('+i+')"'+
 984:     ' onmouseover="top.a_over(this)"'+
 985:     ' onmouseout="top.a_out(this)">' +name+ 'さん</a>' +
 986:     '<td>';
 987: m=s.match(/<I>\s?(\d+)年\s?(\d+)月\s?(\d+)日\s?(\d+)時\s?(\d+)分\s?(\d+)秒\s?<\/I>/i);
 988: if (m) r+='<td nowrap>'+m[1]+'/'+m[2]+'/'+m[3]+' '+m[4]+':'+m[5]+'</td>';
 989: return r;
 990: }
*****

***** C:WSHLAB.HTA
1058:     right.document.writeln('strong#handle { color:', linkcolor, '; cursor:hand; }');
1059:     right.document.writeln('.quote { color:', quotecolor, '; }');
***** C:WSHLAB2.HTA
1075:     right.document.writeln('strong#handle { color:', linkcolor, '; cursor:hand; }');
1076:     right.document.writeln('b#handle { color:', linkcolor, '; cursor:hand; }');
1077:     right.document.writeln('.quote { color:', quotecolor, '; }');
*****

***** C:WSHLAB.HTA
1095:                         '" onmouseout="a_out(this)">';
1096:                 } else if (s == "<STRONG>") {
1097:                     s = '<strong id="handle" onclick="prnt.response()" onmouseover="a_over(this,\'レス書き\
1098: )" onmouseout="a_out(this)">';
1099:                 } else if (s == "<BLOCKQUOTE>") {
***** C:WSHLAB2.HTA
1113:                         '" onmouseout="a_out(this)">';
1114:                 } else if (s.match(/^<(STRONG|B)>$/i)) {
1115:                     s = '<'+RegExp.$1+' id="handle" onclick="prnt.response()" onmouseover="a_over(this,\'レ
1116: X書き\')" onmouseout="a_out(this)">';
1117:                 } else if (s == "<BLOCKQUOTE>") {
*****

***** C:WSHLAB.HTA
1157:         if (/http:\/\/\w+/.test(s)) {
1158:             s = s.replace(/(http:\/\/\w+[\w\/\-+.,?#%&@~=;:]+)/g, '<a href="$1">$1</a>');
1159:         } else if (/\b\d?\d-\d\d\b/.test(s)) {
***** C:WSHLAB2.HTA
1175:         if (/http:\/\/\w+/.test(s)) {
1176: //           s = s.replace(/(http:\/\/\w+[\w\/\-+.,?#%&@~=;:]+)/g, '<a href="$1">$1</a>');
1177:         } else if (/\b\d?\d-\d\d\b/.test(s)) {
*****

***** C:WSHLAB.HTA
1447:     s = s.replace(/[\r\n]/g, "")
1448:        .replace(/<!-- <BR> -->/g, "\n")
1449:        .replace(/<BR>/g, "\n")
1450:        .replace(/<\/?[^<>]*>/g, "")
***** C:WSHLAB2.HTA
1465:     s = s.replace(/[\r\n]/g, "")
1466:        .replace(/<!-- <BR> -->/g, "\r\n")
1467:        .replace(/<BR>/g, "\r\n")
1468:        .replace(/<\/?[^<>]*>/g, "")
*****


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

>ばんのしゃーによかばんた さん 2005年 04月 12日 15時 19分 56秒
>表示中のHTMLソースから、スクリプト類を除去するJScriptです。
>「お気に入り」や「リンク」から実行します。
>scremove.js

昇順ループ内削除の禁忌を忘れて嵌りました。

DeScript.JS
――――――――――――――――――――――――――――――――――――――
var Shell=new ActiveXObject("Shell.Application");
var ie=Shell.Windows().Item();
if(!ie){WScript.Echo("IE Not Found");WScript.Quit();}
if(!ie.Document.parentWindow){
for(var k=0;k<Shell.Windows().Count;k++){
 ie=Shell.Windows().Item(k);
 if(ie.Document.parentWindow) break;
 ie=null;
}
}
if(!ie){WScript.Echo("IE Not Found");WScript.Quit();}
var window=ie.Document.parentWindow;
var ns=0;
for(var k=window.document.scripts.length;k>0;k--){
 window.document.scripts(k-1).outerHTML='';
 ns++;
}
var no=0;
for(var k=window.document.all.tags('object').length;k>0;k--){
 window.document.all.tags('object').item(k-1).outerHTML='';
 no++;
}
var ne=0;
for(var k=0;k<window.document.all.length;k++){
 for(var prop in window.document.all(k)){
  if(prop.substr(0,2)=='on'){
   if(window.document.all(k)[prop]){
    window.document.all(k).setAttribute(prop,null);
    ne++;
   }
  }
 }
}
var outerHTML=window.document.documentElement.outerHTML;
window.document.open();
window.document.write(outerHTML);
window.document.close();
WScript.Echo(ns+" Scripts and "+ne+" Events and "+no+" Objects Removed.");
――――――――――――――――――――――――――――――――――――――

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

>シロウト さん 2005年 04月 14日 11時 07分 34秒
>>ウィンドウが持てない環境ではExecWBのPrintがなぜか効かないようです。
>>しかも、エラーも上がらない。
>>たぶんセキュリティ修正を繰り回した結果のIEの「障害」だと思います。

タスクスケジューラなどの、そういう環境では、ExplorerやIEを動かしては
いけないのかも。
Explorerは、自分ひとりだとデスクトップシェル(プログラムマネジャ)に
なろうとするみたいです。

>ペイントで印刷すると、めちゃいっぱい用紙を食うのですよ...。
>印刷結果を見てビックリするような細切れ状態です。
>他にも何か良い方法はございませんでしょうか?

もし、それが縮小拡大の問題なら、サイズを縮小してから印刷すればよいのでは?

――――――――――――――――――――――――――――――――――――――
ペイント以外の印刷方法は、レジストリのPrintキーを調べれば分かります。

Office製品があれば、
"C:\Program Files\Common Files\Microsoft Shared\PhotoEd\PHOTOED.EXE" /p ファイル

98/MEなら、
KODAKPRV.EXE /p ファイル

2000/XPなら、「Windows画像とFAXビューア」があります。
ただし、これのPrintキーを使うと、印刷ダイアログが出るので、代わりに
PrintToキーを使います。それには以下のようなバッチファイルを作ります。
rundll32.exe shimgvw.dll,ImageView_PrintTo /pt %1 "Canon LASER SHOT LBP-1110"
ここで、%2はプリンタ名。

因みに、「Windows画像とFAXビューア」で表示するには、
rundll32.exe shimgvw.dll,ImageView_Fullscreen %~1
というバッチファイルを使います。
ファイル名を引用符で囲むと駄目なので、ショートカット(.LNK)は駄目です。


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

>ばんのしゃーによかばんた さん 2005年 04月 11日 15時 17分 46秒
>パイプで思い出しましたが、An HTTPDの件。
>でも、やはり、この実装は筋が悪かったんだと思いますよ。
>本家の実装であれば、こういうトラブルも起きず、筋が良かったと思いますね。

で、筋の良い修正方法ですが、
linuxで、バイナリフォーマットテーブル(?)とかいう、拡張をしているようです。
こちらは、#!だけでなく、'!でも、なんでも関連付けが出来るようです。
An HTTPDもこれを真似ればよいと思います。


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

>ばんのしゃーによかばんた さん 2005年 04月 13日 15時 52分 24秒
>スクリプトエンコーダのサンプルです。
>Source=sce.EncodeScriptFile(Ext, Source, 0, "VBScript")

第三引数の詳細が分かりません。:-<

SCRENC.EXEのオプションと対応していると思うのですが。。。


失楽園 さん 2005年 04月 16日 07時 08分 02秒

完全無料の出会い系サイト
http://maar.s6.x-beat.com/cyberad/siturakuen.php

シーズー大好き さん 2005年 04月 15日 16時 26分 04秒

すみません、下記の投稿の内容ですが解決しました。

ドライブ割当を諦め、UNCでアクセスさせるとうまくいきました。
マウント関連はもっと勉強しないといけません^^;

ありがとうございました。

シーズー大好き さん 2005年 04月 15日 11時 49分 34秒

お世話になります。現在どうしても解せない部分でつまづいております…。

ローカルマシンからリモートマシンの監視を行い、リモート側テキストに落とした監視結果のファイルをローカルマシンにコピーし、ローカル側でそれを開いてダイアログ表示させたいのですが、うまくいきません。

local.vbs
-------------------------------------------------------------
strComputer = "TFS-3002" 'リモートホスト
strScript = "remote.vbs"

set objController = WScript.CreateObject("WshController")
set objRemote = objController.CreateScript(strScript, strComputer)
WScript.Echo "リモートでスクリプトを実行します。"
objRemote.Execute
Do Until objRemote.Status = 2
WScript.Sleep 1000
Loop
WScript.Echo "リモートでの実行は終了しました。"
wscript.sleep 7000

'結果確認
Set objFS = CreateObject("Scripting.FileSystemObject")
Set ts = objFS.OpenTextFile("D:\VBS\kekka.txt", 1, True)

Do While ts.AtEndOfStream = False 'ファイルの終端になってない間ループ
  strDATA = ts.ReadLine     'ファイルからデータを一行を読む
  Msgbox "strDATA '読み込んだデータを表示
Loop
Msgbox "以上です"
ts.close
--------------------------------------------------------------------

remote.vbs
--------------------------------------------------------------------
'ウィンドウ個数チェック
nProc = 0
sName = "javaw.exe"
For Each Process In GetObject("winmgmts:").InstancesOf ("win32_process")
   If LCase(Process.name) = sName then
     nProc = nProc + 1
   End If
Next

uName = Now & "に確認したTAMアプリケーションのJAVAウィンドウ数は " & nProc & " です"

'結果記入
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("kekka.txt", 2, True)
objFile.WriteLine uName
objFile.Close

'時刻調整
Dim WSHShell
Set WSHShell = CreateObject("Wscript.Shell")
WshShell.Run "cmd.exe /k net time \\192.168.1.33 /set /yes"

'結果記入
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("kekka.txt", 8, True)
objFile.WriteLine "システムクロックを調整しました"
objFile.Close
wscript.sleep 1000

'マウント
Set objNetwork = WScript.CreateObject("WScript.Network")
objNetwork.MapNetworkDrive "Z:", "\\192.168.1.33\vbs"
wscript.sleep 10000

'kekkaコピー
Dim hell
Set hell = CreateObject("Wscript.Shell")
hell.Run "cmd.exe /k copy C:\winnt\system32\kekka.txt Z:\ /y"
wscript.sleep 1000

'アンマウント
Set objNetwork2 = WScript.CreateObject("WScript.Network")
objNetwork2.RemoveNetworkDrive "Z:"
wscript.sleep 100
--------------------------------------------------------------------
リモートマシンで実行することは、プロセス数のカウントと時刻修正です。
上記のスクリプトを流すと、結果ファイル(kekka.txt)のコピーまでは
実行できるのですが、ファイルの中身はブランクなのです("以上です"のダイアログ出現まで実行されます)。

このremote.vbsをリモートホスト上で実行すると問題なく動きます。

また共有フォルダ(\\192.168.1.33\vbs)のマウント/アンマウント部分だけを抜き出し、リモートマシンでremote.vbsを実行すると正常にドライブが割り当てられるのですが、これをローカルマシンで実行(local.vbsを実行)すると反映されないのです。リモートホストのリモート操作させるレジストリ値は有効になっていますし、ローカル/リモートともにadmin権限のある同一ユーザーでログインしているのですが、ローカル側でキックしたスクリプトが正常に動かないようです。結果ファイルには実行結果が反映されるのですが。

長々と申し訳ありません。
何か足りない制御、怪しい箇所はありますでしょうか?

シロウト さん 2005年 04月 14日 11時 07分 34秒

》ばんのしゃーによかばんた さん 2005年 04月 13日 23時 56分 18秒

>>シロウト さん 2005年 04月 13日 11時 31分 55秒
>>ATコマンド指定の実行や、ASP組み込みでブラウザから実行すると
>>なぜか動きません。

>ウィンドウが持てない環境ではExecWBのPrintがなぜか効かないようです。
>しかも、エラーも上がらない。
>たぶんセキュリティ修正を繰り回した結果のIEの「障害」だと思います。

うむむむ...そうですか。
わざわざありがとうございます。

>IEなんか(おっと失礼:-p)を使わず、
>MSPaint.EXE /P ファイル
>で印刷すればよいのでは?

ペイントで印刷すると、めちゃいっぱい用紙を食うのですよ...。
印刷結果を見てビックリするような細切れ状態です。
できればIEで印刷するように、一枚とかにまとめて欲しいんですよねぇ。
さすがにそれは無理な要望なんでしょうかねぇ↓

他にも何か良い方法はございませんでしょうか?
MSWord,MSExcelなどのマクロを駆使してやるとかになっちゃうんでしょうか?


ばんのしゃーによかばんた さん 2005年 04月 13日 23時 56分 48秒

スクリプトエンコーダは文字化けしますね。
タブやDEL(7F)などの制御文字を使うなんて、ちょっと設計扇子が無さ過ぎ。:-<
空白展開された2箇所をタブに戻せば、動きます。
;DMn
iAG;
の後。


ばんのしゃーによかばんた さん 2005年 04月 13日 23時 56分 18秒

>シロウト さん 2005年 04月 13日 11時 31分 55秒
>ATコマンド指定の実行や、ASP組み込みでブラウザから実行すると
>なぜか動きません。

ウィンドウが持てない環境ではExecWBのPrintがなぜか効かないようです。
しかも、エラーも上がらない。
たぶんセキュリティ修正を繰り回した結果のIEの「障害」だと思います。

IEなんか(おっと失礼:-p)を使わず、
MSPaint.EXE /P ファイル
で印刷すればよいのでは?


シロウト さん 2005年 04月 13日 22時 11分 21秒

》魔界の仮面弁士 さん 2005年 04月 13日 15時 00分 31秒
> 1. [ディレクトリ セキュリティ]タブ
> 2. [匿名アクセスおよび認証コントロール]の[編集]
> 3. [匿名アクセス]の項目
>
> ですね。
>
> ATコマンドの方は、サービスの"Task Scheduler"(Schedule)です。

さっそくやってみたんですが、印刷されませんでした。

ここでふと思った事があります。
実は権限がないのは、IEの実行権限なんではと。

といいますのも、コマンドプロンプトから実行すると
 IEが立ち上がる→コンテンツが全て表示される→勝手に印刷が始まる→終わり(IE上がりっぱ)
このような順序で処理されています。
ゆえに、下記@Aのどちらかが原因ではないかと思います。
 @IEの実行権限がない
 Aプリンタの印刷実行権限がない

更に、通常使うプリンタの権限に
 SYSTEM、IUSER_name、EVERYONEフルコントロール
を追加して実行しても結果が変わらなかったので
@が原因だと思いました。

長々となりましたがここで質問です。
自分で言っていて分かっていないんですけれども
"@IEの実行権限がない"というような事って実際にあるんでしょうか?



魔界の仮面弁士 さん 2005年 04月 13日 18時 19分 43秒

あれ。化けてますね。何故でしょう。

EUC-JPで開いた場合には
<STRONG><FONT SIZE="4">ばんのしゃーによかばんた</FONT></STRONG> さん 
となるようですが。

ばんのしゃーによかばんた さん 2005年 04月 13日 17時 20分 48秒

そう言えば、こういうの

>say さん 2004年 11月 14日 23時 09分 48秒
>この話題をよく理解できていませんが VectorにVBSソースにヘッダを
>つけることで拡張子を.COMに変換してインタプリタを見かけ上実行せずに
>直接実行するというのがあります。.COMなので多分ファイルサイズに
>制限があると思いますがコンパイルとか考えるならこの方法が良いかも

もありましたね。

これと、先のスクリプトエンコーダを組み合わせると、

ARGS.VBS
――――――――――――――――――――――――――――――――――――――
Set wShell=CreateObject("WScript.Shell")
rows=Array(wShell.CurrentDirectory&vbCrLf)
For Each arg In WScript.Arguments
 ReDim Preserve rows(UBound(rows)+1)
 rows(UBound(rows))="'"&arg&"'"
Next
WScript.Echo Join(rows,vbCrLf)
――――――――――――――――――――――――――――――――――――――
をエンコードして、VBS2COMヘッダを先頭に付けて、名前を、
ARGS.EXE or ARGS.COM にしてます。
――――――――――――――――――――――――――――――――――――――
'?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=
'! CScript.EXE //E:VBScript.Encode //NoLogo
#@~^9gAAAA==jY~S?4+V^';.+mYnr(Ln^D`JqjmMkwD jtV^Jb@#@&.Khd'z.DmXcAUt+sscZ;DMn     Y9bDmYKDH'\(Z.S6#@#@&wWD,3l1tPm.LP&x,jm.raY bMLEs+UOk@#@&~~"+9ks~hDnk+M\+,DKA/vj$W!x[cMWhkb_8#@#@&~~DKhk`iAG;     NcDKA/*#xEEJ[C.T[EBr@#@&1nXY@#@&UmMrwDR3m4W~BKkxv.WS/~78/Dd0*@#@&oUwAAA==^#~@
――――――――――――――――――――――――――――――――――――――
16ビットアプリなので、Windowsからはコンソールが開きます。:-p
コンソールから実行するか、
Windowsからなら、CScriptをWScriptに変えて、あと最小化で実行するとか、
してください。
JScriptが好きな人には、JS2COMもあります。


シーズー大好き さん 2005年 04月 13日 16時 59分 49秒

再び投稿させていただきます。

DOSプロンプトからSQL Serverに繋ぎ、osqlでDBの空き容量を取得するクエリーを探したところ、良い方法が思いつかずにネットで検索しました。
すると、あるサイトからVBSで直接取得できる方法を発見し、以下のようにして試したのですが、実行時に"ActiveXコンポーネントはオブジェクトを生成できません"と言われ、うまくいきません。
----------------------------------------------------------
Dim objServer
Dim objDatabase
Dim strFree

Set objServer = CreateObject("SQLOLE.SQLServer")
objServer.Connect "(localhost)", "sa", ""
For Each objDatabase In objServer.Databases
strFree = strFree & objDatabase.Name & " " & objDatabase.SpaceAvailable & "バイト" & vbCrLf
Next
objServer.Disconnect
Set objServer = Nothing

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("kekka.txt", 8, True)
objFile.WriteLine strFree
objFile.Close
-----------------------------------------------------------

どうやら5行目のSet objServer = CreateObject("SQLOLE.SQLServer") で
ひっかかるようなのですが、他に例や情報が見つからず悩んでいます。
※このホストではSQL Server2000が動いています。

当初はconnectからdbのselectまで一連のクエリを記述したsqlをbatファイルに読ませようかと考えたのですが、Enterpriseの仕組みが判らずsizeの取得方法に断念しました。

連投で申し訳ありませんがご回答いただきたく思います。

シーズー大好き さん 2005年 04月 13日 16時 36分 35秒

むたぐち様
早速のご教示ありがとうございます。お蔭様で実装することができました。
成程、プロセスをインスタンス数として扱うみたいですね。

以下のようにして、ファイルに落としました。
nProc = 0
sName = "svchost.exe"
For Each Process In GetObject("winmgmts:").InstancesOf ("win32_process")
   If LCase(Process.name) = sName then
     nProc = nProc + 1
   End If
Next

uName = Now & "に確認したTAMアプリケーションのJAVAウィンドウ数は " & nProc & " です"

'結果記入
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("kekka.txt", 2, True)
objFile.WriteLine uName
objFile.Close

誠にありがとうございました。

シロウト さん 2005年 04月 13日 16時 30分 46秒

》魔界の仮面弁士 さん 2005年 04月 13日 15時 00分 31秒
> 1. [ディレクトリ セキュリティ]タブ
> 2. [匿名アクセスおよび認証コントロール]の[編集]
> 3. [匿名アクセス]の項目
>
> ですね。
>
> ATコマンドの方は、サービスの"Task Scheduler"(Schedule)です。

さっそくやってみたんですが、印刷されませんでした。

ここでふと思った事があります。
実は権限がないのは、IEの実行権限なんではと。

といいますのも、コマンドプロンプトから実行すると
 IEが立ち上がる→コンテンツが全て表示される→勝手に印刷が始まる→終わり(IE上がりっぱ)
このような順序で処理されています。
ゆえに、下記@Aのどちらかが原因ではないかと思います。
 @IEの実行権限がない
 Aプリンタの印刷実行権限がない

更に、通常使うプリンタの権限に
 SYSTEM、IUSER_name、EVERYONEフルコントロール
を追加して実行しても結果が変わらなかったので
@が原因だと思いました。

長々となりましたがここで質問です。
自分で言っていて分かっていないんですけれども
"@IEの実行権限がない"というような事って実際にあるんでしょうか?


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

スクリプトエンコーダのサンプルです。
過去に"SCRENC.EXE"を使った例がありましたが、
"Scripting.Encoder"を使ったものがなかったので。

.VBSファイルをドロップします。

VBS2VBE.VBS
――――――――――――――――――――――――――――――――――――――
Set sce=CreateObject("Scripting.Encoder")
Set fso=CreateObject("Scripting.FileSystemObject")
FileName=WScript.Arguments(0)
Ext=Mid(FileName,InStrRev(FileName,"."))
Source=fso.OpenTextFile(FileName).ReadAll()
Source=sce.EncodeScriptFile(Ext, Source, 0, "VBScript")
FileName=Left(FileName,InStrRev(FileName,"."))&"VBE"
fso.CreateTextFile(FileName).Write Source
WScript.Quit
――――――――――――――――――――――――――――――――――――――

>つちや さん 2005年 04月 11日 14時 56分 46秒
>その実行ファイルは、実行の際にスクリプトを復号してファイルに書き出して実行します。スクリプトは実行後に削除します(よって、もとのスクリプトが同じフォルダにあったりすると上書きして削除しますので要注意)。

"Scripting.Encoder"でエンコードし、fso.TempName()の名前で作成し、
WScript.EXE //E:VBScript.Encode で実行すれば、よいのでは。

ところで、私はエンコードよりデコードのほうが気になるのですが、
スクリプトデコードするVBScriptはありません?
過去にCの例はありましたが、CをVBScriptにするのはちょっと面倒です。


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

>ばんのしゃーによかばんた さん 2005年 04月 12日 15時 18分 56秒
>かと思って、覘いてみると、.NETの実行ファイルにはソースがまんま入っているではありませんか。

と思ったのは、vbs2js.vbsがJScript.NETソースに埋め込んだVBScriptソースの文字列
でした。:-p

>ばんのしゃーによかばんた さん 2005年 04月 12日 16時 39分 04秒
>よく見ると、まんまなのは文字列だけですね。コードは見えません。
>なので、文字列だけ暗号化すればよいわけですが、それは面倒です。

"Scripting.Encoder"でエンコードして、Escapeして、埋め込み、
実行時はunescapeして、SC.Language='VBScript.Encode'で
スクリプトコントロールに投げます。

――――――――――――――――――――――――――――――――――――――
' vbs2jse.VBS converts VBScript to JScript.NET with VBE.
' Usage: vbs2jse vbsfile

Option Explicit
Dim fso
Dim fo
Dim iFile
Dim oFile
Dim oPath
Dim header
header="import System" & vbCRLF & _
"import System.Collections;" & vbCRLF & _
"var fso=new ActiveXObject('Scripting.FileSystemObject');" & vbCRLF & _
"var WScript=new Object();" & vbCRLF & _
"WScript.StdIn=fso.GetStandardStream(0);" & vbCRLF & _
"WScript.StdOut=fso.GetStandardStream(1);" & vbCRLF & _
"WScript.StdErr=fso.GetStandardStream(2);" & vbCRLF & _
"WScript.Echo=function(p){var pArray=new Array();" & vbCRLF & _
"for(var k=0;k<WScript.Echo.arguments.length;k++){pArray.push(WScript.Echo.arguments[k]);}" & vbCRLF & _
"WScript.StdOut.WriteLine(pArray.join(' '));}" & vbCRLF & _
"WScript.Arguments=function(n){return(Environment.GetCommandLineArgs()[n+1]);}" & vbCRLF & _
"var arguments:String[]=Environment.GetCommandLineArgs();" & vbCRLF & _
"var args:ArrayList=new ArrayList();" & vbCRLF & _
"for(var k=1;k<arguments.length;k++){args.Add(arguments[k]);}" & vbCRLF & _
"WScript.Arguments=args;" & vbCRLF & _
"WScript.Quit=function(n){Environment.Exit(n);}" & vbCRLF & _
"WScript.Sleep=function(msec:int){System.Threading.Thread.Sleep(msec);}" & vbCRLF & _
"var ext=fso.GetExtensionName(arguments[0]);" & vbCRLF & _
"if(ext=='') ext='EXE';" & vbCRLF & _
"WScript.ScriptName=fso.GetBaseName(arguments[0])+'.'+ext;" & vbCRLF & _
"WScript.ScriptFullName=fso.BuildPath(fso.GetParentFolderName(fso.GetAbsolutePathName(arguments[0])),WScript.ScriptName);" & vbCRLF & _
"WScript.FullName=WScript.ScriptFullName;" & vbCRLF & _
"WScript.Name=WScript.ScriptName;" & vbCRLF & _
"var SC=new ActiveXObject('ScriptControl');" & vbCRLF & _
"SC.Language='VBScript.Encode';" & vbCRLF & _
"SC.AllowUI=true;" & vbCRLF & _
"SC.TimeOut=-1;" & vbCRLF & _
"SC.AddObject('WScript',WScript,true);" & vbCRLF & _
"try{" & vbCRLF & _
"SC.ExecuteStatement(unescape("
Dim trailer
trailer="));" & vbCRLF & _
"}catch(e){" & vbCRLF & _
"WScript.StdOut.WriteLine('Number:' + SC.Error.Number);" & vbCRLF & _
"WScript.StdOut.WriteLine('Description:' + SC.Error.Description);" & vbCRLF & _
"WScript.StdOut.WriteLine('Source:' + SC.Error.Source);" & vbCRLF & _
"WScript.StdOut.WriteLine('Text:' + SC.Error.Text);" & vbCRLF & _
"WScript.StdOut.WriteLine('Line:' + SC.Error.Line);" & vbCRLF & _
"WScript.StdOut.WriteLine('Column:' + SC.Error.Column);" & vbCRLF & _
"}"
Dim line
Dim re
Set re=new RegExp
re.IgnoreCase=True
re.Global=True

Set fso=CreateObject("Scripting.FileSystemObject")
Dim sce
Set sce=CreateObject("Scripting.Encoder")

If Wscript.Arguments.Count<>1 Then
  WScript.Echo "Usage: vbs2js vbsfile"
  WScript.Quit
End If
Set fo=fso.GetFile(WScript.Arguments(0))
oPath=fso.BuildPath(fso.GetParentFolderName(fo.Path),fso.GetBaseName(fo.Name) & ".JS")
Set iFile=fso.OpenTextFile(fo.Path)
Set oFile=fso.CreateTextFile(oPath)
oFile.Write header
 line=iFile.ReadAll
 re.Pattern="$bWScript\.":line=re.Replace(line,"WScript.")
 re.Pattern="\.StdIn$b":line=re.Replace(line,".StdIn")
 re.Pattern="\.StdOut$b":line=re.Replace(line,".StdOut")
 re.Pattern="\.StdErr$b":line=re.Replace(line,".StdErr")
 re.Pattern="\.Echo$b":line=re.Replace(line,".Echo")
 re.Pattern="\.Sleep$b":line=re.Replace(line,".Sleep")
 re.Pattern="\.Arguments$b":line=re.Replace(line,".Arguments")
 re.Pattern="\.Count$b":line=re.Replace(line,".Count")
 re.Pattern="\.Item$b":line=re.Replace(line,".Item")
 re.Pattern="\.Quit$b":line=re.Replace(line,".Quit")
 re.Pattern="\.ScriptFullName$b":line=re.Replace(line,".ScriptFullName")
 re.Pattern="\.ScriptName$b":line=re.Replace(line,".ScriptName")
 re.Pattern="\.FullName$b":line=re.Replace(line,".FullName")
 re.Pattern="\.Name$b":line=re.Replace(line,".Name")
line=sce.EncodeScriptFile(".VBS", line, 0, "VBScript")
 line=Escape(line)
 oFile.Write "'" & line & "'"
oFile.Write trailer
iFile.Close
oFile.Close
WScript.Quit
――――――――――――――――――――――――――――――――――――――


魔界の仮面弁士 さん 2005年 04月 13日 15時 00分 31秒

》シロウト さん 2005年 04月 13日 14時 31分 49秒
> 私も実行権限の問題では...。と思いIISマネージャをしらべていたんですが
> それらしいものがありませんでした。
管理ツールからなら、該当Webサイトのプロパティから、

1. [ディレクトリ セキュリティ]タブ
2. [匿名アクセスおよび認証コントロール]の[編集]
3. [匿名アクセス]の項目

ですね。

ATコマンドの方は、サービスの"Task Scheduler"(Schedule)です。

シロウト さん 2005年 04月 13日 14時 31分 49秒

》魔界の仮面弁士 さん 2005年 04月 13日 13時 36分 30秒

さっそくご返事頂きありがとうございます。

> 権限の問題だと思います。
> サービスの実行アカウントを変更してみてください。
> 通常、コマンドプロンプトは、「ログイン中のユーザ」の権限で動作しますが、
> ATコマンドは SYSTEMアカウント、ASPは IUSER_nameアカウントで実行されます。

私も実行権限の問題では...。と思いIISマネージャをしらべていたんですが
それらしいものがありませんでした。

ATやASPからも共にバッチファイル自体は起動できているので
.wsf内の"IE.ExecWB"ステートメントがパーミッションエラー系で
正常動作しないのかなぁ??と思っています。

だらだらと自分の想像を述べてしまいすみません。

魔界の仮面弁士さんがおっしゃる下記の「サービス」とは何なんでしょうか?
> サービスの実行アカウントを変更してみてください。

素人質問ですみませんがご回答頂けますでしょうか。



魔界の仮面弁士 さん 2005年 04月 13日 13時 36分 30秒

》シロウトさん 2005年04月13日 11時31分55秒
> ただコマンドプロンプトから実行すると上手くいくのですが、
> ATコマンド指定の実行や、ASP組み込みでブラウザから実行すると
> なぜか動きません。

権限の問題だと思います。
サービスの実行アカウントを変更してみてください。

通常、コマンドプロンプトは、「ログイン中のユーザ」の権限で動作しますが、
ATコマンドは SYSTEMアカウント、ASPは IUSER_nameアカウントで実行されます。

シロウト さん 2005年 04月 13日 11時 31分 55秒

こんにちは。
さっそくですが質問です。

「VBSでTIFFファイルを印刷する」という事をやりたいのですが、
InternetExplorer.Applicationオブジェクト+BASP21+ImageMagickのconvertコマンドを駆使して実行しています。
ただコマンドプロンプトから実行すると上手くいくのですが、
ATコマンド指定の実行や、ASP組み込みでブラウザから実行すると
なぜか動きません。
印刷する.wsfバッチファイル自体は正常実行され、エラーにもなっていないのに...
以下にバッチのソースコードを記述しますので、解決方法などご存知の方ご教授お願いします。
-----------------------------------------------------------------
Sub Main()
     Dim          MyFile
     Dim          IE
     Const OLECMDID_PRINT = 6
     Const OLECMDEXECOPT_DODEFAULT = 0
     Const OLECMDEXECOPT_PROMPTUSER = 1
     Const OLECMDEXECOPT_DONTPROMPTUSER = 2
     Const OLECMDEXECOPT_SHOWHELP = 3
     Const READYSTATE_COMPLETE = 4

     call LOG_SetLogFile("C:\Inetpub\FAX\test\print.log")
     call LOG_OutputLog("print.bat開始")

'     MyFile = "http://localhost/FAX/img/flower.tif"
'     MyFile = "http://localhost/FAX/img/logo.jpg"
     MyFile = "C:\Inetpub\FAX\img\flower.jpg"

     Set IE = CreateObject("InternetExplorer.Application")
     IE.Visible = True
     IE.Navigate2 MyFile

     Do While IE.ReadyState <> READYSTATE_COMPLETE
     Loop


     IE.ExecWB OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER
     Set IE = Nothing

     if Err.Number <> 0 then
          call LOG_OutputLog(Err.Description)
     else
          call LOG_OutputLog("no error")
     end if

     call LOG_OutputLog("print.bat終了")

End Sub
-----------------------------------------------------------------

上記以外よりもっと良いやり方があるようでしたら、
是非教えていただければと思います。


ばんのしゃーによかばんた さん 2005年 04月 12日 16時 39分 04秒

>ばんのしゃーによかばんた さん 2005年 04月 12日 15時 18分 56秒
>かと思って、覘いてみると、.NETの実行ファイルにはソースがまんま入っているではありませんか。

よく見ると、まんまなのは文字列だけですね。コードは見えません。
なので、文字列だけ暗号化すればよいわけですが、それは面倒です。

>コメント -> http://d.hatena.ne.jp/Fio/20050411
>スクリプトは192bit相当で軽く暗号化してますが、スクリプト実行の際に復号して一瞬ファイルに書き込んでますので、書き込んだ瞬間にそれをコピーすることができれば簡単にファイルの内容がわかります。そのこと知らない人にとっては、スクリプトの内容を取得するのはかなり難しくなると思いますが。実行したファイルはNULL文字で上書きしてから削除してます。
>MSScriptControlを使った実行にすれば、ファイルに書き出すことなく実行してしまえるので、スクリプト保護の目的を達することができると思いますが、WScriptオブジェクトが使えなくなるなど制限も多くなります。

とのことですが、
Execute CreateObject("Scripting.FileSystemObject").GetStandardStream(0).ReadAll
1行だけの.VBSファイルを作って、それをSet oExec=wShell.Exec "WScript.EXE "して、
oExec.StdIn.Writeでデコードしたスクリプトを与えれば、よいのでは。


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

>ばんのしゃーによかばんた さん 2005年 03月 12日 15時 56分 25秒
>CMD.EXEのコマンドグルーピング()の「障害」の回避方法です。
>ところが、CMD.EXEには「障害」があって、
>グルーピング()中の)が正しく処理されないのです。

さらに、<>のエスケープにも「障害」があるようです。:-<
グルーピング()中の<>が、パイプで繋いだときだけ、エラーになります。:-<

例えば、
(
ECHO Rem ^)
ECHO ^<head^>
ECHO Rem
)
の実行結果は、
C:\>(
ECHO Rem ) 
ECHO <head> 
ECHO Rem 
)
Rem )
<head>
Rem
でok

しかし、
(
ECHO Rem ^)
ECHO ^<head^>
ECHO Rem
)|MORE
の実行結果は、
C:\>(
ECHO Rem ) 
ECHO <head> 
ECHO Rem 
) | MORE
& の使い方が誤っています。
というエラーになります。&なんか使ってないのに。:-<

てなわけで、UnEscape()を使わざるを、得ない。(*注)
(
ECHO Rem ^)
ECHO %%3chead%%3e
ECHO %%3cscript language=vbscript%%3e
ECHO Set wShell=CreateObject("WScript.Shell"^)
ECHO wShell.PopUp("HOGE"^)
ECHO %%3c/script%%3e
ECHO %%3c/head%%3e
ECHO Rem
) | MSHTA.EXE vbscript:UnEscape(CreateObject("Scripting.FileSystemObject").GetStandardStream(0).ReadAll()) | MORE
PAUSE

(*注)
最近、テレビで、「使わ笊、負えない」「使わ去る、終えない」「使わ猿、追えない」
のどれかはわかりませんが、そういうつもりで言っているように聞こえるんです。
気のせいでしょうか?

P.S.
Windowsでは、コンソールはマイナとは云え、基本のCMD.EXEの障害ぐらいは枯れて欲しいっす。
CMD.EXE如きに未だにバグがあるなんて、きゃーなえ(強・萎え)ちゃいます。


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

表示中のHTMLソースから、スクリプト類を除去するJScriptです。
「お気に入り」や「リンク」から実行します。

scremove.js
――――――――――――――――――――――――――――――――――――――
var Shell=new ActiveXObject("Shell.Application");
var ie=Shell.Windows().Item();
if(!ie){WScript.Echo("IE Not Found");WScript.Quit();}
if(!ie.Document.parentWindow){
for(var k=0;k<Shell.Windows().Count;k++){
 ie=Shell.Windows().Item(k);
 if(ie.Document.parentWindow) break;
 ie=null;
}
}
if(!ie){WScript.Echo("IE Not Found");WScript.Quit();}
var window=ie.Document.parentWindow;
for(var k=0;k<window.document.scripts.length;k++){
 window.document.scripts(k).outerHTML='';
}
for(var k=0;k<window.document.all.length;k++){
 for(var prop in window.document.all(k)){
  if(prop.substr(0,2)=='on'){
   window.document.all(k).setAttribute(prop,null);
  }
 }
}
var outerHTML=window.document.documentElement.outerHTML;
window.document.open();
window.document.write(outerHTML);
window.document.close();
――――――――――――――――――――――――――――――――――――――


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

一般に、

| IE上で「対象をファイルに保存(A)...」を行い、リンク先のファイルをローカルディス
| クの特定のファイルとして保存するには、どのようにすればよいのでしょうか?

のようなケースでは、XMLHTTP などを使用するのが通例のようですが、別解です。

別解が好きですね。>Me

download.htm or download.hta
――――――――――――――――――――――――――――――――――――――
<html><head>
<script language=vbscript>
Set wShell=CreateObject("WScript.Shell")
Sub btn1_onclick()
a1.href=text1.value
a1.innerText=text1.value
a1.focus
End Sub
Sub btn2_onclick()
btn2.blur
btn1_onclick
wShell.SendKeys "+{f10}a"
End Sub
</script>
</head>
<body>
<input type=text id=text1 maxlength=300 size=100 value="about:blank" onfocus="Me.select">
<br>
<button id=btn1>リンクを更新</button>
<button id=btn2>対象をファイルに保存</button>
<br>
<a id=a1 href="about:blank">about:blank</a>
</body></html>
――――――――――――――――――――――――――――――――――――――


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

>つちや さん 2005年 04月 11日 14時 56分 46秒
>唐突ですが、スクリプトエンコーダ作ってみました。スクリプトをD&Dすると実行ファイルを一つ作ります。スクリプトは実は暗号化されて実行ファイルにくっついているだけです。

以下と同じ?

>管理人むたぐち さん 2004年 11月 17日 09時 14分 46秒
>vbs2js.vbsでJScript.NETのコード(内部的にはScriptControlで
>VBScriptを実行している)に変換したものを、
>jsc.exeでコンパイルしたものを、*.cgiにリネームしたものです。

かと思って、覘いてみると、.NETの実行ファイルにはソースがまんま入っているではありませんか。
Excel VBAの場合はもう少しばらばらだったのに。
これなら別にコンパイルする必要なんてないのではありませんか?
.NETは、なんでコンパイルが必要なんでしょう?
単に、ソースとは別の情報をソースと一緒に、かつバイナリで保存したかっただけ?


管理人むたぐち さん 2005年 04月 12日 11時 35分 10秒

To: シーズー大好き さん

WMIを使ってやればいいと思います。

例:
nProc = 0
sName = "javaw.exe"
For Each Process In GetObject("winmgmts:").InstancesOf ("win32_process")
     If LCase(Process.name) = sName then
          nProc = nProc + 1
     End If
Next
MsgBox sName & "は" & nProc & "個起動しています。"

Return