Nomura さん 2002年 05月 22日 20時 57分 45秒

あいざわ様
10日前の書き込みを気に掛けていただいてありがとうございます。
さて、現在のところまだ解決策が見つかりません。

結局インターネット用CABファイルの作り方について
私が理解できていないところも多分に(いや殆ど 笑)あるのですが。。。
CABファイルが正しく製作できたら、ユーザーがダウンロード途中で
キャンセルした場合は別としてその他はOKになるのですが。。。

というのはどういうことかというと、myOCX.ocxの内部には更に
サードパーティ.ocxが包含されています。
そのサードパーティー.ocxが動くためには、
15種類のファイル(DLLなど)が正しくsystemフォルダに入り、
レジストリ登録がされないといけません。

しかも、そのmyOCX.ocxは設定をレジストリに保存しており、
UserControl_Initializeイベントで設定をレジストリから
読み出します。すなわち、
CABファイルを読み込んでインターネットダウンロードすると
同時にユーザークライアントのレジストリへ書き込ませないと
いけません。

CABファイルでこれをやる方法がわからなくて困っています。

このレジストリの扱いが何とかなれば、ユーザーのダウンロード
キャンセルは まぁ無視しても容認できるのですが。。

って書いているうちに、論点がCABファイルの作り方になって、
WSH Lab掲示板とは外れてきました。ごめんなさい。

WMIが使えないか?とも思って調べてみたのですが、
MSDNで読む限り
Win32_Registryでは特定のキー(例えば\SOFTWARE\MYREGISTORY)
とかにはアクセスできないように見えます。
とはいえ、自分の知識不足で実はできたりするのかもしれませんが。

あいざわ さん 2002年 05月 22日 20時 17分 42秒

to:Nomuraさん
10日も前の書き込みを見ていたのですがちょっと気が付いたので。
基本的に課題とされているのはmy.OCXを登録することですよね?
だとしたら環境はイントラネットということなのでログオンスクリプト中で
登録したらいかがでしょうか?
ネットワークの環境の詳細が不明ですがドメインを組んでいるかActive
Directoryを構成しているならASPを使うより簡単に登録できると思います。
my.OCXが登録されたかどうかもスクリプト中で判断できると思うし。

はずしていたらすみません。

yoka さん 2002年 05月 22日 19時 19分 42秒

飛び先は同じでした

大変失礼しました

yoka さん 2002年 05月 22日 19時 15分 58秒

あいざわさん 

msのサイトありがとうございます
ちなみに、私は、下記で見たのですが、長すぎるのでアップを控えました

http://search.microsoft.com/default.asp?qu=RecordsetClone&boolean=ALL&nq=NEW&so=RECCNT&ig=01&ig=02&ig=03&ig=04&ig=05&ig=06&ig=07&ig=08&ig=09&ig=10&ig=11&ig=12&i=00&i=01&i=02&i=03&i=04&i=05&i=06&i=07&i=08&i=09&i=10&i=11&siteid=japan

改行注意?

違いは分りませんが、とりあえずアップさせていただきました

あいざわ さん 2002年 05月 22日 18時 17分 21秒

to:yokaさん
>あいざわさん どうもありがとうございました
どういたしまして。
こちらが恐縮してしまうくらい丁寧にご返事いただいて...
お返しといっては何ですがマイクロソフトのサイトというのは
http://www.microsoft.com/japan/msdn/default.asp
です。このサイトに移ってから検索していただければヒットしますので。

yoka さん 2002年 05月 22日 17時 21分 32秒


あいざわさん どうもありがとうございました

>マイクロソフトのサイトで

>explorer コマンドライン
>wsh sendkeys

>で検索をかけてみてください。

google等で検索してみたのですが、多すぎたりして
うまく引っ掛けることが出来ませんでした

適切なキーワードと検索対照のhpのご指示で

過去ずっと知りたかった情報を得ることが出来ました


教えて頂いたコードは、当方では


>WSHShell.Sendkeys "%V"

では、

フォルダーウインドウ?を表示させることが
出来ませんでしたが

>WSHShell.Sendkeys "V"
で、うまく、フォルダーウインドウ?が表示出来ました

なぜか、まだ理解出来ていませんが
上記を参考に勉強して行きたいと思います

色々どうもありがとうございました。

今後もよろしくお願い致します




(管理人により削除) さん ((管理人により削除)) 2002年 05月 22日 16時 47分 07秒
URL:(管理人により削除)

(管理人により削除)

あいざわ さん 2002年 05月 22日 16時 25分 07秒

to:yokaさん
>あいざわさん こんにちは
こんにちわ。

>WSHShell.Run "explorer.exe /e,/root,c:"
>でうまく出来ました
お役に立てて何よりです。
補足ですがマイクロソフトのサイトで
explorer コマンドライン
で検索してみてください。たぶん最初にヒットする,文書番号JP152457に詳しい説明があります.

(略)
>ご指導を頂く前にSendkeysで考えてみたのですがうまく出来ませんでした
>こちらについてもアドバイス頂ければうれしいです
いや、ご指導するほど詳しいわけではないのですよ。

>var obj = Wscript.CreateObject("explorer.Applivation")
>Set WSHShell = Wscript.CreateObject("Wscript.Shell")
>WSHShell.Run "explorer.exe C:"
>obj.Sendkeys "(V)"
>obj.Sendkeys "(E)"
>obj.Sendkeys "(O)"

SendkeysメソッドをもっているのはWSHShellオブジェクトなのでこうなります。

Set WSHShell = Wscript.CreateObject("Wscript.Shell")
WSHShell.Run "explorer.exe C:"
WScript.Sleep 500
WSHShell.Sendkeys "%V"
WScript.Sleep 500
WSHShell.Sendkeys "E"
WScript.Sleep 500
WSHShell.Sendkeys "O"

詳しい説明は省きます。この掲示板の過去ログにもSendkeysメソッドについて
記述がありますから探してみてください。
あるいはやはりマイクロソフトのサイトで
wsh sendkeys
で検索をかけてみてください。

yoka さん 2002年 05月 22日 14時 40分 10秒

あいざわさん こんにちは

WSHShell.Run "explorer.exe /e,/root,c:"
でうまく出来ました
また
WSHShell.Run "explorer.exe /e,c:"
とは、動作が異なるのですね
rootが、入るとcのみ見せるのですね

ありがとうございました

ご指導を頂く前にSendkeysで考えてみたのですがうまく出来ませんでした

こちらについてもアドバイス頂ければうれしいです

var obj = Wscript.CreateObject("explorer.Applivation")
Set WSHShell = Wscript.CreateObject("Wscript.Shell")
WSHShell.Run "explorer.exe C:"
obj.Sendkeys "(V)"
obj.Sendkeys "(E)"
obj.Sendkeys "(O)"

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





あいざわ さん 2002年 05月 22日 13時 14分 28秒

to:yokaさん

WSHShell.Run "explorer.exe /e,/root,C:"

でどうでしょう?

yoka さん 2002年 05月 22日 11時 15分 53秒

お世話になります

早速質問ですが
vbsでエクスプローラを開きたいのですが

Set WSHShell = Wscript.CreateObject("Wscript.Shell")
WSHShell.Run "explorer.exe C:"

で、c:を表示できるのですが
これに加えて
メニューの
表示/エクスプローラバー/フォルダで表示される
フォルダーウインドウ?を表示させることが出来ません

上記にどのような記述を加えればよいのでしょうか
よろしくお願い致します


初心者 さん 2002年 05月 22日 09時 40分 41秒

たるさんありがとうございました。
マクロ起動しました。
また参考にさせていただきました、
あんのうんさん、ちぇりーさんにも感謝しています。

VBAマクロの仕様は
Public Sub form_show()
UserForm1.Show
End Sub

VBSスクリプトの仕様は
dim objXL
set objXL = Wscript.createobject("excel.application")
objXL.Visible = true
objXL.Workbooks.Open "D:\txtdata\excel-test-pgm11.xls"
objXL.Sheets("Sheet1").Select
−−−−−以下中略−−−−−
objXL.Run "form_show"

テキストとヘルプの件も調べてみます。
いろいろありがとうございました。



たる さん 2002年 05月 21日 22時 13分 26秒

To: 初心者 さん

> エクセル中にVBAのフォームエントリーマクロ
> があるのですが、VBSでそのVBAのマクロも
> 同時に起動させることは可能なのでしょうか。

40-15 あんのうん さん のサンプルなんかいい例だと思います。

その件の確認を含めて少しテストした所、これモーダルフォームを呼び出すとVBS側を待たせるんですね。
モードレスだと同時に動くんです。VBみたいに使えてかつ、違う使い方もありそうでちょっと収穫。

> またVBS/VBAを勉強するには
> どうしたらいいか何かいいテキストでもあれば
> 紹介していただけませんでしょうか。
以前にExcelヘルプは紹介されていたので、ちょっと変わった利用法を。。
IEのアドレスにたとえば下記の文字列を入れるとCollectionオブジェクトのヘルプが表示されます。
mk:@MSITStore:C:\PROGRA~1\COMMON~1\MICROS~1\VBA\VBA6\1041\VbLR6.chm::/html/vaobjcollection.htm
こうやって、一意な情報にポイントするのも手かな?チルダつきなのが他の人に教えるにはちょっと厄介だけど。

VBAの書籍としてはお勧めなのは、
「開発者のためのExcel97VBAプログラミングガイド」
http://books.rakuten.co.jp/moug/NS/CSfLastGenGoodsPage_001.jsp?GOODS_NO=991598
これはいい本だと思います。基礎をわからずに読んでとりあえず書いて動かした覚えがあります。
オブジェクトの理解が増えたらまた読み返しましたけどね。

初心者 さん (m-sakaguchi@kido-corp.com) 2002年 05月 21日 13時 45分 37秒

VBSでエクセルを起動させています。
エクセル中にVBAのフォームエントリーマクロ
があるのですが、VBSでそのVBAのマクロも
同時に起動させることは可能なのでしょうか。
スクリプトは以下のようになっています。

dim objXL
set objXL = Wscript.createobject("excel.application")
objXL.Visible = true
objXL.Workbooks.Open "D:\txtdata\excel-test-pgm11.xls"
objXL.Sheets("Sheet1").Select

以下略

マクロ名は form_show で今はエクセル起動後に
メニューから選んで起動させています。
名前のとおり初心者ですので
基本的なことがわかっていないと思います。
どなたかよろしくお願いします。

またVBS/VBAを勉強するには
どうしたらいいか何かいいテキストでもあれば
紹介していただけませんでしょうか。
よろしくお願いします。



Nomu さん 2002年 05月 21日 12時 39分 38秒

Yuutaさんへ
>objXL.ActiveWorkbook.SaveAs filename="c:\My Documents\Excel01.xls"
この書き方はVBAの名前付き引数をイメージしていると思います。
さて、名前付引数ならば filename:= でコロンが必要だったのでは?

但し、名前付き引数の場合は()で囲む必要があったような気がします。
(うろ覚え)

それから、VBScriptからは名前付き引数が抜本的に無理だったような
気がします。過去に同じくExcelのVBAを呼び出すVBScriptで名前付き引数が
通らなかった記憶があります。(私のやり方がまずかった
可能性は否定しきれません。)

いずれにしても、名前付き引数ではなく素直に書いて試してみては?

おれおん さん 2002年 05月 21日 12時 33分 06秒

Yuutaさん

VBScript では名前付き引数は使えないので

objXL.ActiveWorkbook.SaveAs "c:\scr\Excel01.xls"

とします。また False というファイル名は

filename = "c:\scr\Excel01.xls"

を論理演算した結果の False が返っているのでしょう。


あいざわ さん 2002年 05月 21日 12時 05分 15秒

to:藤宮 さん
リモートスクリプト実行のための設定はされていますか。
今手元で確認はできないのですが

1.DCOMの設定
2.実行マシンでの管理者権限の登録
3.レジストリの変更

が必要です。

記事リスト28-36 管理人むたぐち 2001/01/18 11:20
記事リスト28-46 管理人むたぐち 2001/01/21 20:41
記事リスト33-26 管理人むたぐち 2001/03/28 17:39
記事リスト60-48 あいざわ 2002/04/15 12:53

あたりを参考にしてみてください。

Yuuta さん 2002年 05月 21日 10時 57分 09秒

VBSからVBAを実行するときのことで誰か知っていましたら教えてください。

下記のスクリプトを実行するとexcelファイルを保存時に指定したファイル名ではなくFALSE.xlsとなってしまうのですが、指定したファイル名(Excel01.xls)にするにはどのようにしたらいいでしょうか?!

---------------
Set objXL = WScript.CreateObject("Excel.Application")

objXL.Visible = "true"
objXL.WorkBooks.Add()

objXL.ActiveWorkbook.SaveAs filename="c:\My Documents\Excel01.xls"
objXL.Application.Quit

WScript.Quit
---------------

よろしくお願いします。

藤宮 さん 2002年 05月 20日 17時 25分 38秒

先ほどの書込みで、どこでエラーになっているのか、動作環境は?
ちょっと説明不足だったと思います。

WSHControllerオブジェクトのCreateScriptメソッドの行です。

ちなみに動作環境は、
Windows2000(SP2)+IE6+WSH5.6 です。

藤宮 さん 2002年 05月 20日 13時 55分 32秒

こんにちは。
WSHを調べているうちに、こんな素晴らしいサイトに出会いました。
私はVBS初心者なのですが、仕事の要件を満たすために、毎日悪戦苦闘しています
過去のログも拝見させていただきました。勉強になることがかなり書かれていて
一財産のようになっていますネ(^o^)。

書込みをさせていただいたのは、どうしても分からないことがあるからなんです。
クライアント側からサーバー側スクリプトを実行するリモートスクリプトが
どうしてもうまくいきません。

具体的には・・(この例では、ローカルで実行させています。うまくいきませんが・・)

Dim WshCntl
Dim RmtScript

Set WshCntl = WScript.CreateObject("WSHController")
MsgBox "変数の型: " & VarType(WshCntl) & _
"型名: " & TypeName(WshCntl),0,"Object Info"
Set RmtScript = WshCntl.CreateScript("D:\Msgbox.vbs")
RmtScript.Execute()

"D:\Msgbox.vbs"は、メッセージボックスを表示させるだけの単純なものです。
実行すると、変数の型: 9 型名: IWSHController と表示され、
参照型で、インターフェイスが正常に返されていることがわかります。
オブジェクトブラウザや、OLEVIEW.exeでWSHControllerオブジェクトを
確認したのですが、しっかりとCreateScriptメソッドを持っています。

それなのに、
実行時エラー ActiveXコンポーネントはオブジェクトを作成できません
と言われます。

一体何が気に入らないのでしょうか?どなたか、ご教授いただけると幸いです。
これからも、このサイトで勉強させて頂ければと思います。

たる さん 2002年 05月 19日 21時 14分 17秒

自己レス>>62-05

>ウチには確かめる環境がないので
機会があったので試してみました。
Win98(NotSE)
NT4.0
だめでした。この方法ではコモンダイアログを使うことが出来ませんでした。
お目汚しすいませんでした。
少し得意なってカキコしたのですが、出来なくてがっくし。

HP011(-1) さん 2002年 05月 18日 02時 04分 58秒

ごめん訂正。

Dim Ws, rKey(9)
rKey(0) = "HKLM\System\CurrentControlSet\Control\FileSystem\ConfigFileAllocSize"←追加
rKey(1) = "HKLM\Software\Microsoft\Windows\CurrentVersion\explorer\AlwaysUnloadDLL"
rKey(2) = "HKLM\Software\Microsoft\Windows\CurrentVersion\explorer\MaxCachedIcons"
rKey(3) = "HKLM\System\CurrentControlSet\Services\Class\fdc\0000\ForceFIFO"
rKey(4) = "HKLM\System\CurrentControlSet\Services\VxD\BIOS\AGPConcur"
rKey(5) = "HKLM\System\CurrentControlSet\Services\VxD\BIOS\CPUPriority"
rKey(6) = "HKLM\System\CurrentControlSet\Services\VxD\BIOS\FastDRAM"
rKey(7) = "HKLM\System\CurrentControlSet\Services\VxD\BIOS\PCIConcur"
rKey(8) = "HKLM\System\CurrentControlSet\Services\VxD\BIOS\Start"
rKey(9) = "HKLM\System\CurrentControlSet\Services\VxD\BIOS\StaticVxD"

Set Ws = Createobject("WScript.Shell")
Ws.RegWrite rKey(0), 100,"REG_DWORD" 'ベンチを見ながら合わせてみる←訂正
Ws.RegWrite rKey(1), 64,"REG_DWORD" 'アプリケーション終了時DLLを解放←訂正
Ws.RegWrite rKey(2), "1024" 'キャッシュアイコンの肥大防止
Ws.RegWrite rKey(3), "0" '3.5FDのパフォーマンス設定
Ws.RegWrite rKey(4), 1,"REG_DWORD" 'AGP優先度引き上げ
Ws.RegWrite rKey(5), 1, "REG_DWORD" 'CPU優先度引き上げ
Ws.RegWrite rKey(6), 1, "REG_DWORD" 'メモリの引き上げ
Ws.RegWrite rKey(7), 1, "REG_DWORD" 'PCIバスの引き上げ
Ws.RegWrite rKey(8), 0, "REG_BINARY" 'Bios.vxdの読み込み指定
Ws.RegWrite rKey(9), "*BIOS" 'Bios.vxdの読み込み指定

HP011 さん 2002年 05月 18日 01時 52分 28秒

マイクロソフトとか本とか探して見たんだけれど、名無しさんみたいな
具体例は探せなかったです。過去ログに参考が出ていたとは(汁

既出でしょうけど、練習にWin9X系のパフォーマンス設定(標準未設定)を
スクリプト書いてみました。利用する人はレジストリのバックアップを
とって下さい。

スタート → 検索で Bios.vxd を探して下さい。
無いときは次のファイルから抽出出来ます。(Sfc.exeが楽)
再起動かける前に SYSTEM\ に放り込んで下さいねっ。

Win Me :BASE3.CAB
Win98SE:BASE6.CAB

日々精進。

Dim Ws, rKey(9)
rKey(1) =
"HKLM\Software\Microsoft\Windows\CurrentVersion\explorer\AlwaysUnloadDLL"
rKey(2) = "HKLM\Software\Microsoft\Windows\CurrentVersion\explorer\MaxCachedIcons"
rKey(3) = "HKLM\System\CurrentControlSet\Services\Class\fdc\0000\ForceFIFO"
rKey(4) = "HKLM\System\CurrentControlSet\Services\VxD\BIOS\AGPConcur"
rKey(5) = "HKLM\System\CurrentControlSet\Services\VxD\BIOS\CPUPriority"
rKey(6) = "HKLM\System\CurrentControlSet\Services\VxD\BIOS\FastDRAM"
rKey(7) = "HKLM\System\CurrentControlSet\Services\VxD\BIOS\PCIConcur"
rKey(8) = "HKLM\System\CurrentControlSet\Services\VxD\BIOS\Start"
rKey(9) = "HKLM\System\CurrentControlSet\Services\VxD\BIOS\StaticVxD"

Set Ws = Createobject("WScript.Shell")
Ws.REgWrite rKey(1), 100,"REG_DWORD" 'ベンチを見ながら合わせてみる
Ws.REgWrite rKey(2), "1024" 'キャッシュアイコンの肥大防止
Ws.REgWrite rKey(3), "0" '3.5FDのパフォーマンス設定
Ws.REgWrite rKey(4), 1,"REG_DWORD" 'AGP優先度引き上げ
Ws.REgWrite rKey(5), 1, "REG_DWORD" 'CPU優先度引き上げ
Ws.REgWrite rKey(6), 1, "REG_DWORD" 'メモリの引き上げ
Ws.REgWrite rKey(7), 1, "REG_DWORD" 'PCIバスの引き上げ
Ws.REgWrite rKey(8), 0, "REG_BINARY" 'Bios.vxdの読み込み指定
Ws.REgWrite rKey(9), "*BIOS" 'Bios.vxdの読み込み指定


HP010(+1) さん 2002年 05月 18日 00時 15分 42秒

>>2002/05/17 22:03:26の名無しさん wrote:

>>値を"1"にしてみるゥ → "0000 00 01" ふーん
これは 0000 01 00 の間違いですよね

 そうでした(汗


On Error Resume Next
MsgBox "僕にもできたぁ・・・丁寧にありがとうございました。"_&
, 0,"感謝"

Sub Jump(お前ら、WSH使ってますか?)
If Left(お前ら、WSH使ってますか?, 5, 3) = _&
"出来るようになったら" Then
Age = "感動する"
End If
Next
End Sub

WScript.Echo "Thank You!!"

名無し さん 2002年 05月 17日 22時 03分 26秒

To: HP010さん

CLng(0)とすれば4バイト分書き込まれましたよ
むたぐちさんの2000/06/29 00:34:46の書き込みが参考になります
因みに 28 00 00 00 = &H00000028 = CLng(40)
A0 86 01 00 = &H000186A0 = CLng(100000)
>値を"1"にしてみるゥ → "0000 00 01" ふーん
これは 0000 01 00 の間違いですよね

HP010 さん 2002年 05月 17日 01時 00分 29秒

>>11さんへの質問

書き換えたいと思ったレジストリのキー以下に"0000 XX XX XX XX"という
バイナリ値が含まれてまして、この値を"0000 00 00 00 00"にしようと
スクリプトをこさえた訳ですがゥ・"0000 00 00" でした(澁宀;)
'
'======================================
' 〜へのショートカット表示を消してみる
'======================================
'
Dim Ws
Set Ws = CreateObject("WScript.Shell")
Key = "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\link"

Ws.RegWrite Key, 0, "REG_BINARY"
'
'
桁が足りないのかなぁ?! まぁ良いャ。

値を"1"にしてみるゥ → "0000 00 01" ふーん
じゃあゥゥゥ・ " 10" → "0000 0A 00" なるほど

それではゥゥ・ "100" → "0000 64 00" ふーん
こうするとゥ・ "101" → "0000 65 00" (澁宀;)

????ゥゥゥゥゥゥゥ・ → "0000 64 01" じゃねぇのかっ
中略

うりゃぁゥ・"100000" → "0000 A0 86 01 00"

散々やった馬鹿 → 法則掴めず → 萎れる
初期値"0000 28 00 00 00"もセットできねぇゥ・

11さーん。どうかおせぇてくだせぇ、おねげぇすますだ。

たる さん 2002年 05月 15日 21時 52分 45秒

To: freedom さん

> VBSを使ってメールを送ることは可能ですか?
> 例えば、指定された処理が行われると、決まったアドレスに固定内容の
> メールが送信されるといった感じ。

62-03に書いたばっかりですので、そのSendMailって言う自作関数を参照してください。
BASP21はここ
http://www.hi-ho.ne.jp/babaq/
これ以上を望むのは、
結果重視のコンポーネントクライアント指向プログラミングとしては畑違いになりますのでどうか勘弁を。

freedom さん 2002年 05月 15日 10時 00分 58秒

VBSを使ってメールを送ることは可能ですか?
例えば、指定された処理が行われると、決まったアドレスに固定内容の
メールが送信されるといった感じ。

よろしくお願いします。

トラ さん 2002年 05月 14日 23時 28分 30秒

Nomura様
そうです。スクリプト自体のフルパスです。
>strAnswer = WScript.ScriptFullName
しかしこんな便利なものがあったとは・・・。
知らないということは恐ろしいですね。
本当に勉強になりました & 助かりました。
ありがとうございました。

Nomura さん 2002年 05月 14日 11時 05分 52秒

トラさんへ
>D&Dで引数のファイルを渡されて起動したVBS自体の
>パスって取得できますでしょうか?
本日、私も同じ問題に直面し、悩んだところ、下のサンプルで
スクリプトのフルパスが取得されます。
課題はドラッグ&ドロップされたファイルではなく、
スクリプト自体のフルパスでいいんですよね!

Dim WshShell   ''' As WSH
Dim strAnswer ''' As String

Set WshShell = WScript.CreateObject("WScript.Shell")
strAnswer = WScript.ScriptFullName

Nomura さん 2002年 05月 13日 11時 23分 14秒

SIGNAL9様
>aaa.asp側では呼び元がmyOCXか否かを判定(myOCXでUSER_AGENTを
>セットなど)

今回の仕様に直接使用できるかどうかは検討してみますが、
例え今回は×でも、この手法は何かと応用がききそうですね。
大変参考になりました。ありがとうございました。

K2104 さん 2002年 05月 11日 23時 11分 12秒

すごい参考になりました。
おかげでVBSの大体のイメージができました。

あと、2chのスレも見ました。
すごすぎです。

SIGNAL9 さん 2002年 05月 10日 09時 13分 03秒

>Nomuraさん

どういう仕様のOCXなのかよく分からないので(RFC1867?WebDAV?)、
ご要望にあうかどうか分からないですが、myOCX内部でaaa.asp(か、
切り分けを行うサーバスクリプト)を呼び出すというのでは駄目でしょ
うか。
aaa.asp側では呼び元がmyOCXか否かを判定(myOCXでUSER_AGENTを
セットなど)し、単なるブラウザだったら、downloadページにリダイ
レクト…とか。

たる さん 2002年 05月 09日 23時 03分 58秒

To: おーば さん

> 3. サーバー側で別プロセス(多分WSH)を起動して、DBにアクセスしながら
> 数時間かかる統計処理データを作成。
定石としては、VBでアプリを作って(EXE)シェル実行というのが良いんでは?
WSHでやるにはIWAM_<machinename>にAdministorators権限与えないといけないし。
ActiveXEXEでも確か権限問題は発生したような。(すみません未確認)。


Nomura さん 2002年 05月 09日 13時 06分 48秒

多分無理だとは思いますが(やろうとしていることが結局
ウィルスと同じ行為になってしまうので。。。)、
一応、ダメモトで教えてください。

<========= 動作環境 =================================>
【サーバ】IIS5.0
【クライアント】IE5.0以上に限定
【ネットワーク】イントラネット 但し、各ユーザーの
        ActiveXのダウンロード、実行に関するIEの設定は
        一定ではなく、人によっては無条件にOK,人によっては
        ダイアログにより確認 など設定はバラバラ。

<===== 実現したいこと ================>
ユーザーに自分が作成したmy.OCXがダウンロードされているかどうかで
飛ばすASPのページを振り分ける。(以下はプログラムではなくロジック)
if ( ダウンロード済み) THEN GOTO aaa.asp else downloadpage.asp

aaa.asp ではmy.OCXを使ってファイルのアップロードを行う。
downloadpage.aspには必要なOCXが
ダウンロードできるようなHTMLが
記述されている。

<===== 課題 ================>
(1)OCXがインストールされているディレクトリは一定である。
   しかし、サーバーからそのユーザーマシンのディレクトリに
   対してDirみたいな真似をしてファイルシステムにアクセス
   できるわけがない。(それができるなら、そのページに
   アクセスした瞬間にめちゃくちゃにファイルを消したりする
   ウィルスが簡単に作れてしまう。)もし、ユーザーサイドに
   FTP用公開フォルダがあれば、それに対してアクセスすることは
   可能だろうが、それを期待することは無理。(ですよね?)

(2)OCXのCLSIDもわかっているが、同じくユーザーサイドのローカル
   レジストリにアクセスしたりすることもできない。(ですよね?)

(3)aaa.aspにObjectタグでActiveXのCLSIDを記述し、
   同時にCODEBASE=....とかVersionを指定して
   自動ダウンロード、自動アップデートをすることが可能なことも
   理解しているが、いかんせん、ユーザーがこのActiveXのダウンロードは
   やめとこう!とキャンセルボタンを押したらダウンロードはされない
   ままになってしまう。この時該当ページでは本来my.OCXが表示されるべき
   エリアが空白状態となる。

(4)サーバーサイドから送り込んだaaa.aspをユーザーがmy.OCXを含めて
   最後まで正常に表示されたかどうかを、知る方法はありますか?
   理想的にはaaa.aspを送り込むその前にmy.OCXの存在の有無を知りたい
   のですが。。。。

(5)でも、(4)はどう考えても無理そうなので、
    (サーバーは元々サーバーサイドスクリプトからHTMLを生成して
     送り込む役目であり、ユーザーがそれを中止するのか、最後まで
     ちゃんと表示されるまで待つのかは、HTMLの仕組み上、
     モトモトサーバーが関与するところではない)
   せめてクライアントサイドスクリプトで
   正常表示されたらそのまま、
   正常表示されなかったら document.href = "download.asp";
みたいな真似がしたいのですが、、、

   画像ならonAbortとかonErrorがあるみたいですけど。。。


    長い質問になりましたが、よい知恵があれば拝借させてください。



イチニイ さん 2002年 05月 08日 19時 05分 36秒

To: shobohn さん

> hh -decompile [デコンパイルされたファイルを展開するフォルダ] [対象の*.CHM]
> で、デコンパイルできますよ。

全然知らなかった。
MS標準の物で出来たとは…。
結局どちらも、思うように使えないまま、
HDのゴミと化しましたが…。(笑)

おーば さん 2002年 05月 08日 16時 10分 13秒

ASP を経由した非対話的バッチ処理の定石?

先日は回答いただきありがとうございました。

今度はこんなことやろうと思ってます。ご意見お聞かせください。
1. ユーザーにフォームから必要事項を記入してもらってSubmit。
2. サーバーは、とりあえず「受け付けました」ページを送信。
3. サーバー側で別プロセス(多分WSH)を起動して、DBにアクセスしながら
数時間かかる統計処理データを作成。
4. 完了したら、ユーザーにメールで「できたよ。どこどこを見て」と通知。

3. と 4. について、BASP21 を使えば容易にできることは知っています。
ただ、2. と 3. について、Microsoft で用意している ASP の枠組みの中で
実現可能だったり、私が知らない定石的な手法があるかどうか知りたいのです。
要はノンブロックの外部プロセス実行か、それと同等な機能です。
2. について、ASP コード中で重たい処理をやらせると、Response.End を
呼ぶと以降のコードも実行されないし、かといって呼ばないと地球がくるくる
回りっぱなしでよろしくないし、Server.Execute もまた機能が異なるし...

ご意見よろしくお願いします。

さざなみ さん 2002年 05月 08日 13時 16分 06秒

さざなみです。
レス、ありがとうございます。

>チャブーンさん

>どんな風にものを動かしたいのかはわからないですが、VBAベタなら
>Workbooks("book.xls").Worksheets("sheet").Activateなんて指定になり
>そうです。

ありがとうございます。
Workbooksオブジェクトを作成しなければ
使えないことがわかりました。

>むたぐち さん
>VBAのヘルプが一番充実してるんじゃないですかね。
>当たり前ですけど(^^;
ありがとうございます。さっそくVBAの本を購入させていただき
ました。
まだ、WSHを始めたばかりで何もわかっていない
初心者ですが、これからもよろしくお願いいたします。

トラ さん 2002年 05月 08日 10時 54分 24秒

いつもお世話になっております。
めざせ脱・初心者でがんばっております。
D&Dで引数のファイルを渡されて起動したVBS自体の
パスって取得できますでしょうか?
カレントディレクトリを取得しようとすると
c:\になってしまいます。(VBS本体はc:\test\scriptの下)

shobohn さん 2002年 05月 07日 00時 28分 40秒

To: イチニイ さん

もう解決されてるようですが、

> hh.exeって、MSの標準ツールですか?

標準ツールっていうか、*.chmが関連付けられてる(ハズの)exeなんですが。
DOSプロンプトか「ファイル名を指定して実行」から

hh -decompile [デコンパイルされたファイルを展開するフォルダ] [対象の*.CHM]

で、デコンパイルできますよ。

イチニイ さん 2002年 05月 06日 18時 24分 49秒

To: shobohn さん

> HTMLHelpのデコンパイルはhh.exeで出来たと思いますが。
> 違う意味なんでしょうか?

hh.exeって、MSの標準ツールですか?
実は、もう一つDLしてあったツールがあったので、
それで遣ったら、いけました。
で、松島さんが言ってた、CSSファイルが有ったので、
中を見たら、呪文のような記号のような…。以下略(笑)

所で、WinHelpの方ですが、こっちの方は、メモリ不足で、
途中までしかいけませんでした。
WinHelpを分解するツールって有ります?
シェアが1つ有ったんですが、サイズ制限が掛けてあった。
ヘッダから抜いてきても良いんですけど、用途までは書いてないし。
でも、補完クンがSakuraに対応できないから、どっちみち意味無いですね。

shobohn さん 2002年 05月 06日 01時 12分 34秒

To: イチニイ さん

HTMLHelpのデコンパイルはhh.exeで出来たと思いますが。
違う意味なんでしょうか?

attic さん 2002年 05月 05日 20時 43分 33秒

管理人むたぐち さん、こんばんは。

> 本の話は、ちょうど2chのWSHスレで話題になってるので、
> そっちを参考にしていただけるといいかと。
> http://pc.2ch.net/test/read.cgi/win/1009175619/835-

ご紹介、有り難うございます。知らないところで、い
くつか本が出ているのですね。早速チェックしてみま
す。
でも、大きな書店を探してもなかなか見つからないと
思っていたら、WSHって衰退言語とみなされているよう
ですね。ちょっとショックです……。
まぁ、WSH(やVBScript)で培った知識やノウハウは、
他言語習得にも生かせるハズ……と思って自分を慰める
ことにします。
というか、2ちゃんって趣味やゴシップ系ばかりかと思
っていたのですが、こういう勉強になる板もあるとは知
りませんでした。

イチニイ さん 2002年 05月 05日 00時 08分 58秒

To: むたぐち さん

> おひさしぶりです。
> カタカナになりましたね。

何カ月ぶりだったかも忘れるほど、
ご無沙汰してました。(笑)
カナになったのは、何げに成り行きで…。
ちゅうか、ここに来てから、1年くらい立つような…。
でも、VBSのスキルは、当時のまま。(爆)


>> 「Script56.chm」を開くと、スクロールバーが消えます。
> でも、わかんないや。ははは…(^^;

流石に、Web上を探しても、こんなレアな障害情報は、
出てきませんでした。
もしかすると、家の環境だけかも。
確か、DLし直してもダメだったような…。
まあ、諦めて上下のスクロールだけで頑張ってます。
ヘルプのデコンパイラが有るそうですが、DLしたら、
WinHelp用でした。(笑)


ひょん さん 2002年 05月 04日 23時 25分 43秒
URL:http://isweb36.infoseek.co.jp/computer/hyons/

>選択範囲のファイル化ですか。さりげなくcomdlg32.ocxを使ってますが、
>これって、VBがインストールされていない環境でも動きますかねえ?

IE5.0を入れると強制的に入りますです。

たる さん 2002年 05月 04日 19時 12分 47秒

To: 管理人むたぐち さん

>>“bot ばかりで人いませんね〜”ってよく怒られて
>>ます(笑>皆様
>あい、そういうことなので、みなさん、どうぞです。
>私も都合がつけば、参加させていただきます。
どんな論議があるのか興味があります。
タイミングが合えば参加したいですね。

>>なので、イマノウチ(半角)にこっそりと書き込む。
>見てたよ(ニヤリ
ハッ!!Σ(°∀°≡
…化けなきゃいいなぁ(汗

>選択範囲のファイル化ですか。さりげなくcomdlg32.ocxを使ってますが、
>これって、VBがインストールされていない環境でも動きますかねえ?
>WSHはだめだったけど、HTMLなら、いけるのかな。
だと思います。
ウチには確かめる環境がないので、友達とチャットをやりながら見てもらっていたのですけど、
二人とも仕事帰りで酔っ払っていたもんで、環境確認不確かかも。その都度はご勘弁を。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2002年 05月 04日 14時 07分 43秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

ここ1月ほど、出現頻度が低かったのは、就職関係のこともありますが、
2chの某板(windowsとかプログラムではない)の某スレに常駐していたからでありました。

でも、昨晩、引退宣言を出しましたので、今後はWSHやフォルダカスタマイズに
専念できることでしょう。



To: attic さん

> ところで、別の質問ですが、WSHを独習するにはどんな本
> がよいでしょうか。私は
>
> (株)アンク,『はじめてのWindows Scripting Host』,
> 1998年9月,1780円+税
>
> という本を参考にしていますが、もう少し詳しい本が欲し
> いと思っているところです。

本の話は、ちょうど2chのWSHスレで話題になってるので、
そっちを参考にしていただけるといいかと。
http://pc.2ch.net/test/read.cgi/win/1009175619/835-



To: イチニイ さん

おひさしぶりです。
カタカナになりましたね。

> 「Script56.chm」を開くと、スクロールバーが消えます。
> ヘルプを見ようにも、スクロールできなくて困ってます。
> この現象の解決方法知ってる方いますか?

でも、わかんないや。ははは…(^^;



To: さざなみ さん

本題は、チャブーンさんが回答なさってるので割愛。

> また、MS_Office製品のオブジェクトを利用した
> 使用可能なメソッドの解説ページやお勧め
> の書籍等がありましたら、お教えください。

VBAのヘルプが一番充実してるんじゃないですかね。
当たり前ですけど(^^;



To: コーイチ さん

最近、特定商取引法ってのが改正されて、!広告!入りのメールが出回るように
なりましたが、そのせいで、返ってspamが増えたような気がするのは
私だけでしょうか。
あと、掲示板などへのマルチ投稿は法的に問題ないんでしょうか。

青少年有害社会環境対策基本法なんていう、国を滅ぼしかねない法案を通す前に、
こういう迷惑な輩を取り締まる法律を、ちゃんと制定して欲しいものだ。



To: チャブーン さん

> どんな風にものを動かしたいのかはわからないですが、VBAベタなら
> Workbooks("book.xls").Worksheets("sheet").Activateなんて指定になり
> そうです。

ここまでできたら、あとは、WSH的なコードをちょこっとつなげるだけでいいでしょう。

Set Excel = WScript.CreateObject("Excel.Application")
Set book = Excel.WorkBooks.Open("book.xls")
book.Worksheets("sheet").Activate

> そこにも書かれていますが、IRCはごくふつーのものですので、皆さんで
> 適当にチャンネルを作成してご利用いただいてかまいませんよ〜。JAVA
> アプレットから入るときにも、チャンネル欄に自分でチャンネル名を入れ
> れば作成できます。“bot ばかりで人いませんね〜”ってよく怒られて
> ます(笑>皆様

あい、そういうことなので、みなさん、どうぞです。
私も都合がつけば、参加させていただきます。



To: たる さん

> むたぐちさんが書かないとさびしぃなぁ。
> なので、イマノウチ(半角)にこっそりと書き込む。

オドルノナライマノウチ、ってか。
見てたよ(ニヤリ

> WSHでメール送信して添付したいんでしょうか?
> ログを出力したいとか受け取って加工したいとかではなさそうですよね。
> うちのサーバに眠っていたスクリプトですが、
> ex??????.logというファイルを送るものです。ほとんど同じですね。
> 依存はしていないつもりなので、吟味して適宜変更してください。

BASP21を使ったスクリプトですね。

> で、ちょっくらIEのコンテキストの練習に投稿します。
> インストーラは翻訳の真似っていうかまんまなんですけど。
> 選択範囲をそのままファイル化できたら便利かなぁと思いまして。

翻訳スクリプト、2chに持っていったら、なかなか好評でしたよ。
もうちょっと改良を加えれば、便利に使えると思います。

選択範囲のファイル化ですか。さりげなくcomdlg32.ocxを使ってますが、
これって、VBがインストールされていない環境でも動きますかねえ?
WSHはだめだったけど、HTMLなら、いけるのかな。

たる さん 2002年 05月 04日 05時 54分 37秒

むたぐちさんが書かないとさびしぃなぁ。
なので、イマノウチ(半角)にこっそりと書き込む。

To: パンシロウ さん

> 毎日のログ(例:cat020502.log)を自動的にメールで受け取りたいんですが、
> 当然のことながら、このlogファイルの名前が毎日変化します。この変化する値に
> 対応する名前の与え方を教えて下さい。

WSHでメール送信して添付したいんでしょうか?
ログを出力したいとか受け取って加工したいとかではなさそうですよね。
うちのサーバに眠っていたスクリプトですが、
ex??????.logというファイルを送るものです。ほとんど同じですね。
依存はしていないつもりなので、吟味して適宜変更してください。
名前は正規表現で指定します。
あんまり、説明になっていないかも知れませんが。
仕様として、今日のログは出さない。
一回につき5通まで。
ってのが加わります。

Function SendMail(asFile)
Dim bobj, mailto, mailfrom, subj, body, files, msg
Set bobj = CreateObject("BASP21")
Const svname = "baz.co.jp"
mailto = "hogehoge@baz.co.jp"
mailfrom = "<hogehoge@baz.co.jp>"
subj = Now() & "分のログ"
body = "仕事がんばれよ"
files = Join(asFile, vbTab)
msg = bobj.SendMail(svname,mailto,mailfrom, subj,body,files)
SendMail = msg
Set bobj = Nothing
End Function
Const clMaxFiles = 5 'いっぺんに送るメール数
Const csTargetPath = "C:\WINDOWS\system32\Logfiles\W3SVC1"
Const csSaveInit = "./fileStock/tempfile.xml"
Dim oXML, oFS, oFiles ,oFile, eleFile, i, asFile(), sTemp, oReg, lErrNumber
Set oXML = WScript.CreateObject("Microsoft.XMLDom")
oXML.async = False
If Not(oXML.load(csSaveInit))Then oXML.loadXML("<root><files path=""" & csTargetPath & """/></root>")
Set oFS = WScript.CreateObject("Scripting.FileSystemObject")
Set oFiles = oFS.GetFolder(csTargetPath).Files
ReDim asFile(clMaxFiles - 1)
i = 0
Set oReg = New RegExp
oReg.Pattern = "ex[0-9]{6}\.log"
For Each oFile In oFiles
If oXML.selectNodes("root/files/file[@name='" & oFile.Name & "']").length = 0 Then
Set eleFile = oXML.selectSingleNode("root/files").appendChild(oXML.createElement("file"))
eleFile.setAttribute "name", oFile.Name
eleFile.setAttribute "done", "false"
Else
Set eleFile = oXML.selectSingleNode("root/files/file[@name='" & oFile.Name & "']")
End If
If eleFile.getAttribute("done") <> "true" Then
sTemp = oFS.GetFileName(eleFile.getAttribute("name"))
' MsgBox sTemp
If oReg.test(sTemp) And ("ex" & Right("00" & Year(Now()), 2) & Right("00" & Month(Now()), 2) & Right("00" & Day(Now()), 2) & ".log") <> LCase(sTemp) Then
On Error Resume Next
asFile(i) = eleFile.getAttribute("name")
asFile(i) = csTargetPath & "\" & asFile(i)
lErrNumber = Err.Number
Err.Clear
If lErrNumber<>0 Then Exit For
eleFile.setAttribute("done") = "true"
i = i + 1
End If
End If
Next
oXML.save(csSaveInit)
Set oXML = Nothing
Set oFS = Nothing
If i >= clMaxFiles Then i = clMaxFiles - 1
ReDim Preserve asFile(i)
'MsgBox Join(asFile,",")
If i > 0 Then SendMail(asFile)

で、ちょっくらIEのコンテキストの練習に投稿します。
インストーラは翻訳の真似っていうかまんまなんですけど。
選択範囲をそのままファイル化できたら便利かなぁと思いまして。

<base>
<code src="ToFile_install.vbs">

Set WshShell = WScript.CreateObject("WScript.Shell")
Set Fs = WScript.CreateObject("Scripting.FileSystemObject")

iMsg = MsgBox("IEのコンテキストメニューに「ToFile」を追加します。" & vbCrLf & "よろしいですか?",vbYesNo)
If iMsg=vbNo Then WScript.Quit

WshShell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\&ToFile\",Fs.BuildPath(Fs.GetParentFolderName(WScript.ScriptFullName),"ToFile.htt"),"REG_SZ"
WshShell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\&ToFile\contexts",&H10,"REG_DWORD"
MsgBox "インストール完了"

</code>
<code src="ToFile.htt">

<html>
<head>
<title>選択範囲をファイル化する</title>
<script language="vbscript" type="text/vbscript">
<!--
Option Explicit
Sub ShowInit
Dim lErrNumber, sSaveFile, oFS, oTS
With CommonDialog1
On Error Resume Next
CommonDialog1.ShowSave
lErrNumber = Err.Number
Err.Clear
If (lErrNumber<>0) Then Exit Sub
sSaveFile = .FileName
End With
Set oFS = CreateObject("Scripting.FileSystemObject")
If oFS.FileExists(sSaveFile) Then
If window.confirm("ファイルが存在します。上書きしますか?") = False Then Exit Sub
End If
Set oTS = oFS.OpenTextFile(sSaveFile, 2, True)
oTS.Write external.menuArguments.document.selection.createRange.text
End Sub
Set window.onload = GetRef("ShowInit")
-->
</script>
</head>
<body>
<object id="CommonDialog1" width=0 height=0 classid="CLSID:F9043C85-F6F2-101A-A3C9-08002B2F49FB">
<param name="_Version" value="327681">
<param name="CancelError" value="1">
<param name="DialogTitle" value="ファイルに保存">
<param name="Filter" value="スクリプト ファイル (*.vbs,*.js)|*.vbs;*.js|テキストファイル (*.txt)|*.txt">
</object>
<input type="button" value="名前をつけて保存" onclick="ShowInit" />
</body>
</html>

</code>
</base>

チャブーン さん (mkobu@chabnet.jp) 2002年 05月 04日 03時 38分 11秒
URL:http://www.chabnet.jp/

チャブーンです。

>さざなみさん

特定のxlsファイルにマクロを組んで置いてそれを呼び出すとかはいけないんで
すかね?Excel系の操作関数はVBAのサブセットの扱いになってるので、そっち
から参照したほうが実現が早いかもしれないですね。

どんな風にものを動かしたいのかはわからないですが、VBAベタなら
Workbooks("book.xls").Worksheets("sheet").Activateなんて指定になり
そうです。

不勉強なんではずしたらアレですが、まずは VBA のヘルプで確認してみると
いう手はどうですか?“それは知っているが必要ない”ということでしたら
私の発言は単なるお騒がせですが(^^;

>むたぐちさん

ちゃっとご案内文ありがとうございます。

そこにも書かれていますが、IRCはごくふつーのものですので、皆さんで
適当にチャンネルを作成してご利用いただいてかまいませんよ〜。JAVA
アプレットから入るときにも、チャンネル欄に自分でチャンネル名を入れ
れば作成できます。“bot ばかりで人いませんね〜”ってよく怒られて
ます(笑>皆様

ただこちら専用線ではない関係上、接続が切れることが少なくないです。
落っこってしまった場合は、お許しいただけるとありがたいです。

コーイチ さん (koi-hito@fd6.so-net.ne.jp) 2002年 05月 03日 18時 58分 22秒
URL:http://auction.excite.co.jp/dap/sv/nor1?id=5876611

場違いだったら削除してください。
いまEXCITEのオークションにプリンタ出品してます。
結構いいやつですが思い切って1円〜出だしてます。

詳しくは
http://auction.excite.co.jp/dap/sv/nor1?id=5876611
を見てください。

Return