aroma10 さん 2007年 07月 25日 18時 08分 16秒

ちゃっぴさん
>どうしても WSH で扱うのであれば WshExec class の Terminate method >が幾分マシですが、推奨されるものではないです。
すいませんまだ始めたばかりですのでよくわかりません
実際どのように記述すればよろしいですか?
推奨されてないようですが後は自己責任ということで
お願いいたします



ちゃっぴ さん 2007年 07月 25日 02時 15分 46秒
URL:http://blogs.wankuma.com/tyappi

To aroma10 さん (aroma7@snow.ocn.ne.jp) 2007年 07月 24日 00時 47分 35秒

> 私の仕事柄同じアプリを一定時間ごとに起動、終了を繰り返さなければならないのですが、アプリ終了のVBSが組めません御教授くださいませんか?

そもそも、そういう自動終了しないような EXE を呼び出すこと自体がやばいんですが、その EXE いじれないんですかね?

いじれるなら、設計変更したほうがいいですよ。

どうしてもいじれない場合には、本当は別の言語を用いて制御すべきだと思います。とりあえず、Win32 API を直接あつかる言語であれば問題ないでしょう。

どうしても WSH で扱うのであれば WshExec class の Terminate method が幾分マシですが、推奨されるものではないです。

ちゃっぴ さん 2007年 07月 25日 02時 01分 14秒
URL:http://blogs.wankuma.com/tyappi

To さくら さん 2007年 07月 24日 23時 38分 16秒

> ActiveDirectoryから、FullNameをキーにしてUserNameを取得する。

そもそも FullName (LDAP では DisplayName attribute) 自体が AD 上で unique になっていないので、結果として複数の結果が返ってくる可能性があることはわかりますか?

人為的に整合性を確保してやることなしに特定することは不可能です。
まずは、ここまでを肝に銘じてください。

一応、ADSI でも ADO + LDAP provider でも WMI でもできますけど、効率がいいのは ADO + LDAP provider ですね。

ADO + LDAP provider で DisplayName を search filter にして、sAMAccountName を取得すればよいでしょう。

ちゃっぴ さん 2007年 07月 25日 01時 45分 00秒
URL:http://blogs.wankuma.com/tyappi

> 小鉄 さん 2007年 07月 17日 16時 22分 12秒

REG.exe を利用したほうがよいでしょう。batch でいいんじゃない?

さくら さん 2007年 07月 24日 23時 44分 11秒

お世話になります。
さくらと申します。

実現したい事は
■ActiveDirectoryから、FullNameをキーにしてUserNameを取得する。
なのです。

色々と調べてみて、ADSI、LDAP、WSHあたりで実現出来そうな気もするのですが、
これと言った情報に辿り着く事が出来ませんでした。

理想はスタートメニューの検索からActiveDirectoryを指定し、漢字名でユーザー名を取得する。なのですが…

上記の実現の可否、ヒント、何でも良いのでご教授願えますでしょうか。

宜しくお願い致します。

さくら さん 2007年 07月 24日 23時 38分 16秒

お世話になります。
さくらと申します。

実現したい事は
■ActiveDirectoryから、FullNameをキーにしてUserNameを取得する。
なのです。

色々と調べてみて、ADSI、LDAP、WSHあたりで実現出来そうな気もするのですが、
これと言った情報に辿り着く事が出来ませんでした。

理想はスタートメニューの検索からActiveDirectoryを指定し、漢字名でユーザー名を取得する。なのですが…

上記の実現の可否、ヒント、何でも良いのでご教授願えますでしょうか。

宜しくお願い致します。

aroma10 さん (aroma7@snow.ocn.ne.jp) 2007年 07月 24日 00時 47分 35秒

ハンドルネームですいません
早速ではありますがアプリ起動に関してはシステムを組むことができました
私の仕事柄同じアプリを一定時間ごとに起動、終了を繰り返さなければならないのですが、アプリ終了のVBSが組めません御教授くださいませんか?
ちなみに起動VBSは以下の要に記述してます
Set WshShell = CreateObject("WScript.Shell")
WshShell.CurrentDirectory = "C:\ProgramFiles\*******\*********"
WshShell.Exec("C:\Program Files\********\*******\****.exe")
申し訳ありませんがプログラム名と場所は伏せさせて下さい
よろしくお願いいたします

a3 さん 2007年 07月 23日 12時 32分 59秒

>小鉄 さん 2007年 07月 17日 16時 22分 12秒

バックアップという言葉の程度にもよりますが
・RegReadでレジストリの情報を読んでファイルに内容を保存しておく。
・そのファイルからデータを読み込んでRegWriteで書き込んで情報復元。
というレベルであれば、できると思います。

但し、実行するユーザの権限とレジストリの位置の組み合わせによって
読み書きできない(特に書き込み)場合がありますのでご注意ください。

> メソッドにはRegRead,RegDelete,RegWriteしかない
レジストリを読めて(RegRead)、消せて(RegDelete)、
作成・追加・更新(RegWrite)できますが、何か機能的に不足していますか?

※この3つのメソッド『だけ』では
 バックアップ相当の処理はできないのは前述のとおりですが。



>たま さん 2007年 07月 18日 00時 56分 34秒
なにか、前回とは違ったのでしょうね。
これ以上は、原因追求は難しそうです。

たま さん 2007年 07月 18日 00時 56分 34秒

>a3さん
レスありがとうございます。

今日改めてタスクスケジュールに登録して実行したところ、パラメータを取得できるようになりました。
タスクスケジュールへ登録した手順はまったく同じなので、すごく不思議です。
ちなみに手順は、下記のとおりです。
1.タスク追加のウィザードでバッチファイルを選択
2.1回だけ実行を選択
3.開始日時を指定
4.Administratorのパスワードを入力



小鉄 さん 2007年 07月 17日 16時 22分 12秒

みなさんこんにちは。
WSHを利用し、あるレジストリキーのバックアップを取りたいと考えていますが、メソッドにはRegRead,RegDelete,RegWriteしかないのですが、この3つではバックアップはできないのでしょうか?

a3 さん 2007年 07月 17日 13時 21分 21秒

>たま さん 2007年 07月 16日 21時 38分 24秒

タスクスケジュールに登録したときの手順を詳しく書いてもらえれば
なにかわかるかもしれません。

たま さん 2007年 07月 16日 21時 38分 24秒

windows server2003にVBスクリプトをおいて、タスクスケジュールで実行したいのですが、パラメータが正しく取得できません。

VBスクリプト ------
If WScript.Arguments.Count()<2 Then
 WScript.Echo WScript.Arguments.Count()
 WScript.Echo "Error"
 WScript.Quit
End If
For k=0 To WScript.Arguments.Count()-1
 WScript.Echo WScript.Arguments.Item(k)
Next

バッチ---------
CScript.exe test.vbs aaa bbb ccc

上記バッチを手動実行するとパラメータを認識してくれるのですが、
タスクスケジュールで実行するとパラメータが0件となってしまいます。

どなたか原因をご存知ありませんか

チャチャ さん 2007年 07月 13日 21時 21分 51秒

To:a3 さん 2007年 07月 13日 13時 18分 31秒

私の環境も Windows 2000 です。実験コードをすべて実行してみました。
全く一緒でした(当たり前ですが・・・笑)。

CurrentDirectory って、こんなに変化するのですね。いつもエクスプローラから
ダブルクリックで実行していましたから、CurrentDirectory とは常にそのファイ
ルが存在するフォルダまでのパスだと思いこんでいました。
ちょっと、とまどっています。

>おそらく「C:\Program Files\○○○\△△△.exe」と
>絶対パスで書いているでしょうから、
>カレントフォルダが「C:\Program Files\○○○」に
>自動的に設定されたので、動いたということになりますね。

はい。まさにそのとおりです。

a3 さん 2007年 07月 13日 13時 18分 31秒

> チャチャ さん 2007年 07月 11日 21時 46分 42秒

動いてよかったですね。おめでとうございます。

ただ、ちょっと以下のことが気になったので
WSHからは少し脱線しますが、追試してみました。
========================================================
>そもそも「ファイル名を指定して実行」などではちゃんと実行されるのでしょうか?
問題なくメニューが表示された状態で起動します。
========================================================

C:\curdir.vbs
--------------------
Set WshShell = CreateObject("WScript.Shell")
WScript.Echo WshShell.CurrentDirectory
--------------------

としておいて、Windows2000で実験。

ファイル名を指定して実行から
■C:\curdir.vbs  (絶対パスで拡張子の関連付けで実行)
 ⇒「C:\」
■..\..\curdir.vbs(相対パスで拡張子関連付けで実行)
 ⇒「C:\」
■WScript.exe C:\curdir.vbs
 ⇒「C:\Documents and Settings\ユーザ名フォルダ」(ユーザープロファイルフォルダ)
■C:\Winnt\System32\WScript.exe C:\curdir.vbs
 ⇒「C:\Winnt\System32」
■パスの通っているところ(例えばC:\winnt\system32)に
 curdir.vbsを移動してから curdir.vbs (拡張子の関連付けで実行)
 「C:\Documents and Settings\ユーザ名フォルダ」(ユーザープロファイルフォルダ)


Windows Server 2003でも実験

ファイル名を指定して実行から
■C:\curdir.vbs  (絶対パスで拡張子の関連付けで実行)
 ⇒「C:\」
■..\..\curdir.vbs  (相対パスで拡張子の関連付けで実行)
 ⇒「C:\」
■WScript.exe C:\curdir.vbs
 ⇒「C:\Documents and Settings\ユーザ名フォルダ」(ユーザープロファイルフォルダ)
■C:\Windows\System32\Wscript.exe C:\curdir.vbs
 ⇒「C:\Windows\System32」
■パスの通っているところ(例えばC:\windows\system32)に
 curdir.vbsを移動してから curdir.vbs (拡張子の関連付けで実行)
 「C:\Documents and Settings\ユーザ名フォルダ」(ユーザープロファイルフォルダ)

【結果】
「ファイル名を指定して実行」では
・最初の要素をパス指定しているときは、カレントフォルダはその絶対パスの位置
・最初の要素をパス指定していないときは、カレントフォルダはユーザープロファイルフォルダの位置
になる。

※多分XPでも同じ結果だと思われます。Vistaはわかりません。

チャチャさんが「ファイル名を指定して実行」で実行したときは
おそらく「C:\Program Files\○○○\△△△.exe」と
絶対パスで書いているでしょうから、
カレントフォルダが「C:\Program Files\○○○」に
自動的に設定されたので、動いたということになりますね。

私にとっても、勉強になりました。ありがとうございました。

チャチャ さん 2007年 07月 11日 21時 46分 42秒

To: a3 さん ビンゴです。(^_^)v

>・まず、リソースファイルを引数指定するというのは
> そのプログラムの仕様でしょうか?
> ※なんとなく、違うような気がします。

どうして良いか解らず、インターネットをさまよいながら、藁をもすがる思いで
手当たり次第に試行錯誤していた訳です。(^^;)

>△△△.exeと×××.dllは同じフォルダに入っているのでしょうか?

はい。同じフォルダです。

>WSHShell.CurrentDirectory = "■DLLのあるフォルダに置き換えて。■"
>WSHShell.Run """C:\Program Files\○○○\△△△.exe""",1,True

これで無事メニューが表示されて起動しました。私には想像もつかないことです。
ありがとうございました。m(_ _)m

a3 さん 2007年 07月 11日 13時 50分 42秒

> チャチャ さん 2007年 07月 10日 15時 18分 09秒

・まず、リソースファイルを引数指定するというのは
 そのプログラムの仕様でしょうか?
 ※なんとなく、違うような気がします。

△△△.exeと×××.dllは同じフォルダに入っているのでしょうか?

×××.dllが以下に示す他のところに”も”あったりすると
本来呼びたいDLLじゃないのが呼ばれているのかも。
・exe ファイルが存在するディレクトリ
・システムディレクトリ
・Windows ディレクトリ
・カレントディレクトリ
・環境変数 PATH に設定されてたディレクトリ
違うところにテスト用DLLとか入っていませんか?

あと、そのプログラムが明示的にカレントディレクトリのDLLを
ロードするように作ってあったりする場合があります。

ためしに
Set WSHShell = CreateObject("WScript.Shell")
WSHShell.CurrentDirectory = "■DLLのあるフォルダに置き換えて。■"
WSHShell.Run """C:\Program Files\○○○\△△△.exe""",1,True

だと、どうですか?

チョコラ さん 2007年 07月 10日 17時 18分 53秒

TO:ちゃっぴさん

回答を頂き、ありがとうございます。

>ということで、Web Application から cmd.exe を扱うような実装はやめましょう。

そうだったんですか・・・。それは知りませんでした。
やりたかったことはaspからexeの実行で、
このexeは標準出力に結果を出力する実行ファイルです。
その出力されたデータを取得したかったんです。
(cmd.exeを使って結果をリダイレクトしてテキストファイルから
取得するつもりでした。)

いろいろ調べ、AspExecコンポーネントを使用することにしました。
本当にありがとうございました!!

チャチャ さん 2007年 07月 10日 15時 18分 09秒

To:管理人さん
>そもそも「ファイル名を指定して実行」などではちゃんと実行されるのでしょうか?

問題なくメニューが表示された状態で起動します。

このソフト、Delhpi で ShellExecute()関数で起動しても同じ状態でしたので
「 WSH なら何とかなるかな?。」と思った次第です。

さやか さん 2007年 07月 10日 14時 51分 47秒

連続投稿ですみません。

アプリケーションを起動し、アクティブ化、sendkeyメソッドを使用したら、
テキストを送信することができました。

タブやENTERキーも送信できるのでログイン処理も問題なくできます。

自己解決のようですが、やり方としてはこれでよいのでしょうか。

さやか さん 2007年 07月 10日 13時 15分 31秒

アプリケーションを起動し、起動したアプリにテキストを
送る方法を探しています。

例えば、メモ帳を開いてそこに文字を入力するとか、
起動したアプリからID、パスワードを求められたら、
そこにID、パスワードを入力する方法など。

過去ログを検索してみたのですが、うまくヒットしなかった
ようなのでこちらに書き込みました。

過去の記事に解決策があるようでしたら、その場所を教えてください。

管理人むたぐち さん 2007年 07月 10日 07時 16分 17秒

先ほど書いた対策は当然ながらセキュリティ的には弱くなりますので、セキュリティとの兼ね合いに十分注意した上で対策を検討してください、と補足しておきます。

To: チャチャさん
うーむちょっとわかりませんねぇ。そもそも「ファイル名を指定して実行」などではちゃんと実行されるのでしょうか?

チャチャ さん 2007年 07月 09日 23時 35分 06秒

管理人さん、ありがとうございます。

>WSHShell.Run """C:\Program Files\○○○\△△△.exe"" ×××.dll",1,True

これでもダメでした。(^_^;)
タイトルが「Preview」 と表示されたダイアログの中に赤丸の×印がでて終了します。
このEXEだけが特別なのかなぁ?。もう少し試行錯誤してみます。

管理人むたぐち さん 2007年 07月 09日 20時 02分 06秒

おっと解決策発見。

http://www3.bigcosmic.com/board/s/board.cgi?id=umiumi&start=40

保護モードを解除すればいいのですね。

管理人むたぐち さん 2007年 07月 09日 19時 49分 19秒

Vistaで

Set objIE = WScript.CreateObject("InternetExplorer.Application")
objIE.Visible = True
objIE.Navigate "http://www.atmarkit.co.jp/index.html"
Do While objIE.Busy
     WScript.Sleep 100
Loop
MsgBox objIE.Document.body.innerText

こんな感じのスクリプトを動かすと、最初IEの窓が立ち上がって、そこからポップアップで(?)指定のURLが別窓で開きますね。
なのでエラーになってしまいます。

何か対処方法ありますでしょうか。
既存のスクリプトが動かなくなるという非常にまずい事態ですね。

管理人むたぐち さん 2007年 07月 09日 10時 52分 58秒

WSHShell.Run """C:\Program Files\○○○\△△△.exe"" ×××.dll",1,True

こうかな?

チャチャ さん 2007年 07月 06日 14時 49分 45秒

プログラムを起動したくて、下記のように書いたのですが、このプログラム
は起動時にメニューをリソースファイル(×××.dll)から読み込んで表示
するようなっていまして、下記スクリプトを実行してもメニューが表示され
ません。
どのようにすれば記述すれば、リソースファイルを読み込んで起動するのか
教えて頂けないでしょうか?。

Dim WSHShell
Set WSHShell=WScript.CreateObject("WScript.Shell")
WSHShell.Run """C:\Program Files\○○○\△△△.exe""",1,True

ちなみに

WSHShell.Run """C:\Program Files\○○○\△△△.exe ×××.dll""",1,True

と書くと

エラー:「指定されたファイルが見つかりません。」
コード: 80070002
ソース: (null)

とエラーが出ます。

ちゃっぴ さん (tyappi@wankuma.com) 2007年 07月 06日 05時 59分 30秒
URL:http://blogs.wankuma.com/tyappi

To チョコラ さん 2007年 07月 04日 15時 42分 12秒

まず、method の定義まで含めてちゃんと書いてください。
で、最初に確認すべき項目はこちら。

[INFO] ASP で実行する Visual Basic コンポーネントの設計ガイドライン
http://support.microsoft.com/kb/243548/ja

で、Web Application から cmd.exe を扱えないように ACL 構成されています。

というのは、cmd.exe の parameter に user からの入力等を渡すと OS command injection の危険性があるからです。

ということで、Web Application から cmd.exe を扱うような実装はやめましょう。

チョコラ さん 2007年 07月 04日 15時 42分 12秒

VB6.0でActiveXDLLを作成し、そのDLLをASPから呼び出したと思っています。

-------------------------------------------------------------------
■ASP
Set objMask = Server.CreateObject("Strmask.ExecMask")
ret = objMask.ExecMask()

■ActiveDLL(VB.6.0)
strCmd = "cmd /c C:\test.exe"

Set WshShell = CreateObject("Wscript.Shell")
WshShell.Run(strCmd, 0, True)
-------------------------------------------------------------------

上記のようにソースを作成し、WEB上から表示させようとしたところ、
フリーズ状態になってしまい結果が返ってきません。
同じDLLをVBから呼び出したところ、正常に動作しました。
いろいろ試してみたのですが、Runのところで止まっているようです。

環境としては
IIS バージョン5.1
OS WindowsXP
です。

あとDLLはレジストリに登録してあります。
ASP、WSHともに初心者で、ネットでもいろいろ調べてはみたものの、
一向にうまく動かず困っています。
何か解決策をご存知の方がいらっしゃいましたら、教えていただけませんか?
よろしくお願いします。

管理人むたぐち さん 2007年 07月 02日 13時 09分 17秒

管理人むたぐちが、Microsoft MVP for Visual Developer - Scriptingに再認定されましたー
これもこの掲示板のみなさんの書き込みがあってこそです。
また今年もよろしくお願いします。

管理人むたぐち さん 2007年 06月 30日 11時 51分 46秒

7/7東京でPowerShellの講演をやります。
newpopsさんと一緒にやるのでかなり濃いイベントになると思います。
お近くの方はぜひどうぞ。

第 5 回 Admintech.jp 勉強会 - Admintech.jp
http://itpro.admintech.jp/wiki/wiki.cgi?page=%C2%E8+5+%B2%F3+Admintech%2Ejp+%CA%D9%B6%AF%B2%F1


To: age さん
ご指摘ありがとうございました。訂正しておきました。


To: palazzo さん

> あれ?win32_productだとMSIでインストールされたアプリしか取れないのでは?

そうでしたか、失礼しました。たしかにそのようですね。

domingo さん (null) 2007年 06月 27日 22時 10分 22秒
URL:null

To ちゃっぴ さん
解答ありがとうございます。
一口にDLLと言ってもいろいろあるんですね・・・

f さん 2007年 06月 26日 13時 52分 49秒

To ちゃっぴ さん

ご回答ありがとうございました。
送信時間ではなく、BASP21のメール作成メソッドの処理時間に問題があった事が判明しました。
BASP21_proトライアル版で試したら、処理時間が1/10になりました。
原因が判明したので、これからproを検討したいと思います!


ちゃっぴ さん (tyappi@wankuma.com) 2007年 06月 26日 01時 32分 08秒
URL:http://blogs.wankuma.com/tyappi/

To f さん 2007年 06月 25日 13時 22分 07秒

> メール容量が増えると送信時間もかかるのでしょうか?

そりゃ、容量が増えれば通信時間が長くなるのでそれだけ時間かかるのは道理でしょう。

内容が同じなら BCC で一括送信するのもありでしょう。

BASP21 自体使わないのでアレですが、非同期でできるなら多少は早くなるかも?
SendMailEx
http://www.hi-ho.ne.jp/babaq/basp21.html#0003

ちゃっぴ さん (tyappi@wankuma.com) 2007年 06月 26日 01時 23分 52秒
URL:http://blogs.wankuma.com/tyappi/

To domingo さん 2007年 06月 22日 09時 12分 35秒

> ところで、こういったDLLと言うのはインストールしないと
> 使えないのでしょうか?
> 参考URL http://homepage3.nifty.com/aya_js/wsh/wsh20.htm
> のようにしては使えませんか?

DLL といってもいろいろ種類があります。
WSH で扱える object は COM component と呼ばれるもので、かつ TypeLibrary が存在していて、registry に PROGID (ex: Scripting.FileSystemObject) といような登録があるものだけです。
# 基本的に registry に登録する必要があるため、install が必須です。
# つまり、file copy だけでは動かないということ。

で、ご質問の rundll32.exe で扱えるものは、rundll32.exe で扱えるような entrypoint で作成する必要があります。
# ちなみにこちらは COM では無いです。

結論からいうと、registry への登録無しには動かないと思います。

さん 2007年 06月 25日 13時 22分 07秒

ここのHPを拝見して、WSHを勉強しました。
サーバーのタスクに作成したVBSファイルを仕掛けて、BASP21のFlushMailメソッドを利用し、メールの一括送信を実行する処理を作成しました。
添付ファイル付メールの送信で、メール1通当たりの容量が20KBだと、100通送信するのに1分弱かかります。ところが1通当たりのメール容量が700KBだと100通送るのに13分かかりました。
同じような処理を作成された事がある方がおりましたら、教えて頂きたいのですが、メール容量が増えると送信時間もかかるのでしょうか?
1時間に1回、この処理を実行するようにしたいのですが、500通を超えると1時間で全てのメール送信が完了しないため困っています。
basp21のHPも調べたのですが、送信処理に対する質問や回答は掲載されているけど、処理時間に対する回避策が載ってませんでした。
また、この処理を仕掛けるサーバーのウィルスチェックも停止して実行してみたのですが、処理時間に変化はありませんでした。
回避策をご存知の方がおられましたら教えて下さい。
よろしくお願い致します。
ここに投稿するのが間違っていたらすみません。。。


domingo さん 2007年 06月 22日 09時 12分 35秒

いつもお世話になっております。
過去ログを読んでて見つけたのですが

------------------------------------------------------------
AKA さん 2005年 12月 24日 06時 27分 12秒
クリップボード機能のオートメーションオブジェクトを作りました。
------------------------------------------------------------

会社の遅いPCでもサクッと動いてくれて重宝しています。

ところで、こういったDLLと言うのはインストールしないと
使えないのでしょうか?
参考URL http://homepage3.nifty.com/aya_js/wsh/wsh20.htm
のようにしては使えませんか?

age さん 2007年 06月 21日 20時 55分 40秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/refer/lesson5.htm

VBS講座・基礎編
Lesson5
http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/refer/lesson5.htm

以下の部分
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
 また、Do...Elseステートメントの部分を次のようにも書くことができます。

Do Until intNumber>10000
     intNumber=intNumber*2
Loop
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

Do...Else じゃなくて、Do...Loop ?

ちゃっぴ さん 2007年 06月 16日 23時 30分 28秒
URL:http://blogs.wankuma.com/tyappi/

To MM さん 2007年 05月 23日 22時 51分 10秒

Windows XP 以降であれば Network Configuration Operators に所属させれば OK です。

ちゃっぴ さん 2007年 06月 16日 23時 28分 06秒
URL:http://blogs.wankuma.com/tyappi/

To HELP さん 2007年 02月 08日 14時 10分 24秒

WSH でなくてもよいのであれば、CSVDE とか LDIFIDE が使えるでしょう。
# 前者ではできないことがあります。

WSH でゴリゴリやりたいのであれば ADSI を使います。

ちゃっぴ さん 2007年 06月 16日 23時 20分 01秒
URL:http://blogs.wankuma.com/tyappi/

To ゆき さん 2007年 06月 08日 21時 48分 07秒

これまじめにやるとかなり面倒なことになるんですよね。

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

だけじゃすまないので。

HKCU の方もありますし。

本来は appwiz.cpl 自体が COM なんでその interface を利用するのが確実なんですが、これにしたって undocumentted なんで将来の対応が保障されているわけでは無いですし。

また、appwiz.cpl の COM interface は C++ で wrapper してやらないと WSH からでは直接扱えませんしね〜。

palazzo さん 2007年 06月 12日 22時 48分 58秒
URL:http://maglog.jp/pueblo-del-script/

あれ?win32_productだとMSIでインストールされたアプリしか取れないのでは?Win32_SoftwareFeatureでもインストール情報らしきものは取得できますが、ここはレジストリから取得した方が無難ではないでしょうか。ネットを検索していると、ここにそれらしきソースがありまして、私の環境で実行してみたところ、特に問題なく動作しました。(Win2K SP4+WSH5.6)

ttp://www.microsoft.com/japan/technet/scriptcenter/resources/wmifaq.mspx#ECPAC

よろしければ試してみて下さい。ちなみにwin32_productって第3引数に48を指定してもパフォーマンスが上がらないですね。私の環境だけでしょうか。

管理人むたぐち さん 2007年 06月 09日 23時 56分 58秒

To: ゆきさん

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")

Set colProducts = objWMIService.ExecQuery( _
"select * from win32_product")
For Each objProducts in colProducts
WScript.Echo objProducts.Caption
Next

このようにWMIを使えば可能です。EchoしているところはTextStreamに置き換えるとテキストファイル出力が可能です。詳しくはLesson15あたりをどうぞ。

# うちの環境ではなぜか一つしか表示されないのですが…orz

ゆき さん 2007年 06月 08日 21時 48分 07秒

vbsで、コントロールパネルの アプリケーションの追加と削除 で表示されている内容をテキストに落としたいと思っています。
可能でしょうか?

hiro さん 2007年 06月 08日 00時 44分 43秒

ありがとうございました。だいたいわかりました。この部分はCurrency型に型変換するようにします。

管理人むたぐち さん 2007年 06月 08日 00時 30分 29秒

To: hiroさん
浮動小数点を扱った掛け算は誤差が発生することがあります。

日経PC21 / 演算誤差の正体 - IEEE 754 浮動小数点数の仕組み
http://pc.nikkeibp.co.jp/pc21/special/gosa/eg4.shtml

ここを読むとわかるかもしれません。

VBScriptにはCurrency型というのがありますのでキャスト(型変換)して、
msgbox int(CCur(0.29)*CCur(100))
とすると結果は「29」になります。

hiro さん 2007年 06月 08日 00時 05分 01秒

WSHで、msgbox int(0.29*100) を実行すると28が出力されるのですが。

それ以外の、例えば0.28とか0.30では問題ありません。なぜでしょうか?

【おじさま】 さん 2007年 06月 01日 12時 05分 24秒

>たかただ さん

もしかしたら拡張子が vbs になっていないのではないですか(違っ
ていたらすみません)。

>「定義されているジョブがありません」

このエラーは、本来は vbs や js にする筈のスクリプトファイルの
拡張子を wsf 等にした場合に出るケースがあるようです。
確かに vbs や js よりも wsf の方がいかにも WSH のファイルと
いう感じのする拡張子ですし。

ちなみに、たかただ さんが書かれたソースの拡張子を vbs にして
実行すると、私の環境では問題なくメモ帳が起動しました。

たかただ さん (takatada72@hotmail.com) 2007年 05月 31日 10時 54分 19秒
URL:サンプルが起動できませんでした。

お世話になります。 
WSHが全く判らない状態から勉強しております。

下記のような簡単なものが起動できません。
「定義されているジョブがありません」のエラーがでます。
何がいけないのでしょうか? ご指導下さいませ。

OS:windows xp sp2
IE6.0
Office 2003
-------------------------------------------------------
Dim WshShell
Set WshShell = Wscript.CreateObject("Wscript.Shell")
WSHShell.Run "C:\Windows\notepad.exe"
※エクスプローラーでC:\Windows\notepad.exe を入力すると起動します。

ますのすけ さん 2007年 05月 28日 23時 19分 48秒

> a3 さん 2007年 05月 28日 12時 26分 39秒

resありがとうございます。

Excelを終了させた後に、以下のスクリプトを入れています。
-----------------------------------------------------------------
Set objWShell = WScript.CreateObject("WScript.Shell")
objWShell.Run "アプリA.exe"
Set objWShell = Nothing
-----------------------------------------------------------------

よろしくお願いいたします。

a3 さん 2007年 05月 28日 12時 26分 39秒

> ますのすけ さん 2007年 05月 26日 13時 52分 19秒

既存の資産をうまく利用するという観点では良いアイデアですね。

>(2)アプリAを起動してファイルA.csvを読み込む。
の部分を現在どうやって実装していますか?

それによって、回答が変わりますので、も少し情報をだせますか?

たぶん、
・バッチファイルの中で提示スクリプト実行後、アプリAを実行。
・提示スクリプトの後ろに追加でアプリAを実行のコマンドをいれた。
のいずれかだとは思いますけど。(前者かな?)


Return