1 名前:nobodyさん mailto:sage [03/08/01 22:37 ID:???] 【このスレの概要】 ・Windows Script Host (=WSH)をCGI利用する ・JScript、又はVBScriptをCGIスクリプトとする ・自PCをサーバー稼動させる事を前提とする ・原則、Windows以外はフリーで入手できるアプリ、ツールの利用 【対象環境】 ・Windows95以上及び、WSH5.6以上のインストール済み ・Webサーバーソフトにはフリー配布のAN HTTPDを前提とする ※作者:中田 昭雄氏 配布元:ttp://www.st.rim.or.jp/~nakata/ なお、このスレでの内容を直接、中田氏サイトへ質問するのはやめて頂きたい。 【お約束】 ・試行は自PCで自己責任で行う ・商用実利用は前提としていない、本スレは、プログラム技術的知識、お遊び、趣味の範囲であることを理解する
11 名前:nobodyさん [03/08/03 00:04 ID:BzLT+GQp] 【WSHのCGI利用基本:WScriptオブジェクト】 スクリプトがWSHで実行される時、WSHはその提供するオブジェクトモデルのルートオブジェクトであるWScrptオブジェクトを宣言、作成不要で提供する。 以下にCGIで利用する際で特に使用すると思われる、WScriptオブジェクト自体の機能の一部を示しておく。 《プロパティ》 StdIn;標準入力ストリームオブジェクトの参照、※このオブジェクトのメンバーは別に示す StdOut;標準出力ストリームオブジェクトの参照、※このオブジェクトのメンバーは別に示す 《メソッド》 CreateObject;COMオブジェクト(dll、ActiveXコンポーネントなどが提供するオブジェクト)の作成、JSのnew ActiveXObject、VBSのCreateObjectでも代用可能 Quit;スクリプトを終了する ※特に明示的に終了させたい場合使う Sleep;一定時間スクリプト実行を待機し再開する
12 名前:nobodyさん [03/08/03 00:37 ID:98pa6a9y] 今日までがんばったご褒美サイト! homepage3.nifty.com/coco-nut/
13 名前:nobodyさん [03/08/03 02:04 ID:t0wVY8lW] 1はNT系2000、XP環境がないので是非、協力者を求む
14 名前:nobodyさん mailto:sage [03/08/03 09:25 ID:???] >>13 なめてんのか? 後、転載元のサイトに謝っとけよ。
15 名前:nobodyさん mailto:sage [03/08/03 15:16 ID:???] まぁだから、どこか抜けてるのが ちゃんねるだってことでw
16 名前:nobodyさん [03/08/03 15:17 ID:kjY1EbCv] 【WSHのCGI利用基本:標準入力ストリーム WScript.StdIn】 参照 >>11 標準入力ストリームにはWScript.StdInで参照できる CGI動作中には、ブラウザからのPOSTメソッドで送信されたユーザーデータを取得することができる。 以下にCGIで特に使用するメンバーのみ示す。他はマニュアル参照。 《プロパティ》 AtEndOfLine;現在の読み出し位置が行末ならtrue。 AtEndOfStream;現在の読み出し位置が終端ならtrue ※MSのWSH5.6リファレンスにはミスで記載がない。 《メソッド》 ReadAll;全て読み出す ReadLine;1行分のテキストを読み出す。※読み出したテキストには改行文字は含まない ※なお、ファイルストリームと違い明示的にCloseする必要はない。
17 名前:nobodyさん [03/08/03 15:17 ID:kjY1EbCv] 【WSHのCGI利用基本:標準出力ストリーム WScript.StdOut】 参照 >>11 標準出力ストリームにはWScript.StdOutで参照できる クライアントブラウザへのレス、データの送信に使用するのは言うまでもない。 以下にCGIで特に使用するメンバーのみ示す。他はマニュアル参照。 《メソッド》 Write(strText);引数文字列strTextを書き出す。 WriteLine([strText]);引数文字列strTextを改行付きで(つまり1行として)書き出す。引数を省略した場合、空白行となる。 ※なお、ファイルストリームと違い明示的にCloseする必要はない。 ※改行文字はその実行環境に依存する。WindowsなのでCR+LFである。 ・JScriptの場合;\r\n ・VBScriptの場合;vbCrLf、又はvbNewLine(考えないでいいのでお薦め)の組み込み定数を使用すると便利
18 名前:nobodyさん [03/08/06 02:08 ID:m1U3eQA/] 【WSHのCGI利用基本:環境変数の取得 WshShellオブジェクト】 クライアントブラウザからのアクセスによるWebサーバーのCGI動作で設定されるプロセス環境変数を取得する WSHのWshShellオブジェクトのEnvironmentプロパティの環境変数のコレクション(WshEnvironmentオブジェクト)から参照できる。 ・JSの場合 var WshShell = WScript.CreateObject("WScript.Shell"); var ColWshEnv = WshShell.Environment("Process"); ・VBSの場合 Set WshShell = WScript.CreateObject("WScript.Shell") Set ColWshEnv = WshShell.Environment("Process") ※上記の例の変数ColWshEnvは環境変数コレクション(それがWshEnvironmentオブジェクト)を参照している点に注意。 例として環境変数名REMOTE_ADDR(アクセス者のIP)を参照するには ColWshEnv("REMOTE_ADDR") 又は、ColWshEnv.item("REMOTE_ADDR")
19 名前:nobodyさん [03/08/06 02:08 ID:m1U3eQA/] 【WSHのCGI利用基本:環境変数の取得 Webサーバーによる設定値】 参照 >> WSH特有でなくCGI仕様の一般的な事だが CGI実行時、特に参照するだろう環境変数の一部を示す。 REQUEST_METHOD;クライアントからの要求命令(GET,POST等) REMOTE_ADDR;クライアントのIPアドレス QUERY_STRING;クライアントのGETメソッドから受信したユーザーデータ CONTENT_LENGTH;クライアントのPOSTメソッドから受信したユーザーデータのバイトサイズ REMOTE_HOST;クライアントのホスト名(IPを表す名前)※Webサーバーの設定でホスト名の取得が可能なら格納される。 ※ここで言うクライアントとはサーバーにアクセス要求するものを言う。 ※OS設定に関わるものはWSHリファレンスで。 ※Webサーバーによる設定はHTTPでのサーバー規格、CGI仕様などの一般マニュアルを参照。
20 名前:nobodyさん mailto:sage [03/08/06 02:22 ID:???] あ、ごめん 19は 18参照 まぁ順に読んでね♪ 【チョット休憩:ジエンF&Q】 『WinではASPが主流だろうに、WSHでCGIを行うメリットは?』 ・特にないwむしろ不利が多いww ・強いて言えば、ASPでも同じだが、JS、VBSはDHTMLで慣れ親しんでいる人が多いだろう。 ・LINUX系のようなあくまでフリー環境志向の場合では、ということだ。古いWin9x系サーバーで遊ぶにはいいだろうw
21 名前:nobodyさん [03/08/06 06:40 ID:caVQuJh5] 【WSHのCGI利用基本:WScriptオブジェクト】 スクリプトがWSHで実行される時、WSHはその提供するオブジェクトモデルのルートオブジェクトであるWScrptオブジェクトを宣言、作成不要で提供する。 以下にCGIで利用する際で特に使用すると思われる、WScriptオブジェクト自体の機能の一部を示しておく。 《プロパティ》 StdIn;標準入力ストリームオブジェクトの参照、※このオブジェクトのメンバーは別に示す StdOut;標準出力ストリームオブジェクトの参照、※このオブジェクトのメンバーは別に示す 《メソッド》 CreateObject;COMオブジェクト(dll、ActiveXコンポーネントなどが提供するオブジェクト)の作成、JSのnew ActiveXObject、VBSのCreateObjectでも代用可能 Quit;スクリプトを終了する ※特に明示的に終了させたい場合使う Sleep;一定時間スクリプト実行を待機し再開する
22 名前:nobodyさん [03/08/07 00:16 ID:Tpb+8opT] 【サンプルコードについて】 次回から実際のサンプルコードを示していく。 ・CGIスクリプトはJScript、またはVBScriptを使用するが、双方版のコードを示すとは限らない。面倒だからだw ・エラー処理はしていない。サンプルなので必ずしも実用とは言えないものもあることは承知。 ・プログラムコードとして、清書するつもりはない。コードの美しさより動作パフォーマンスを優先することが多い。 ・スクリプトのコード記述には、メモ帳でもいいが、できればそれなりのテキストエディタを使用したい。せめて全角半角空白、改行文字の表示ができるものがいい。 ※1はVisualStudio6Pro開発環境はやりにくいのでw フリー配布テキストエディタとして TeraPad:作者 寺尾 進 氏 ttp://www2s.biglobe.ne.jp/~t-susumu/toclip/ を1つ推奨しておく
23 名前:nobodyさん mailto:sage [03/08/07 00:18 ID:???] 【JScriptサンプル01:簡易アクセスログ】※以下のコードをメモ帳にでもコピーして拡張子.jsでWebサーバーに置くこと。 var ObjDate=new Date() with (ObjDate) { var AcsLogFileName=getFullYear() + "_" + (getMonth()+1) + "_" + getDate() + ".log";} var ObjWshShell = WScript.CreateObject("WScript.Shell"); var ColWshEnv=ObjWshShell.Environment("Process") var ObjFSO=new ActiveXObject("Scripting.FileSystemObject"); var ObjTS=ObjFSO.OpenTextFile("./" + AcsLogFileName,8,true); ObjTS.WriteLine(ColWshEnv("REMOTE_ADDR") + "<>" + ObjDate.toString()); ObjTS.Close(); with (WScript.StdOut) { WriteLine("Location: 127.0.0.1/wsh/js/sample01.jpg\r\n ") ;}
24 名前:nobodyさん mailto:sage [03/08/07 00:19 ID:???] 【JScriptサンプル01:簡易アクセスログの解説(1)】 画像タグなどでCGIを呼び出し、アクセス者のIP、アクセス時刻をファイルに記録するだけである。 自PCでWebサーバー稼動させていれば、Webサーバー自体にアクセスログを取る機能があるので、このコードの実用性は低い。 HTMLページ中で<IMG src="このスクリプトファイルURL" width=0 height=0>で呼び出すのが定石。もちろんテストとして直接URLから呼んでも構わない。 このサンプルコードの場合、まずアクセス者のIPをファイルに追記してから、直接ダミー画像データを出力するのではなく、sample01.jpgというJPEG画像にリダイレクトしている。(この画像URLは自分の環境で調整すること、又はなくてもいいが…) 実は、現バージョンのWSH5.6、及びFSOでは画像などのバイナリファイルの入出力がサポートされていない。(単にディスク上でのコピー、削除は可能。) 何かいいアイディアをある方はレスを^^
25 名前:nobodyさん mailto:sage [03/08/07 00:23 ID:???] 【JScriptサンプル01:簡易アクセスログの解説(2)】 コード参照 >>23 ※以下の行数はコード内のもの。 9行目;ここのOpenTextFileメソッドはファイルをTextStreamオブジェクトとして追記モード(=8)で開いてそのオブジェクト参照を返している。3番目の引数はtrueを指定すると指定ファイルがない場合新規作成されて開く。 ファイルは開いて必要な作業が終わったらCloseするを忘れない。 10行目:ここはファイル出力。WriteLineメソッドは改行つきで書き込む。 14行目:ここでCGI出力。ファイル出力と同様にWriteLineメソッドは先に解説した通り、改行つきで書き込む。つまり、WriteLine(text + "\r\n") はtextを1行で書き、さらに空行も書き込んでいるということ。 補足: (1)この作成されるアクセスログファイルは日付けをファイル名としているので1日単位でログファイルを作成することになる。 (2)アクセスログファイルはこの実行コードと同じフォルダ内に作成される、Win9x上のAN HTTPDの場合、ファイル名で覗かれるので別フォルダに作成してフォルダアクセス制限せよ。
26 名前:nobodyさん mailto:sage [03/08/08 01:27 ID:???] 【ジエンF&Q】 『WSHでCGIの問題点とは?』 ・FSO自体にはファイルの排他ロックが用意されていない、対策としていわゆる、ロックを示すディレクトリをフラグにする方法があるが、苦肉の策である。 Win32APIにはプロセスレベルでのロックができる関数があることはある。が公式のコンポーネント化されたものはない。 旧VisualBasicは排他ロックできるステートメントがあることはあるのだが、これをActiveXコンポーネント化して使用するのもチョットw ・現状ではバイナリデータの入出力は扱えない。したいなら外部コンポーネントで拡張しないとだめだ。 ・JScriptでは文字コードにUnicodeをサポートする。Shift-JIS等への変換は単体ではできない。 ※VBSは双方変換が可能である
27 名前:nobodyさん [03/08/08 22:06 ID:EIK+Pm9d]
28 名前:nobodyさん [03/08/08 22:07 ID:EIK+Pm9d] >>26 www.microsoft.com/japan/developer/library/jpwinpf/_win32_createfile.htm
29 名前:nobodyさん [03/08/13 23:40 ID:q7lOxmnU] AGE
30 名前:nobodyさん mailto:sage [03/08/14 00:06 ID:???] JScript.NETはナシ?
31 名前:山崎 渉 mailto:(^^) [03/08/15 22:33 ID:???] (⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン
32 名前:1 mailto:age [03/08/28 01:06 ID:???] すまんね サンプル面倒でw チャットはまともなもんやると長くなるしなぁw >>28 多分FSOはMSがバージョンアップするかわからんな スクリプトで利用可能のdllでもベクターで公開望むw >>30 .NETはコンパイラを使うしWSHとは共存できるが別物なので別スレ、このスレはWSHスクリプトベースの旧テクでできる範囲を今更模索するw
33 名前: mailto:sage [03/09/18 18:07 ID:???] わたしはWindows Server 2003とASPとASP.NETとSQL Serverを使っているので快適だ。ハハハー もちろん光!
34 名前:nobodyさん mailto:sage [03/12/17 00:39 ID:???] 今更レスしてもなんだけど >>30 JScript.NETでCGI作って見ました。 でもこのスレの趣旨には合わないよね。
35 名前:nobodyさん mailto:sage [04/01/25 01:36 ID:???] hellow vbscriptができません。 どうして?
36 名前:nobodyさん mailto:sage [04/01/25 01:52 ID:???] w が・・・・。 逝きます。
37 名前:nobodyさん mailto:? [04/01/26 11:42 ID:???] WScript.StdOut.WriteLine "Content-type: text/html; charset=shift_jis" WScript.StdOut.WriteLine WScript.StdOut.WriteLine "<html>" WScript.StdOut.WriteLine "<head>" WScript.StdOut.WriteLine "<title>hello</title>" WScript.StdOut.WriteLine "</head>" WScript.StdOut.WriteLine "<body>" WScript.StdOut.WriteLine "<p>hello, vbscript</p>" WScript.StdOut.WriteLine "</body>" WScript.StdOut.WriteLine "</html>"
38 名前:nobodyさん [04/01/30 11:44 ID:b4IBORXj] ここの>>1 の頑張りはすごいな。感動した。
39 名前:nobodyさん mailto:sage [04/01/30 16:11 ID:???] >>38 は>>1 の自作自演ですた
40 名前:nobodyさん mailto:sage [04/01/31 10:26 ID:???] COM書けるkら事実上できない事って無いんだけどな・・・。
41 名前:nobodyさん mailto:age [04/02/21 21:55 ID:???] 【結論】 ASP+IISでいいじゃん。両方OSネイティブだし。 何で機能の劣るソフトを使わなきゃいけないの?
42 名前:nobodyさん mailto:sage [04/02/21 22:12 ID:???] >>41 すべてに関して果てなマーク
43 名前:nobodyさん mailto:sage [04/02/22 10:16 ID:???] >>42 どのへんが?
44 名前:nobodyさん mailto:sage [04/04/22 08:35 ID:???] 保守
45 名前:nobodyさん mailto:sage [04/07/20 10:44 ID:???] >>1 すみません、F&Qって何の略ですか?
46 名前:nobodyさん [04/12/27 22:17:04 ID:MJXdJeak] Option Explicit Private mObjIE Main Public Sub Main() On Error Resume Next Dim strUrl, strMes, strRep Dim objArgs Dim i Set objArgs = WScript.Arguments strUrl = objArgs(0) strMes = objArgs(1) strRep = objArgs(2) 'ファイル読み取り strMes = ReadFile(strMes)
47 名前:nobodyさん [04/12/27 22:17:50 ID:MJXdJeak] 'IEのオブジェクト作成 Set mObjIE = CreateObject("InternetExplorer.Application") OpenIE(strUrl) DoIE(strMes) EatCookie(strRep) CloseIE 'IEのオブジェクトをNothing Set mObjIE = Nothing End Sub
48 名前:nobodyさん [04/12/27 22:19:11 ID:MJXdJeak] Private Function ReadFile(strPath) On Error Resume Next Dim strMes Dim FSO Dim f Dim fStream 'オブジェクト作成 Set FSO = CreateObject("Scripting.FileSystemObject") 'ストリームオブジェクト作成 Set fStream = FSO.OpenTextFile(strPath) '文字列取得 strMes = fStream.ReadAll() ReadFile = strMes End Function
49 名前:nobodyさん [04/12/27 22:19:45 ID:MJXdJeak] Private Function OpenIE(u) On Error Resume Next mObjIE.Height = 50 mObjIE.Width = 100 mObjIE.Visible = True mObjIE.Navigate u Do Until mObjIE.Busy = False WScript.Sleep 2000 Loop End Function
50 名前:名無し募集中。。。 [05/01/12 01:45:43 ID:pbwyz1nG] これって、Windows系レンタルサーバとかでも使えるのかな?
51 名前:nobodyさん mailto:sage [05/02/24 10:23:26 ID:???] 某スレでCGI作ることになった。 俺はCGI初挑戦。 JavaScriptが比較的得意なので、WSHで行くことにした。 何かあったら、書かせてもらう。
52 名前:51 mailto:sage [05/02/25 17:24:10 ID:???] とりあえず、必要な処理をPerlのソース見ながら移植してたんだが、 JavaScriptだけだと、Requestのdecode出来ない事に気づいた。 内部でVBscript呼んで済ませるかな。
53 名前:51 mailto:sage [05/03/04 14:40:55 ID:???] ネットで、VBScriptでのURLdecode処理見つけて済ました。 VBScript URL decodeでググルと3番目くらいに出た掲示板から。
54 名前:1 mailto:sage [2005/04/12(火) 17:15:02 ID:???] かなりおひさしぶりです。懲りずに続けます。 >46-49 InternetExplorerオブジェクトですね 今さっと見ただけなので何に使うかあとで確認します。 >53 日本語デコードができないと困りますよね。ASPの組み込みオブジェクトはASP 動作でないと使えませんのでここでは当然自分でやらねばなりません。 とりあえす、1が自作したものも上げておきます。動けばいいで作成したのでバグありと前提で。 IE6、N6で昔確認しました。
55 名前:1 mailto:sage [2005/04/12(火) 17:41:14 ID:???] Option Explicit '●エンコード文字列分解の正規表現 Private ObjRgExDecode Set ObjRgExDecode=New RegExp With ObjRgExDecode .Global=true .Pattern="%[0-9A-F][0-9A-F]|." .IgnoreCase=true End With
56 名前:1 mailto:sage [2005/04/12(火) 17:43:48 ID:???] '●シフトJISデコード sc;エンコード文字列 Public Function PF_Decode(ByVal sc) Dim ms,d0,d1,d2,d3,d,s On Error Resume Next sc=replace(sc,"+"," ",1,-1,1) Set ms=ObjRgExDecode.Execute(sc) d0=""
57 名前:1 mailto:sage [2005/04/12(火) 17:45:51 ID:???] For Each d1 in ms d2=split(d1,"%") if d0="" then '1バイト目か? if d2(0)="" then 'エンコード文字だったら d3=clng("&H" & d2(1)) if (d3>=&H81 and d3<=&H9f) or (d3>=&He0 and d3<=&Hef) then '2バイト文字の1バイト目なら d0=d2(1) d="" else d0="" d=chr("&H" & d2(1)) End if Else d0="" d=d2(0) End if
58 名前:1 mailto:sage [2005/04/12(火) 17:46:42 ID:???] Else '日本語2バイト目だったら if d2(0)="" then 'エンコード文字だったら d=chr("&H" & d0 & d2(1)) d0="" else '通常文字だったら d=chr("&H" & d0 & hex( asc(d2(0)) ) ) d0="" end if End if s=s & d next if err.number>0 then PF_Decode="" Else PF_Decode=CStr(s) End if End Function
59 名前:1 mailto:age [2005/04/12(火) 18:02:26 ID:???] >>55-58 これらは連続しています。 1つのVBSファイルにコピーしてください。 ファイル名はなんでもいいです。support01.vbsとでもしておきます。 wsfファイルでライブラリインクルードするとJScriptでも使えます。 VBSのPF_Decode関数はエラーなら空文字列を返します。 以下、CGI実行.wsfファイルソースの例。 なお、</SCRIPT> は省略して <SCRIPT 〜 />という書き方はしゃれてますw <job> <SCRIPT language="vbs" src="./support01.vbs" /> <SCRIPT language="JScript"> //例 var sText=PF_Decode(デコードしたい文字列); </SCRIPT> </job>
60 名前:nobodyさん [2005/04/12(火) 18:07:49 ID:w/mYA2Io] なにこの気持ち悪いオナヌースレ
61 名前:1 mailto:sage [2005/04/12(火) 23:59:48 ID:???] デコードVBS関数その2です。こちらのがいいかも。なお、Windows環境を前提。自分は >>1 でもあるように不特定へのインターネット上公開を前提としてませんのであしらかず。 以下、連続します。同じように1つのファイルにコピーして下さい。 '●正規表現を定義 Private ObjRgExDecode Set ObjRgExDecode=New RegExp With ObjRgExDecode .Global=true .IgnoreCase=true .Pattern ="(?:%[0-9a-f][0-9a-f])|." End With
62 名前:61の続き mailto:sage [2005/04/13(水) 00:04:06 ID:???] '●WinIEからのシフトJISデコード関数 sc;エンコード文字列 Public Function PF_Decode(ByVal sc) Dim ms,d0,d1,d,s On Error Resume Next Set ms=ObjRgExDecode.Execute (sc) For each d in ms if d0>"" then 'trueなら2バイト文字の2バイト目を調べる if left(d,1)="%" then 'エンコード文字 s=s & Chr(Clng(d0 & replace(d,"%",vbnullstring))) d0="" Else '2バイト目のはず s=s & Chr(CLng(d0 & "00") + AscB(d)) d0="" End if Else '1バイト目又は通常文字を調べる if Left(d,1)="%" then 'エンコード文字 d0=replace(d,"%","&H") d1=Clng(d0) if (&H81<=d1 and d1<=&H9f) or (&He0<=d1 and d1<=&Hfc) then '2バイト文字の1バイト目 else '1バイト文字エンコード d0="" s= s & Chr(d1) End if
63 名前:62の続き mailto:sage [2005/04/13(水) 00:05:49 ID:???] Else '通常文字とみなす if d="+" then s=s & " " else s=s & d end if End if End if next PF_Decode=s End Function
64 名前:1 mailto:sage [2005/04/13(水) 00:28:04 ID:???] >>61-63 は連続していますので、コピーして1つの.vbsファイルにして下さい。 ファイル名はとりあえず、support02.vbsとでもしておきます。 使用法は同じです。PF_Decode関数の引数にエンコード文字列を与えて呼べば、デコードされた文字列が返ります。 JScript,VBSの正規表現はPerlのものに比べると機能が貧弱です。 従ってもっと単純な方法(正規表現を使わず順に1文字づつフラグなどを使い調べていくとか)のほうが速いかも知れません。 面倒ですよねぇ(笑)
65 名前:nobodyさん mailto:sage [2005/04/13(水) 02:27:56 ID:???] 【ちょっと一息。】 WSHに限りませんが、オブジェクト操作においての注意点を少しあげておきます。 JScriptではオブジェクトメソッドとしての実行呼び出しには引数がなくても()を付けます。 例えば >>11 のQuitメソッド や >>16 のReadAllメソッドで言えば、 WScript.Quit(); var sText=WScript.StdIn.ReadAll(); のようにします。 VBSでは引数のない場合の空カッコは通常わざわざ書く必要がありません。 使うならCallステートメント形式にします。 VBSとJScriptを両方使っているとJScriptで()を忘れることがあるかも知れません。という事でした。
66 名前:nobodyさん mailto:sage [2005/04/15(金) 00:55:25 ID:???] 【AN HTTPD ワンポイント】 >>3 のように 実際に.wsf .vbs .js の拡張子ファイルをCGIスクリプトとして登録すると、 DHTMLとしてのクライアント実行させたい.vbsと.jsファイルも設置してしまうと クライアントがファイル要求した段階で当然サーバー上でWSHでCGI実行される事になる。 これはセキュリティ上留意して欲しい。 これを避けたい場合は、 ・クライアントスクリプトはスクリプトファイルを使わずHTMLで混在記述する。 ・CGIスクリプトファイルのほうを別の独自の拡張子にする。スクリプト実行のWScript.exeの指定さえ合っていればOKである。 また、これは基本だがCGI実行許可フォルダを限定する場合、許可していないフォルダに置いてしまうと当然、スクリプトファイルはCGI実行されずDLされ中身を見られてしまう。
67 名前:nobodyさん [2005/04/15(金) 01:42:25 ID:iiba0wU4] >>66 補足 .vbsと.jsファイルを独自拡張子にしてCGI実行する場合、 例えば、Test.vbsファイルをTest.vbcgiという独自拡張子に変えて使いたい場合、 AN HTTPDには VBScriptエンジンで実行させたい拡張子をまとめて、 実行ファイルには WScript //E:vbscript のように指定して登録して欲しい。 ※WScript.exenのパスが通っているだろうからこれでOK。 //E:実行させたい指定スクリプトエンジン名 のオプション指定を忘れないように。
68 名前:nobodyさん mailto:sage [2005/04/15(金) 01:46:07 ID:???] >>67 訂正w 誤り箇所 ※WScript.exenのパスが 訂正後→ ※WScript.exeへのパスが 下書きなんかないし、ダラダラ書きで、ageちゃってるし だって眠いんだもんw
69 名前:nobodyさん mailto:sage [2005/04/15(金) 17:02:04 ID:???] 【VBScriptサンプル02 その1 HTMLフォーム】 HTMLフォームからの受信データを処理するサンプル。sample02.htmで設置。 <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" Content="text/html; charset=x-sjis"> <TITLE></TITLE> </HEAD> <BODY> <FORM action="./sample02.wsf" method="post" name="form1" taerget="_blank"> テキスト1<BR> <INPUT name="txt1"><BR> テキスト2<BR> <TEXTAREA name="txt2" wrap=off></TEXTAREA><BR> <INPUT type="submit" value="Submit" name="submit1"> </FORM> </BODY> </HTML>
70 名前:nobodyさん mailto:sage [2005/04/15(金) 17:06:31 ID:???] 【VBScriptサンプル02 その2 CGIスクリプトWSFファイル】 以下をその1のsample02.htmと同じ、sample02.wsfで設置、なおコードを見ても分かるように、>>61-63 のsupport02.vbsファイルも設置。 <JOB> <SCRIPT language=vbs src="support02.vbs" /> <SCRIPT language=vbs> Option Explicit Private ObjWshShell,ColWshEnv Private d,d0,d1,d2 Set ObjWshShell=WScript.CreateObject("WScript.Shell") Set ColWshEnv=ObjWshShell.Environment("Process") Select Case ColWshEnv("REQUEST_METHOD") 'フォーム送信データを取得 Case "POST" d=WScript.StdIn.ReadAll '実際にはサイズチェックを事前にすべき。 Case "GET" d=ColWshEnv("QUERY_STRING") End Select With WScript.StdOut .WriteLine "Content-type: text/html" & vbCRLF & vbCRLF & "<HTML><HEAD><TITLE>サンプル02</TITLE></HEAD><BODY noWrap>" .WriteLine "生データ<BR>" & d & "<BR>取得データ<BR>" d0=Split(d,"&",-1,1) 'POST生データを"name=data"単位で分離 For Each d1 in d0 d2=Split(d1,"=",2,1) ' "name=data"をnameとdataに要素数2の配列に分離格納 .WriteLine d2(0) & "=" & PF_Decode(d2(1)) & "<BR>" Next .WriteLine "完了</BODY>" End With </SCRIPT> </JOB>
71 名前:nobodyさん mailto:sage [2005/04/15(金) 17:07:23 ID:???] 【VBScriptサンプル02 その2 CGIスクリプトWSFファイル】 以下をその1のsample02.htmと同じ、sample02.wsfで設置、なおコードを見ても分かるように、>>61-63 のsupport02.vbsファイルも設置。 <JOB> <SCRIPT language=vbs src="support02.vbs" /> <SCRIPT language=vbs> Option Explicit Private ObjWshShell,ColWshEnv Private d,d0,d1,d2 Set ObjWshShell=WScript.CreateObject("WScript.Shell") Set ColWshEnv=ObjWshShell.Environment("Process") Select Case ColWshEnv("REQUEST_METHOD") 'フォーム送信データを取得 Case "POST" d=WScript.StdIn.ReadAll '実際にはサイズチェックを事前にすべき。 Case "GET" d=ColWshEnv("QUERY_STRING") End Select With WScript.StdOut .WriteLine "Content-type: text/html" & vbCRLF & vbCRLF & "<HTML><HEAD><TITLE>サンプル02</TITLE></HEAD><BODY noWrap>" .WriteLine "生データ<BR>" & d & "<BR>取得データ<BR>" d0=Split(d,"&",-1,1) 'POST生データを"name=data"単位で分離 For Each d1 in d0 d2=Split(d1,"=",2,1) ' "name=data"をnameとdataに要素数2の配列に分離格納 .WriteLine d2(0) & "=" & PF_Decode(d2(1)) & "<BR>" Next .WriteLine "完了</BODY>" End With </SCRIPT> </JOB>
72 名前:nobodyさん mailto:sage [2005/04/15(金) 17:21:38 ID:???] 【VBScriptサンプル02 解説1】 >>70-71 重複失礼。どちらも同じ内容なの。 >>69 訂正。 <FORM action="./sample02.wsf" method="post" name="form1" taerget="_blank"> の taerget="_blank" の taerget は誤り。 targetに直してw
73 名前:nobodyさん mailto:sage [2005/04/15(金) 17:34:37 ID:???] 【VBScriptサンプル02 解説2】 このサンプル02は sample02.htm >>69 sample02.wsf >>70 ※71は70と同じものなので無視。 support02.vbs >>61-63 の3つのファイルを同じフォルダに設置してください。 sample02.htmを表示して送信して下さい。フォームからのデータ取得のサンプルです。 あくまでサンプルですので、エラー処理はしていませんし、実用コードではありません。 POST、GETに対応していますが、POSTデータの場合は実際はただReadAllで読み込むの注意です。 POSTの場合、サイズが巨大なものが有り得ますので、事前サイズチェックはしましょう。
74 名前:nobodyさん [2005/07/18(月) 02:41:24 ID:MLViLjPO] ホス
75 名前:nobodyさん [2005/07/20(水) 01:42:56 ID:P18HiGG/] ホシュホシュ
76 名前:1 mailto:sage [2005/07/24(日) 16:43:18 ID:???] 保守されていたので、ネタを何か(w >>45 俺もわかんない(w 初めてWebサイトみたときの記憶で、質問をジエンするときに使う感じでうろ覚え(w FAQに似てると思うけど(w >>50 WSHは使わせないというか、最初から危なくて業務用Winサーバーに入れとかないでしょ。 ここはプライベートというか、あくまで遊びだから。 >>60 みんなももっとネタ出してよ。 【ついでに】 ・WSH関係あさればたまに目にすると思うけど。バイナリーのファイル入出力はADO2.8がインストされてればADODB.Streamでできるんだけどさ。 CGI実行時に標準入出力を読み書きする解決にはならないよん。 ・>>55-58 >>61-63 は Shift-JISデコード関数をVBSで書いてるけどVBSエンジンだけインクルードしてChrやAsc関数をJScropt関数で作ったほうが速いいかなぁ? 作ってみるわ。誰かもやってよ(w
77 名前:1 mailto:sage [2005/07/24(日) 16:51:21 ID:???] >>76 思いつき書き込みしかしないから(w、またやってしまった 【訂正】 【ついでに】 >ChrやAsc関数をJScropt関数で作ったほうが速いいかなぁ? JScropt→JScript 書き方が悪くて意味が伝わりませんね? Chr関数自体をJScriptで作るのではなく、 JScript中でVBSのChr関数を呼び出して、JScript製のデコード関数を作ると言う意味です。 JScriptのほうが正規表現やユーザー関数の拡張性が高いからね、VBSより効率的にかけるかな。 あとでやっておきます。いつかね(w
78 名前:nobodyさん mailto:age [2005/07/24(日) 17:04:20 ID:???] 自age (w みんなAN HTTPDめんどいのかなぁ
79 名前:nobodyさん mailto:age [2005/09/06(火) 02:04:33 ID:???] つーか、デコードするCOMオブジェクトないの? IEは公開してないのか?
80 名前:nobodyさん mailto:sage [2006/05/22(月) 08:58:11 ID:???] ほす
81 名前:nobodyさん mailto:sage [2006/07/08(土) 09:15:04 ID:???] このスレの内容にばちこーん興味を持ったので保守
82 名前:nobodyさん [2006/08/24(木) 12:18:03 ID:UeLY+x3U] 藁をもつかむ気持ちでお願いします。 vbsからexcelのマクロを起動する方法ってどうするのでしょうか? エクセルマクロを使用するためにtest.wsfからvbs.vbsを呼んでいます。 下記のソースでtest.xlsに埋め込まれているMacro1というマクロを呼び出そうと しましたが「オブジェクトでサーポートされていないプロパティです」 というエラーが出てしまいます。 ------------------------------------test.wsf記述 <job id="ExcelJob"> <reference guid="00020813-0000-0000-C000-000000000046"></reference> <script language="VBScript" src="./vbs.vbs"></script> <script language="VBScript"> Call prcMain </script> </job> ------------------------------------vbs.vbs記述 Sub prcMain() Set Excel = CreateObject("Excel.Application") Excel.Workbooks.Open("c:\test.xls") Set xlSheet = Excel.Worksheets(1) Excel.Visible = True Set objSelection = Excel.Workbooks(1).Worksheets(1).Macro1 End Sub
83 名前:82 mailto:sage [2006/08/24(木) 12:48:36 ID:???] すいません板違いでした。Web製作板へ行ってきます。
84 名前:nobodyさん mailto:sage [2006/08/24(木) 18:56:31 ID:???] >>82-83 Web製作ではなく↓に誘導しておきます。 WSH(・∀・)スレッド! pc8.2ch.net/test/read.cgi/tech/1055075469/l50
85 名前:nobodyさん mailto:age [2006/09/27(水) 19:51:41 ID:???] いろいろなサイトを閲覧して、ローカルPCに溜まったCookieファイルを、VBScriptで定期的に自動消去する処理は、どうすれば良いでしょうか? ttp://www.happy2-island.com/vbs/cafe02/capter00210.shtml ファイルの削除を参考にしてみましたが、Cookieファイルの指定がうまくできませんでした。
86 名前:nobodyさん mailto:sage [2006/09/28(木) 00:09:34 ID:???] >>85 IEのCOM使ったほうがいいぞ あと↓で聞いたほうがいい お前ら、wsh使ってますか? part6 pc8.2ch.net/test/read.cgi/win/1155040873/
87 名前:nobodyさん [2006/09/28(木) 00:44:11 ID:23IKIm9v] >>86 どうもありがとう。
88 名前:nobodyさん mailto:sage [2007/07/04(水) 14:20:44 ID:???] 何にせよ、ありがとうと言いたい
89 名前:nobodyさん [2007/09/06(木) 00:53:56 ID:lxdRIcpr] WSH初心者ですが少し教えてください 特定のソフトを起動するためのVBSの書式を教えてください ちなみにバッチファイルでは起動しないソフトもあったのでこちらが良いと言われました ソフトは壷です "C:\Program Files\2chtubo\2chtubo.exe" 通常ならこのようなバッチファイルで起動するはずなんですが なぜか起動しませんでした なのでVBSでやってみたいです
90 名前:nobodyさん mailto:sage [2007/09/06(木) 09:46:52 ID:???] >WSH初心者ですが少し教えてください 初心者だから??なに? >特定のソフトを起動するためのVBSの書式を教えてください ええと、、、ググリましたか? >ちなみにバッチファイルでは起動しないソフトもあったのでこちらが良いと言われました どちらさまに言われましたか? >なぜか起動しませんでした。なのでVBSでやってみたいです やりたいなら調べろよ
91 名前:nobodyさん mailto:sage [2007/09/06(木) 18:20:14 ID:???] >>89 Wscript.Run "C:\Program Files\2chtubo\2chtubo.exe"
92 名前:nobodyさん [2008/03/10(月) 10:17:26 ID:nD3TpBhG] ローカルで定型処理に VBScript を使っているのですが, デバッガとしてフリーで使えるものって何かありませんでしょうか? たとえばどれかの Express Edition とか. 職場では Visual Studio 2005 Professional Edition を使って いるのですが,自宅でも作業がしたくって.
93 名前:nobodyさん mailto:sage [2008/03/12(水) 22:41:47 ID:???] ttp://www.microsoft.com/downloads/details.aspx?FamilyID=e606e71f-ba7f-471e-a57d-f2216d81ec3d&DisplayLang=ja をインストールして、cscript.exeやwscript.exeに//Dオプションを付けて スクリプトを実行すればデバッガが使用可能になりますよ
94 名前:nobodyさん [2008/05/25(日) 01:09:26 ID:uDPNiz6J] JavaScript でJISエンコードが可能な、escape() 関数ライブラリ ttp://nurucom-archives.hp.infoseek.co.jp/digital/ 但しサーバー運用に向いているかは未確認w (負荷とか)