あいざわ様
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)
とかにはアクセスできないように見えます。
とはいえ、自分の知識不足で実はできたりするのかもしれませんが。
to:Nomuraさん
10日も前の書き込みを見ていたのですがちょっと気が付いたので。
基本的に課題とされているのはmy.OCXを登録することですよね?
だとしたら環境はイントラネットということなのでログオンスクリプト中で
登録したらいかがでしょうか?
ネットワークの環境の詳細が不明ですがドメインを組んでいるかActive
Directoryを構成しているならASPを使うより簡単に登録できると思います。
my.OCXが登録されたかどうかもスクリプト中で判断できると思うし。
はずしていたらすみません。
飛び先は同じでした
大変失礼しました
あいざわさん
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
改行注意?
違いは分りませんが、とりあえずアップさせていただきました
to:yokaさん
>あいざわさん どうもありがとうございました
どういたしまして。
こちらが恐縮してしまうくらい丁寧にご返事いただいて...
お返しといっては何ですがマイクロソフトのサイトというのは
http://www.microsoft.com/japan/msdn/default.asp
です。このサイトに移ってから検索していただければヒットしますので。
あいざわさん どうもありがとうございました
>マイクロソフトのサイトで
>explorer コマンドライン
>wsh sendkeys
>で検索をかけてみてください。
google等で検索してみたのですが、多すぎたりして
うまく引っ掛けることが出来ませんでした
適切なキーワードと検索対照のhpのご指示で
過去ずっと知りたかった情報を得ることが出来ました
教えて頂いたコードは、当方では
略
>WSHShell.Sendkeys "%V"
略
では、
フォルダーウインドウ?を表示させることが
出来ませんでしたが
>WSHShell.Sendkeys "V"
で、うまく、フォルダーウインドウ?が表示出来ました
なぜか、まだ理解出来ていませんが
上記を参考に勉強して行きたいと思います
色々どうもありがとうございました。
今後もよろしくお願い致します
(管理人により削除)
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
で検索をかけてみてください。
あいざわさん こんにちは
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)"
よろしくお願いいたします
to:yokaさん
WSHShell.Run "explorer.exe /e,/root,C:"
でどうでしょう?
お世話になります
早速質問ですが
vbsでエクスプローラを開きたいのですが
Set WSHShell = Wscript.CreateObject("Wscript.Shell")
WSHShell.Run "explorer.exe C:"
で、c:を表示できるのですが
これに加えて
メニューの
表示/エクスプローラバー/フォルダで表示される
フォルダーウインドウ?を表示させることが出来ません
上記にどのような記述を加えればよいのでしょうか
よろしくお願い致します
たるさんありがとうございました。
マクロ起動しました。
また参考にさせていただきました、
あんのうんさん、ちぇりーさんにも感謝しています。
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"
テキストとヘルプの件も調べてみます。
いろいろありがとうございました。
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
これはいい本だと思います。基礎をわからずに読んでとりあえず書いて動かした覚えがあります。
オブジェクトの理解が増えたらまた読み返しましたけどね。
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を勉強するには
どうしたらいいか何かいいテキストでもあれば
紹介していただけませんでしょうか。
よろしくお願いします。
Yuutaさんへ
>objXL.ActiveWorkbook.SaveAs filename="c:\My Documents\Excel01.xls"
この書き方はVBAの名前付き引数をイメージしていると思います。
さて、名前付引数ならば filename:= でコロンが必要だったのでは?
但し、名前付き引数の場合は()で囲む必要があったような気がします。
(うろ覚え)
それから、VBScriptからは名前付き引数が抜本的に無理だったような
気がします。過去に同じくExcelのVBAを呼び出すVBScriptで名前付き引数が
通らなかった記憶があります。(私のやり方がまずかった
可能性は否定しきれません。)
いずれにしても、名前付き引数ではなく素直に書いて試してみては?
Yuutaさん
VBScript では名前付き引数は使えないので
objXL.ActiveWorkbook.SaveAs "c:\scr\Excel01.xls"
とします。また False というファイル名は
filename = "c:\scr\Excel01.xls"
を論理演算した結果の False が返っているのでしょう。
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
あたりを参考にしてみてください。
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
---------------
よろしくお願いします。
先ほどの書込みで、どこでエラーになっているのか、動作環境は?
ちょっと説明不足だったと思います。
WSHControllerオブジェクトのCreateScriptメソッドの行です。
ちなみに動作環境は、
Windows2000(SP2)+IE6+WSH5.6 です。
こんにちは。
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コンポーネントはオブジェクトを作成できません
と言われます。
一体何が気に入らないのでしょうか?どなたか、ご教授いただけると幸いです。
これからも、このサイトで勉強させて頂ければと思います。
自己レス>>62-05
>ウチには確かめる環境がないので
機会があったので試してみました。
Win98(NotSE)
NT4.0
だめでした。この方法ではコモンダイアログを使うことが出来ませんでした。
お目汚しすいませんでした。
少し得意なってカキコしたのですが、出来なくてがっくし。
ごめん訂正。
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の読み込み指定
マイクロソフトとか本とか探して見たんだけれど、名無しさんみたいな
具体例は探せなかったです。過去ログに参考が出ていたとは(汁
既出でしょうけど、練習に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の読み込み指定
>>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!!"
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 の間違いですよね
>>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さーん。どうかおせぇてくだせぇ、おねげぇすますだ。
To: freedom さん
> VBSを使ってメールを送ることは可能ですか?
> 例えば、指定された処理が行われると、決まったアドレスに固定内容の
> メールが送信されるといった感じ。
62-03に書いたばっかりですので、そのSendMailって言う自作関数を参照してください。
BASP21はここ
http://www.hi-ho.ne.jp/babaq/
これ以上を望むのは、
結果重視のコンポーネントクライアント指向プログラミングとしては畑違いになりますのでどうか勘弁を。
VBSを使ってメールを送ることは可能ですか?
例えば、指定された処理が行われると、決まったアドレスに固定内容の
メールが送信されるといった感じ。
よろしくお願いします。
Nomura様
そうです。スクリプト自体のフルパスです。
>strAnswer = WScript.ScriptFullName
しかしこんな便利なものがあったとは・・・。
知らないということは恐ろしいですね。
本当に勉強になりました & 助かりました。
ありがとうございました。
トラさんへ
>D&Dで引数のファイルを渡されて起動したVBS自体の
>パスって取得できますでしょうか?
本日、私も同じ問題に直面し、悩んだところ、下のサンプルで
スクリプトのフルパスが取得されます。
課題はドラッグ&ドロップされたファイルではなく、
スクリプト自体のフルパスでいいんですよね!
Dim WshShell ''' As WSH
Dim strAnswer ''' As String
Set WshShell = WScript.CreateObject("WScript.Shell")
strAnswer = WScript.ScriptFullName
SIGNAL9様
>aaa.asp側では呼び元がmyOCXか否かを判定(myOCXでUSER_AGENTを
>セットなど)
今回の仕様に直接使用できるかどうかは検討してみますが、
例え今回は×でも、この手法は何かと応用がききそうですね。
大変参考になりました。ありがとうございました。
すごい参考になりました。
おかげでVBSの大体のイメージができました。
あと、2chのスレも見ました。
すごすぎです。
>Nomuraさん
どういう仕様のOCXなのかよく分からないので(RFC1867?WebDAV?)、
ご要望にあうかどうか分からないですが、myOCX内部でaaa.asp(か、
切り分けを行うサーバスクリプト)を呼び出すというのでは駄目でしょ
うか。
aaa.asp側では呼び元がmyOCXか否かを判定(myOCXでUSER_AGENTを
セットなど)し、単なるブラウザだったら、downloadページにリダイ
レクト…とか。
To: おーば さん
> 3. サーバー側で別プロセス(多分WSH)を起動して、DBにアクセスしながら
> 数時間かかる統計処理データを作成。
定石としては、VBでアプリを作って(EXE)シェル実行というのが良いんでは?
WSHでやるにはIWAM_<machinename>にAdministorators権限与えないといけないし。
ActiveXEXEでも確か権限問題は発生したような。(すみません未確認)。
多分無理だとは思いますが(やろうとしていることが結局
ウィルスと同じ行為になってしまうので。。。)、
一応、ダメモトで教えてください。
<========= 動作環境 =================================>
【サーバ】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があるみたいですけど。。。
長い質問になりましたが、よい知恵があれば拝借させてください。
To: shobohn さん
> hh -decompile [デコンパイルされたファイルを展開するフォルダ] [対象の*.CHM]
> で、デコンパイルできますよ。
全然知らなかった。
MS標準の物で出来たとは…。
結局どちらも、思うように使えないまま、
HDのゴミと化しましたが…。(笑)
ASP を経由した非対話的バッチ処理の定石?
先日は回答いただきありがとうございました。
今度はこんなことやろうと思ってます。ご意見お聞かせください。
1. ユーザーにフォームから必要事項を記入してもらってSubmit。
2. サーバーは、とりあえず「受け付けました」ページを送信。
3. サーバー側で別プロセス(多分WSH)を起動して、DBにアクセスしながら
数時間かかる統計処理データを作成。
4. 完了したら、ユーザーにメールで「できたよ。どこどこを見て」と通知。
3. と 4. について、BASP21 を使えば容易にできることは知っています。
ただ、2. と 3. について、Microsoft で用意している ASP の枠組みの中で
実現可能だったり、私が知らない定石的な手法があるかどうか知りたいのです。
要はノンブロックの外部プロセス実行か、それと同等な機能です。
2. について、ASP コード中で重たい処理をやらせると、Response.End を
呼ぶと以降のコードも実行されないし、かといって呼ばないと地球がくるくる
回りっぱなしでよろしくないし、Server.Execute もまた機能が異なるし...
ご意見よろしくお願いします。
さざなみです。
レス、ありがとうございます。
>チャブーンさん
>どんな風にものを動かしたいのかはわからないですが、VBAベタなら
>Workbooks("book.xls").Worksheets("sheet").Activateなんて指定になり
>そうです。
ありがとうございます。
Workbooksオブジェクトを作成しなければ
使えないことがわかりました。
>むたぐち さん
>VBAのヘルプが一番充実してるんじゃないですかね。
>当たり前ですけど(^^;
ありがとうございます。さっそくVBAの本を購入させていただき
ました。
まだ、WSHを始めたばかりで何もわかっていない
初心者ですが、これからもよろしくお願いいたします。
いつもお世話になっております。
めざせ脱・初心者でがんばっております。
D&Dで引数のファイルを渡されて起動したVBS自体の
パスって取得できますでしょうか?
カレントディレクトリを取得しようとすると
c:\になってしまいます。(VBS本体はc:\test\scriptの下)
To: イチニイ さん
もう解決されてるようですが、
> hh.exeって、MSの標準ツールですか?
標準ツールっていうか、*.chmが関連付けられてる(ハズの)exeなんですが。
DOSプロンプトか「ファイル名を指定して実行」から
hh -decompile [デコンパイルされたファイルを展開するフォルダ] [対象の*.CHM]
で、デコンパイルできますよ。
To: shobohn さん
> HTMLHelpのデコンパイルはhh.exeで出来たと思いますが。
> 違う意味なんでしょうか?
hh.exeって、MSの標準ツールですか?
実は、もう一つDLしてあったツールがあったので、
それで遣ったら、いけました。
で、松島さんが言ってた、CSSファイルが有ったので、
中を見たら、呪文のような記号のような…。以下略(笑)
所で、WinHelpの方ですが、こっちの方は、メモリ不足で、
途中までしかいけませんでした。
WinHelpを分解するツールって有ります?
シェアが1つ有ったんですが、サイズ制限が掛けてあった。
ヘッダから抜いてきても良いんですけど、用途までは書いてないし。
でも、補完クンがSakuraに対応できないから、どっちみち意味無いですね。
To: イチニイ さん
HTMLHelpのデコンパイルはhh.exeで出来たと思いますが。
違う意味なんでしょうか?
管理人むたぐち さん、こんばんは。
> 本の話は、ちょうど2chのWSHスレで話題になってるので、
> そっちを参考にしていただけるといいかと。
> http://pc.2ch.net/test/read.cgi/win/1009175619/835-
ご紹介、有り難うございます。知らないところで、い
くつか本が出ているのですね。早速チェックしてみま
す。
でも、大きな書店を探してもなかなか見つからないと
思っていたら、WSHって衰退言語とみなされているよう
ですね。ちょっとショックです……。
まぁ、WSH(やVBScript)で培った知識やノウハウは、
他言語習得にも生かせるハズ……と思って自分を慰める
ことにします。
というか、2ちゃんって趣味やゴシップ系ばかりかと思
っていたのですが、こういう勉強になる板もあるとは知
りませんでした。
To: むたぐち さん
> おひさしぶりです。
> カタカナになりましたね。
何カ月ぶりだったかも忘れるほど、
ご無沙汰してました。(笑)
カナになったのは、何げに成り行きで…。
ちゅうか、ここに来てから、1年くらい立つような…。
でも、VBSのスキルは、当時のまま。(爆)
>> 「Script56.chm」を開くと、スクロールバーが消えます。
> でも、わかんないや。ははは…(^^;
流石に、Web上を探しても、こんなレアな障害情報は、
出てきませんでした。
もしかすると、家の環境だけかも。
確か、DLし直してもダメだったような…。
まあ、諦めて上下のスクロールだけで頑張ってます。
ヘルプのデコンパイラが有るそうですが、DLしたら、
WinHelp用でした。(笑)
>選択範囲のファイル化ですか。さりげなくcomdlg32.ocxを使ってますが、
>これって、VBがインストールされていない環境でも動きますかねえ?
IE5.0を入れると強制的に入りますです。
To: 管理人むたぐち さん
>>“bot ばかりで人いませんね〜”ってよく怒られて
>>ます(笑>皆様
>あい、そういうことなので、みなさん、どうぞです。
>私も都合がつけば、参加させていただきます。
どんな論議があるのか興味があります。
タイミングが合えば参加したいですね。
>>なので、イマノウチ(半角)にこっそりと書き込む。
>見てたよ(ニヤリ
ハッ!!Σ(°∀°≡
…化けなきゃいいなぁ(汗
>選択範囲のファイル化ですか。さりげなくcomdlg32.ocxを使ってますが、
>これって、VBがインストールされていない環境でも動きますかねえ?
>WSHはだめだったけど、HTMLなら、いけるのかな。
だと思います。
ウチには確かめる環境がないので、友達とチャットをやりながら見てもらっていたのですけど、
二人とも仕事帰りで酔っ払っていたもんで、環境確認不確かかも。その都度はご勘弁を。
ここ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なら、いけるのかな。
むたぐちさんが書かないとさびしぃなぁ。
なので、イマノウチ(半角)にこっそりと書き込む。
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>
チャブーンです。
>さざなみさん
特定のxlsファイルにマクロを組んで置いてそれを呼び出すとかはいけないんで
すかね?Excel系の操作関数はVBAのサブセットの扱いになってるので、そっち
から参照したほうが実現が早いかもしれないですね。
どんな風にものを動かしたいのかはわからないですが、VBAベタなら
Workbooks("book.xls").Worksheets("sheet").Activateなんて指定になり
そうです。
不勉強なんではずしたらアレですが、まずは VBA のヘルプで確認してみると
いう手はどうですか?“それは知っているが必要ない”ということでしたら
私の発言は単なるお騒がせですが(^^;
>むたぐちさん
ちゃっとご案内文ありがとうございます。
そこにも書かれていますが、IRCはごくふつーのものですので、皆さんで
適当にチャンネルを作成してご利用いただいてかまいませんよ〜。JAVA
アプレットから入るときにも、チャンネル欄に自分でチャンネル名を入れ
れば作成できます。“bot ばかりで人いませんね〜”ってよく怒られて
ます(笑>皆様
ただこちら専用線ではない関係上、接続が切れることが少なくないです。
落っこってしまった場合は、お許しいただけるとありがたいです。
場違いだったら削除してください。
いまEXCITEのオークションにプリンタ出品してます。
結構いいやつですが思い切って1円〜出だしてます。
詳しくは
http://auction.excite.co.jp/dap/sv/nor1?id=5876611
を見てください。