> CLOWN さん
構文から察するに、それは HTA か HTML での記述ですよね。
であれば、WScriptオブジェクトは使えません。
WScriptが使えるのは、*.WSFファイルで実行する場合や、
*.VBSを Wscript.exe で実行する場合などに限られます。
WScript.CreateObject の 替わりに、CreateObject を利用してください。
また、WScript.Echo に関しては、textareaエレメントへの出力や、
MsgBoxでの表示を使うことで、代用する事ができるでしょう。
> やりたい内容は、セキュリティ対策のため
> サービスパックなどが最新のものか
本題とは離れますが、HFNetChkでは不十分でしょうか?
MicrosoftやShavlikから、最新パッチ情報(xmlデータ)を
ダウンロードして、それと比較する事で、未適用のパッチの
一覧も作成してくれますよ。
こんにちは、CLOWNと申します.
VBScriptをならいはじめており、
質問があり掲示板に書き込みしております.
やりたい内容とその解決方法お分かりになる方
いらしたらご教授いただければ幸いです.
やりたい内容は、セキュリティ対策のため
サービスパックなどが最新のものかレジストリの
情報を参照し、その結果をHTMLで記述したく
思っております.
下記内容(レジストリのキーは適当ですが)を
調べて自分なりにアレンジしたのですが、
結果として「オブジェクトがありません WScript」
とエラーを返してきます.
どこか記述に間違いがあるのでしょうか?
(また、他の方法があれば教えてください)
何卒宜しくお願い致します.
<head>
<script language="VBScript">
<!--
Sub showinfo
dim Sh
set Sh = WScript.CreateObject("WScript.Shell")
key1 = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows XP\"
WScript.Echo Sh.RegRead(key1 & "SP2\KB821557\Description")
End Sub
-->
</script>
</head>
<body onload="showinfo">
</body>
いりやさん
レスありがとうございました。
いやはや、RDBMSもSQLも詳しく触れたことがない今の状態では
不本意ながらやろうとしている事のハードルが高すぎて
今の自分の手には負えないレベルなのかも知れません...
わざわざ教えてもらっておきながら、
こちらのレベルの低さによりヒントを使いこなせず申し訳ありませんm(__)m
のぶこさん,
JavaScript (Microsoft JScript) については私がいつも参考にしているサイ
トがあります。
AYA さん,趣味のJavaScriptなページ by AYA
http://member.nifty.ne.jp/aya/index.htm
こちらの WSH 1.0 に Excel をあやつるサンプルスクリプトが掲載されてい
ます。(下記の 6, 18 番)
Windows Scripting Host
http://member.nifty.ne.jp/aya/wsh/wsh_frm.htm
ご参考まで。
いりや
いりやさんレスありがとうございます。
頑張って理解してみたいと思います。
のぶこさん,
はじめまして。いりやと申します。
> VBScriptで次のようなことが出来るのかご助言ください。
> 入力ファイルを読み込み、
> 出力ファイルに書き出し、
> マクロを実行する。
>
> この繰り返しをSheetを増やしながら行う。
エクセルとの連携はこれまで一度もやったことがなかったので,よい機会で
すのでちょっとかいてみました。
インターネット上に掲載されている VBA の解説をみながら Component
Object Model の仕様を推測しながら WSH/JScript (JavaScript) +
Microsoft Excel 2000 の組み合わせでやってみました。
VBScript へのポーティングについては私はちょっとよく分かりませんのでこ
ちらの掲示板をお読みの有識者におまかせします。。
[ スクリプトの解説 ]
generate.js
入力ファイルを生成するスクリプトです。
カレント・ディレクトリに input.txt という名称でファイルを作成します。
フォーマットはのぶこさんのイメージに近づけてあります。(が,同一かど
うかは分かりません)
transfer.js
エクセルへのデータ転送を行うスクリプトです。
必要なシート数を用意して転送します。.xls ファイルとして保存する前まで
を実現しています。マクロも実行していません。
[ 準備 ]
全角スペースを半角スペース 2 文字に置き換えてそれぞれ上記のファイル名
称で保存します。
[ 実行の仕方 ]
(1) generate.js をダブルクリックします。
input.txt が生成されることを確認します。
(2) transfer.js ファイルのアイコンに,input.txt ファイルのアイコンを
ドラッグ&ドロップします。
そうするとデータ転送がはじまります。
[ Source code (generate.js) ]
// ここから
var outputFileName = '.\\input.txt'; // file path
var nSheet = 5; // A number of worksheets
var nRow = 5; // A number of rows in a worksheet
var nColumn = 10; // A number of columns for each row
generateTestData(outputFileName, nSheet, nRow, nColumn);
function generateTestData(outputFileName, nSheet, nRow, nColumn) {
var writeStream = file→writeStream(filepath→file(outputFileName));
if (writeStream != null)
try {
generateTestData2(writeStream, nSheet, nRow, nColumn);
} finally {
writeStream.close();
}
}
function filepath→file(filepath) {
var aFileSystemObject = new ActiveXObject('Scripting.FileSystemObject');
if (!aFileSystemObject.fileExists(filepath))
aFileSystemObject.createTextFile(filepath, true); // 2nd arg : overwrite
return aFileSystemObject.getFile(filepath);
}
function file→writeStream(file) {
var ForWriting = 2;
var TristateUseDefault = -2;
return file.openAsTextStream(ForWriting, TristateUseDefault);
}
function generateTestData2(writeStream, nSheet, nRow, nColumn) {
var initCellFunc = function (sheet, nRow, nColumn) {
for (var r = 0; r < nRow; r++) {
var row = new Array();
for (var c = 0; c < nColumn; c++) {
var cell = String.fromCharCode(65 + c) + (r + 1).toString();
row.push(cell);
}
sheet.push(row);
}
}
var genSheetFunc = function (nRow, nColumn, initCellFunc) {
var sheet = new Array();
initCellFunc(sheet, nRow, nColumn);
return sheet;
}
var dumpSheetFunc = function (sheet, name, writeStream) {
writeStream.writeLine(name);
for (var r = 0; r < sheet.length; r++) {
writeStream.writeLine(sheet[r].join(','));
}
}
var nameArray = new Array();
for (var i = 0; i < nSheet; i++)
nameArray.push('Sheet_' + i);
var sheetArray = new Array();
for (var i = 0; i < nSheet; i++)
sheetArray.push(genSheetFunc(nRow, nColumn, initCellFunc));
for (var i = 0; i < sheetArray.length; i++)
dumpSheetFunc(sheetArray[i], nameArray[i], writeStream);
}
// ここまで
[ Source code (transfer.js) ]
// ここから
if (! WScript.arguments.length > 0) {
WScript.echo('ファイルをドラッグ&ドロップしてください!');
WScript.quit(1);
} else {
for (var i = 0; i < WScript.arguments.length; i++) {
transferToExcel(WScript.arguments.item(i));
}
WScript.echo('完了しました!');
}
function transferToExcel(inputFileName) {
var readStream = file→readStream(filepath→file(inputFileName));
if (readStream != null)
try {
transferToExcel2(readStream);
} finally {
readStream.close();
}
}
function transferToExcel2(readStream) {
var parseFileFunc = function (readStream, sheetArray, nameArray) {
var sheet = null;
while (!readStream.atEndOfStream) {
var s = readStream.readLine();
if (/Sheet_[0-9]+/.test(s)) {
nameArray.push(s);
if (sheet != null)
sheetArray.push(sheet);
sheet = new Array();
} else {
var row = s.split(',');
sheet.push(row);
}
}
sheetArray.push(sheet);
}
var transferSheetFunc = function (sheet, name, worksheet) {
for (var r = 0; r < sheet.length; r++) {
var cells = sheet[r];
for (var c = 0; c < cells.length; c++)
worksheet.cells(r + 1, c + 1).value = cells[c];
}
}
var initExcelFunc = function (sheetArray, nameArray) {
var excel = new ActiveXObject('Excel.Application');
excel.visible = true;
excel.workbooks.add();
var nSheet = excel.worksheets.count;
var nCurrentSheet = sheetArray.length;
if (nCurrentSheet > nSheet) {
for (var i = 0; i < (nCurrentSheet - nSheet); i++)
excel.worksheets.add();
}
for (var i = 0; i < sheetArray.length; i++)
excel.worksheets(i + 1).name = nameArray[i];
return excel;
}
var sheetArray = new Array();
var nameArray = new Array();
parseFileFunc(readStream, sheetArray, nameArray);
var excel = initExcelFunc(sheetArray, nameArray);
for (var i = 0; i < sheetArray.length; i++)
transferSheetFunc(sheetArray[i], nameArray[i], excel.worksheets(i + 1));
}
function filepath→file(filepath) {
var aFileSystemObject = new ActiveXObject('Scripting.FileSystemObject');
if (!aFileSystemObject.fileExists(filepath))
aFileSystemObject.createTextFile(filepath, true); // 2nd arg : overwrite
return aFileSystemObject.getFile(filepath);
}
function file→readStream(file) {
var ForReading = 1;
var TristateUseDefault = -2;
return file.openAsTextStream(ForReading, TristateUseDefault);
}
// ここまで
VBScriptで次のようなことが出来るのかご助言ください。
入力ファイル = input.txt (普通のテキストファイル)
出力ファイル = output.xls (マクロの仕込んだエクセルファイル)
入力ファイルを読み込み、
出力ファイルに書き出し、
マクロを実行する。
この繰り返しをSheetを増やしながら行う。
入力ファイルのフォーマットは次のような感じです。
sheet_1
A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1.・・・
A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2.・・・
A3,B3,C3,D3,E3,F3,G3,H3,I3,J3,K3,L3.・・・
A4,B4,C4,D4,E4,F4,G4,H4,I4,J4,K4,L4.・・・
・
・
・
sheet_2
A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1.・・・
A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2.・・・
A3,B3,C3,D3,E3,F3,G3,H3,I3,J3,K3,L3.・・・
A4,B4,C4,D4,E4,F4,G4,H4,I4,J4,K4,L4.・・・
・
・
・
sheet_n
A1,B1,C1,D1,E1,F1,G1,H1,I1,J1,K1,L1.・・・
A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2.・・・
A3,B3,C3,D3,E3,F3,G3,H3,I3,J3,K3,L3.・・・
A4,B4,C4,D4,E4,F4,G4,H4,I4,J4,K4,L4.・・・
・
・
・
新しいSheetの始まりはSheet_番号で
Sheet_番号がそのままSheet名になります。
Sheet_番号は始まりを認識するキーであり
書き出しは行われません。
A1〜L4は可変でカンマで区切られています。
初心者で右も左も分からずに困っています。
C言語の経験は若干あるのですが・・・
何卒どうぞよろしくおねがいします。
のぶこ
mac2 さん,
ぜひ全世界のリソースを活用していきましょう。特にプログラムの場合,
文章が文字化けしていてもソースコードは何とか解読できますから利用
しない手はありません。
もっともサンプルは所詮サンプルですので,外部仕様にかんしては,か
ならずソフトウェアベンダのサイトで裏取りすることが肝要かとおもい
ます。Microsoft 社の msdn は,そういったベンダの提供する情報源と
しては相対的に高いと最近感じています。
いりや
panchi さん,
そうでしたか。がんばってください!
一つリンク情報を。
mbx2mbox
http://mbx2mbox.sourceforge.net/
米国の David Coppit さんが作られた GPL ライセンスの dbx ->
mbox 変換ソフトウエア (Perl) です。
あとこのページには別のアプローチが紹介されており楽しめます。
VBScript を使った例題などニヤっとしちゃいました。
http://mbx2mbox.sourceforge.net/outlooktechniques.htm
http://www.usethesource.com/articles/02/06/17/1957223.shtml
ご参考まで。
いりや
いりやさん、ありがとうございました。
変な書き込みをしてすいません。
> 単純に dbx フォーマット (MS Outlook Express 5.0 のメール) のデータ
>を変換さえできればよい、ということであれば最近は変換ツールがフリー
>でも出回っているようです。そちらの検討をおすすめします。
最初はそう思ったのですが、仕事でこうしたものを作ると言うことにきまって
しまったので、市販のものを使えないのです。。。
>C++ に関する話であればそちらの BBS で投函されるのがいいかと思います
>
はい。大変すいませんでした。
いりやさんありがとうございます。
思うように出来ました。
英語が全くできない私はgoogleの検索で日本語のページで
検索していました。
いりやさんとこのサイトに感謝します。
panchi さん、
C++ に関する話であればそちらの BBS で投函されるのがいいかと思います
。
単純に dbx フォーマット (MS Outlook Express 5.0 のメール) のデータ
を変換さえできればよい、ということであれば最近は変換ツールがフリー
でも出回っているようです。そちらの検討をおすすめします。
例えば、SAXMAN さんの OE5Conv Ver.1.31 は dbx → mbox です。
http://www.interq.or.jp/mars/saxman/freesoft.htm
いりや
まりさん、
すみません、投稿者があて先になっておりました。
> APIでごちゃごちゃやるよりShell.Applicationでできそうですね
のようです。Shell.Application オブジェクトの行く末が心配ではありま
すが、適度に Win32 API を包んでくれたものを利用するのは悪くない選
択だと思います。ソースコード付きで提供されていないのでデバッグに
苦労することもたまにありますけどね。(^^:
いりや
>まりさん さん
ありがとうございますm(..)m
早速調べて見ます。
>いりや さん
ありがとうございますm(..)m
APIでごちゃごちゃやるよりShell.Applicationでできそうですね(*^^*)
(↑最近APIが楽しくなってなんでもAPIで済ませたいと思ってたりゥァヒ
Shell.NameSpaceでネットワーク系を探してるみたいですねゥ・
とにかく、WMIは便利とゆうことで(^^)
WSH系の人にとっては当たり前だったり?
はじめまして。bdxのことについて調べていたらココにたどり着きました。
どうかお知恵を貸してください。
今 自分がしたいことは、
*.dbxファイルを解析し、csvに「件名,送信者,本文」として落としたい
のです。
そこで*.dbxファイルを解析する必要がでてきました。http://oedbx.Aroh.de/のソースを
動かしてみて、サンプルがどのように動くのか検証してみたのですが、うまく
動きません。
http://oedbx.Aroh.de/ のHPより、ソースをDLしてきて、VC++で、
1.DLLを作成した
cppsourcecode/library/*.cppをコンパイルし、
”AS_OEDBX_DLL.dll”という名前でDLLを作成しました
2.oedbx/cppsourcecode/examples/ex1.cppを
@ コンパイルした
A libを取り込みビルドした
ここまではいいのですが、どうしてもここからさきがうまくいきません。
VC++の[ビルド]→[実行]をクリックすると、新しいダイアログがでてくる
のですが、[ファイル]→[開く]で、*.dbxを指示しても、何の変化もありません。
ずばり、
1.ex1.cpp を 実行するとどういう動きをするのか?
2.*.dbxから一通一通メールを読み出したいのですが、
http://oedbx.Aroh.de/のソースを使ってどのように
つかえばいいのか?
なにぶんVC++及びC++の経験が乏しいのですが、
DBX→CSV変換という処理を行わないといけないので、
何かご存知でしたら、教えて頂けないでしょうか?
まりさん、
> Atmark IT (@IT) の掲示板のスレッドはなかなか参考になるかと。
dzsws30 さんの 2003-05-09 11:47 さんと matlab さんの 2003-06-11 14:00
の回答など。
mac2 さん、
"WMI Administrators,group remove" を google に与えてみたらいかがでしょうか??
Torgeir Bakken (MVP) (Torgeir.Bakken-spam@hydro.com) さんが、
"Finding users in local admin groups" という表題のスレッドで、非常に
参考になるスクリプトを紹介されています。
いりや
"WSH ローカルエリア接続" を google に与えてみたらいかがでしょうか??
Atmark IT (@IT) の掲示板のスレッドはなかなか参考になるかと。
いりや
こんにちわ。
開発環境:VB6.0です。
[スタート]⇒[設定]⇒[ネットワークとダイヤルアップ接続]⇒[ローカルエリア接続]をVBで起動したいのですが、どうすればいいでしょうか?
LANが2ついて、事情があって一つの常駐ソフトを起動しているときは1個のLANを
落とさなければならなく、たま〜にもう一方のLANも立ち上げなければならないので、
有効にしたり無効にしたりしたいんです。
【vb ネットワーク接続 api】 などでググってみたのですがなかなかHITしません(T_T)
>http://www.nsgd.co.jp/nsd/NSDGoods/msvb_fn/msvb_fn_05dialog.htm
>「ネットワーク接続と切断のダイアログ等を表示できます。」
このシェアウェアのソフトのようなものを使わなければ無理かなぁゥ・
それを常駐ソフトに組み込みたいです。
ヒントを下さい(ToT)
何とか自分で調べて解決しようとはしているのですが
どうしてもわからないので教えてください。
WinXpProで、あるユーザ(User01)に管理者権限を与え
その後ソフトをインストールした後(手作業)、管理者権限を削除したい。
・User01に管理者権限を与える
Set usr = GetObject("WinNT://" & PCName & "/Administrators,group" )
usr.Add("WinNT://" & PCName & "/" & "User01)
usr.SetInfo
Set usr = Nothing
で出来ました。
・User01に管理者権限を削除する
usr.Add("WinNT://" & PCName & "/" & "User01)
AddをDeleteにすればできるのでは・・・と思ったのですが。。
何度もすみません。教えてください。
LIKE 演算子の解説
msdn, Platform SDK: Windows Management Instrumentation, LIKE Operator
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/like_operator.asp
キノさん,
ExecQuery() メソッドに与えてやる問い合わせ (Query) として
WMI Query Language (WQL) という RDBMS でお馴染みの SQL のサ
ブセットが構文規則として与えられています。
具体的には WHERE 句の LIKE 演算子を使用するとパタン・マッチ
が利用できます。
この演算子で表現できる以上の条件を与えたい場合は,得られたコ
レクションをもう一度吟味するための手続きを ExecQuery() メソッ
ドの外で用意する必要がありそうです。例えば WSH/JScript や
WSH/VBScript の正規表現オブジェクトを利用するなど。
Microsoft 社の WQL の構文については次を参照ください。
msdn, Platform SDK: Windows Management Instrumentation, Querying with WQL
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/querying_with_wql.asp
msdn, Platform SDK: Windows Management Instrumentation, SQL for WMI
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/sql_for_wmi.asp
いりや
こちらはWSHに詳しい方が多いようなので質問させてください
当方、現在スクリプトで作ってみたいネタを抱えているんですが、
今現在自分のレベルが低いために進まなくなってしまっているものがあるのです。
http://www.microsoft.com/japan/msdn/thisweek/wmi/koj990811.asp
のURLにある”リスト3: 特定プロセスの終了”をベースにして、
ネットワーク上の全端末の特定アプリを落とすのを作りたいのですが、
そのアプリを”正規表現によるプロセス検索”で指定したいのです。
(例リストでは”notepad.exe”の所を、”A[A-Z0-9]*EXE”みたいな形で)
こういう指定方法って難しかったりするのでしょうか。
また、プロセスではなく、タスクを指定して落とすって言うのは可能でしょうか。
いりやさん
ありがとうございます!
さっそく試してみます^^
いりやさんレスありがとうございます。
うまく出来ました。本当にありがとう
ございました。
ほかのも「GetObject("WinNT://」で
検索してみます。
mac2 さん,
google.com で "GetObject("WinNT://" という単語を入れて検索し
てみたら,こんなサイトを発見しました。
Richard Gooddie さんがこさえた Visual Basic のコードですが
WSH/VBScript でも利用できそうな気がします。
ITtoolbox Visual Basic Code Exchange
http://visualbasic.ittoolbox.com/code/d.asp?d=2255&a=s
// 引用開始
' ----------------------------------------------------------------
' Function: Rename the existing account
' ----------------------------------------------------------------
Function RenameAccount(DomainName,Server,OldUserName,NewUserName)
Dim User
Dim Container
Set Container = GetObject("WinNT://" & Server & ",Computer")
Set User = GetObject("WinNT://" & Server & "/" & OldUserName & ",user")
Call Container.MoveHere(User.ADsPath, NewUserName)
RenameAccount = True
End Function
// 引用終了
いりや
追伸 google 恐るべし。こんな粗い検索条件でよく探し出してく
るわ。。
いりやさんレスありがとうございます。
私もmsdnはみていたのですが、ほとんどがActive Directoryについての
記述でローカルユーザについての記述がほとんどありませんでした。
ローカルユーザの追加は
Set dom = GetObject("WinNT://PCNAME")
dom.Create("user","user01")
で出来ました。削除も「Create」を「Delete」に変更するとできるようです。
変更も「Create」を何かに変えることで(RenameとかUpdate等)で出来るのでは?
という予想をしたのですがだめでした。
Active Directoryのユーザなら「sAMAccountName」を書き換えればいいような
気がしますが、ローカルユーザはどうすればいいでしょうか?
mac2 さん、
msdn でそれらしい記述を発見しましたのでとりいそぎ。
http://www.microsoft.com/japan/technet/treeview/default.asp?url=/japan/technet/scriptcenter/compmgmt/default.asp
http://www.microsoft.com/japan/technet/treeview/default.asp?url=/japan/technet/scriptcenter/user/default.asp
WindowsXpProをWSHを使って設定やレジストリを変更する
プログラムを作っています。いろいろ調べているのですが
どうしても判らないところが2点あります。
1.ローカルユーザ名の変更
ローカルユーザの追加/削除は出来たのですが変更が
できません。
2.コンピュータ名とワークグループ名の変更
WSHで出来るのでしょうか?
余談ですが皆さんが参考にされている書籍等
あれば教えてください。
レンさん、
こちらの過去ログに、レンさんと同じように IP Address を取得する方法に関す
る議論がありました。新しく DHCP サーバが払い出した IP Address をある FTP
サーバに伝える (ファイル経由で ftp put する) ことが目的だったそうです。
ポインタ情報をご紹介します。
http://www.roy.hi-ho.ne.jp/mutaguchi/bbs/list88.shtml
88-34 迷い人 さん 2003/07/26 09:42 (★1)
88-32 あさじゃけん さん 2003/07/25 09:54 (★3)
88-31 迷い人 さん 2003/07/25 00:42
色々と皆さん模索されているようです。
コマンドプロンプトから実行するコマンド (ipconfig など) の出力結果から取
り出したり (★1) 、Windows Management Instrumentation (WMI) のサービスを
利用したり (★2) 、Winsock を利用 (★3) する方法など。
★2, msdn, スクリプトセンタ, IP 設定情報の取得
http://www.microsoft.com/japan/technet/treeview/default.asp?url=/japan/technet/scriptcenter/network/scrnet06.asp
それから、環境変数へのアクセスについては Windows Scripting Host が標準で
提供しているクラスがあります。むたぐちさんの解説と msdn をお知らせします
ので取り組んでみてください。
むたぐちさん, WshEnvironmentオブジェクト
http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/object/environment.htm
Windows Script Host, WshEnvironment オブジェクト
http://www.asia.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/script56/html/wsobjwshenvironment.asp
いりや
こんにちは、これからWSHに挑戦しようと思います。
作りたい物は現在のIPアドレスをWindowsの環境変数(%ipaddress%など)に書き込むものです。
どのように作成すればいいでしょうか?
1.現在のIPを取得する方法
2.そのIPを環境変数ipaddressに書き込む方法
ヒントでも良いのでよろしくお願いいたします。
ひとみんさん、
むたぐちさんの
http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/object/shell2.htm
の Shell.Application>>ShellExecute sFile [,vArguments] [,vDirectory] [,vOperation] [,vShow]
メソッドを利用すれば「引数の渡し方」についてはご所望の結果
が得られるのではないのかな、と思います。お試しください。
すいません、VBのExeを起動する事はできたのですが
今度はASPからVB側に引数を渡したいのです。
引数の渡し方、又、VB側でどうすれば引数を使用できるのかを
御教授ください。
よろしくお願いします。
すいません、質問です。
ASPからVBのExeを起動する為にWSHを使用しようと思っているのですが、
アプリケーションの初期化に失敗しました。というエラーが出て
Exeが起動できません。
Set WshShell = Server.CreateObject("Wscript.Shell")
rc = WshShell.Run("C:\asp\kondate\exe\printout.exe", 1, FALSE)
という風に書いているのですが・・・
原因がもしわかればご教授ください。
よろしくお願いします。
先日からIE・IEコンポーネント使用のタブブラウザを止めて、Netscape7.1を使い始めました。
ついでに2chブラウザもかちゅーしゃをやめて、OpenJaneDoeという、非IEコンポーネント使用
ブラウザを使い始めました。
というのも、次から次と涌いてくる、IEの致命的なセキュリティホールに
うんざりしたためです。
ActiveX・COMの世界にどっぷり浸かっているお前が何を言うんだという突っ込みも
あるでしょうが、
スラッシュドット ジャパン | IEに多数の未パッチのセキュリティ欠陥が新たに発覚
http://slashdot.jp/security/03/09/14/0938229.shtml?topic=41
こういうのを見るとさすがに気持ち悪くなりませんか?
スキーマの解釈およびセキュリティゾーンのバグは、まあいつものことなので
修正してもらえらばいいんですけど、私が驚いたのは、MSXML2.XMLHTTPが
インターネットゾーンでもセキュリティ警告なしでCreateObjectできてしまう仕様です。
これ知らなかったです。
良く考えれば、WSHやHTAのためだけにわざわざこのコンポーネントが存在する
訳はないので、こういう仕様であって当然なわけですが。
もっとも、インターネットゾーンでは他ドメイン(もちろんローカル含めて)の
ウェブサーバーにはconnectできない仕様にはなっているんですが、前述のバグを
使えばこれが可能になるということです。さんざんXMLHTTPを使ってきた私が
言うのもなんですが、こんな危険なコンポーネントがクライアントサイドのスクリプトから
呼ばれるのは堪りません。(危険だからこそ、WSHなどから使うと強力なわけですがね)
というわけで、WebブラウジングにIEを使うのは当分(少なくともIE7が出るまでは)
やめることにしました。
HTAやらhttやらHTMLヘルプやらWSHから呼び出すコンポーネントとしてのIEやらは
これまで通り使いますけど。あ、あとWindowsUpdateにもw
さて、移行することにしたNetscape7.1ですが、これは思った以上に完成度が上がっていました。
Netscapeって起動は遅いし、何か表示が汚いし、リサイズするとリロードするし使えんなー
というのが個人的な印象だったのですが、いつのまにか随分垢抜けていました。
起動が重いのは、常駐機能がつくことでカバーされています。まあ、IEだってOSの起動に
紛れて常駐してますし、これはアリでしょう。ページの表示はIEより早いくらいだと思います。
あと、画像の縮小が綺麗だったり、ポップアップ抑止機能があったりと、色んなところで
IE6より優れてる(ことを必死でアピールしようとしてるのが、一つ一つの機能から伝わって
くるのがあれですけど)と思います。
しかもいつのまにかタブブラウザになっていました。Donut系タブブラウザを愛用していた
だけに嬉しい機能です。
しかし、target=_newなリンクを開くと何故か別ウィンドウで開いたりして、
デフォルトでは使い勝手はあまりよくありません。他にもホイールのオートスクロールが
機能しなかったり、検索バーがなかったりして、Donut系タブブラウザの機能性には
到底及びません。
そこで役に立つのが、ユーザー有志が作成したコンポーネント(*.xpi)です。
outsider reflex
http://white.sakura.ne.jp/~piro/
このサイトでダウンロードできる「タブブラウザ拡張」を使うと、Donut系タブブラウザと
ほぼ同等の機能を持たせることができます。しかも柔軟なカスタマイズが可能なので、
これははっきり言って必須コンポーネントでしょう。
また、同じくこのサイトの「コンテキストメニュー拡張」も合わせて使用すると最強です。
IEではレジストリ編集+外部HTML(JavaScript/VBScript)によりコンテキストメニューを
追加できますが、これと同等のことができるようになります。というか、設定ダイアログ
から簡単に登録・編集が可能なので、IE以上の操作性かもしれません。
とりあえず私は、「クリップボードにタイトルとURLをコピー」というカスタム
スクリプトを登録しました。詳しくは説明しませんが、「短縮構文」を使うことで
実に簡単に作れます。こんなんです。
_setClipBoard(_window.document.title + "\n" + _window.location.href)
タブブラウザと言えば検索バーがつきものですが、これはGoogle Toolbarのクローンである
Googlebarが使えます。
mozdev.org - googlebar: index
http://googlebar.mozdev.org/
個人的には、タブブラウザの検索バーよりGoogle Toolbarの方が好きだったので、
より近い操作性が得られるGooglebarが利用できるのはとてもありがたいです。
検索エンジンを指定したりはできないみたいですが、Google以外あまり使わないので
私にはこれで十分です。
ホイールのオートスクロールがデフォルトでできないのはちょっとびっくりしましたが、
これもちゃんとXPIがあります。
mozdev.org - autoscroll: index
http://autoscroll.mozdev.org/
あと、Irvineのmozillaフォルダに入ってるirvine.xpiを使えば、コンテキストメニューに
Irvineの機能を組み込めます。
私は使わないのですが、マウスジェスチャーの機能を組み込んだりもできます。
mozdev.org - optimoz: gestures/installation
http://optimoz.mozdev.org/gestures/installation.html
これで大体、Donut系ブラウザとほぼ変わらない快適なWebブラウジング環境ができあがりました。
これにProxomitron(ローカルプロキシサーバー。httpヘッダーやHTMLに様々なフィルタが
かけられる)を通せば、最早敵なしです。あとはお好みのテーマを落としてきて飾り付けしてください。
と言うわけで、Netscape7.1の薦め でした。
yu-mi さん,
こういう時には検索エンジンを使って粗い検索条件でヒントを得るとよい
です。例えば,www.google.com で,JSP JavaScript という検索語をいれ
てみると,yu-mi さんと同じ質問をなさっている方がたくさんいらっしゃ
るのがわかります。
例えば,
http://chaichan.hp.infoseek.co.jp/qa3000/qa3448.htm
のスレッドや
http://www.atmarkit.co.jp/fjava/javafaq/jsp/jsp01.html
http://www.atmarkit.co.jp/fjava/javafaq/jsp/jsp02.html
などのレクチャなど。
少しずつ問題の輪郭が明確になってくると,違った見方ができるように
なり議論がふくらむとおもいますので!
いりや
追伸
私はJava初心者です。
分からないことがあるので、単刀直入に質問を書きます。
JSPの中で宣言した変数の値をJavaScriptの中の変数に入れるには
どーしたらいいのですか???
単純に…
<% String a = "abc" %>
...
function jsScrip(){
var x = "<%= a %>";
}
これではxに値が入らないようです。
宜しくお願いします。
はじめまして。スクリプトについて質問があります。私は技術的なことはさっぱりなんです。最近PCを起動するとウィンドウズ スクリプト ホストという表示で「WhislerCompatibleMode_1288.js」が見つかりませんという表示がでます。288の部分は他の数字になっていることもあります。今までこんな表示はでなかったのに。×をクリックして表示を消したあとは普通にPCは動いてるのですが、気になって仕方ありません。これはいったいなんですか?できましたら対策等についてメールで送っていただければ幸いです。お願いします。
管理人さん
すごい、ばっちりです。とても助かりました。回答ありがとうございました。
管理人さん、回答ありがとうございます。
"三つ目の引数にTrueを指定すると、hogehoge.exeが終了するまで"
レッスンにありましたよね。順番に同時起動をしたいので、この場合
マルチに起動してくれませんね。
WScript.Sleepメソッドを勉強して、一度使ってみます。
ありがとうございました。
To: pon さん
> 用は、このようなアクセス権のないフォルダに関しては、
> 無視してスクリプトが続行できればいいのですが。
それならOn Error Resume Nextを使って、エラーをトラップしてやるだけで
いいんじゃないでしょうか。
To: BA さん
ADOは良く分からないので、詳しい方お願いしますです。
To: WS さん
> WSHを使用して、イベントログに記述されている情報を読み込みたいのですが、
WMIのWin32_NTLogEventクラスを使えば可能です。
↓cscript.exeで実行してください。
For Each oEvent In GetObject("winmgmts:").InstancesOf("Win32_NTLogEvent")
WScript.StdOut.WriteLine oEvent.TimeGenerated & vbTab & oEvent.Message
Next
条件の絞込みなどもできますので、詳しくは"Win32_NTLogEvent"で調べてみてください。
To: たぬきうどん さん
> OSはWindows98、ドメインに参加している
> PCです。このPCのログオンサーバはどのようにしてゲットすればよいですか。
昔、同じ質問に回答してましたのでそちらを参照してください。
http://www.roy.hi-ho.ne.jp/mutaguchi/bbs/list54.shtml
(2001年 12月 07日 02時 05分 00秒の記事)
To: セレナ さん
> WSHで、ネットワークとダイヤルアップ接続を操作してNICを無効にしたり、有効にしたりするには
昔、同じ質問に回答してましたのでそちらを参照してください。
http://www.roy.hi-ho.ne.jp/mutaguchi/bbs/list54.shtml
(2001年 12月 07日 02時 05分 00秒の記事)
# 偶然同じ日に回答してました。
To: masano さん
> そこで、1つ目を実行してからウエイトをして、次を実行するような事は
> できないでしょうか?
WshShell.Run "hogehoge.exe",1,True
のように三つ目の引数にTrueを指定すると、hogehoge.exeが終了するまで
次のステートメントの実行を待たせることができます。
また、それ以上に待ち時間が欲しければ、
WScript.Sleepメソッドを使うと良いでしょう。
いりやさん、
回答ありがとうございます。
勉強共々使わせていただきます。m(__)m
御世話になります。
簡単な事かもしれませんが、教えてください。
あるプログラムを順番に実行したいのですが、上手くいきません。
そこで、1つ目を実行してからウエイトをして、次を実行するような事は
できないでしょうか?
よろしくお願いします。
はじめまして、セレナです。
WSHで、ネットワークとダイヤルアップ接続を操作してNICを無効にしたり、有効にしたりするにはどのようにすればよいでしょうか。どなたかご教授ください。
WSHを使ってVBスクリプト書いてます。OSはWindows98、ドメインに参加している
PCです。このPCのログオンサーバはどのようにしてゲットすればよいですか。
OSがWindowsNT4.0+SP3(?)以上なら確か、環境変数%logonserver%で取得できる
のですが。
VAV さん,
> ファイルのプロパティを表示させるVBSスクリプトを教えて下さい。
VBScript ではなく JScript ですがポーティングはそんなに難しく
はないと思います。こんな書き方がたとえば出来ますよ,というこ
とで,
・invokeVerb() メソッドの利用例
・invokeVerb() メソッドの引数に与えてやるコマンド名の列挙
の二つをご紹介します。
//
// invokeVerb() メソッドの利用例
//
var aShellApplication = new ActiveXObject('Shell.Application');
var aFolder = aShellApplication.nameSpace('c:\\');
var aFolderItem = aFolder.parseName('sample.doc');
aFolderItem.invokeVerb('プロパティ(&R)');
var aShell = new ActiveXObject('WScript.Shell');
aShell.popup('クリックするとスクリプトを終了します (5秒待って自動終了)', 5);
WScript.quit();
// 注意
//
// (1) FolderItem>>invokeVerb() メソッドは非同期に動作します。
// (2) Shell.Application オブジェクトが開放されると invokeVerb()
// メソッドが処理の途中でも中断してしまうようです。
// (3) プロパティ(&R) コマンドによって表示されたウインドウは,
// Shell.Application オブジェクトが開放されると閉じます。
// よってある期間表示し続けるためには上記のようにポップアッ
// プウインドウを表示したままにするなどスクリプトの実行をブ
// ロックする必要があります。
//
// invokeVerb() メソッドの引数に与えてやるコマンド名の列挙
//
var aShellApplication = new ActiveXObject('Shell.Application');
var aFolder = aShellApplication.nameSpace('c:\\');
var aFolderItem = aFolder.parseName('sample.doc');
var verbs = aFolderItem.verbs();
var verbArray = new Array();
for (var i = 0; i < verbs.count; i++)
verbArray.push(i + ' [' + verbs.item(i) + ']');
WScript.echo(verbArray.join('\n'));
WScript.quit();
// 実行例 ここから
C:\Documents and Settings\iriyak\My Documents>cscript //nologo list-up-verbs.js
0 [開く(&O)]
1 [新規作成(&N)]
2 [印刷(&P)]
3 []
4 [Norton AntiVirus を使ってスキャン(&V)]
5 []
6 [切り取り(&T)]
7 [コピー(&C)]
8 [ショートカットの作成(&S)]
9 [削除(&D)]
10 [名前の変更(&M)]
11 [プロパティ(&R)]
C:\Documents and Settings\iriyak\My Documents>
// ここまで
YU さんへ
ご回答ありがとうございます。
とても参考になります。
こんばんわ。
C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll
のファイルのプロパティを表示させるVBSスクリプトを教えて下さい。
はじめまして
Microsoftのスクリプト センターに参考になるスクリプトが沢山ありますよ。
(Windows 2000、Windows XP、および Windows Server 2003用)
http://www.microsoft.com/japan/technet/treeview/default.asp?url=/japan/technet/scriptcenter/network/default.asp
でも、FileSystemObjectを使用していないみたいなので
質問の回答になっていないですね・・・。
はじめまして NORI です。
FileSystemObjectを使用して、ローカルマシンのあるフォルダを
共有化したいのですが、可能でしょうか?