03/08/08 01:27
【ジエンF&Q】
『WSHでCGIの問題点とは?』
・FSO自体にはファイルの排他ロックが用意されていない、対策としていわゆる、ロックを示すディレクトリをフラグにする方法があるが、苦肉の策である。
Win32APIにはプロセスレベルでのロックができる関数があることはある。が公式のコンポーネント化されたものはない。
旧VisualBasicは排他ロックできるステートメントがあることはあるのだが、これをActiveXコンポーネント化して使用するのもチョットw
・現状ではバイナリデータの入出力は扱えない。したいなら外部コンポーネントで拡張しないとだめだ。
・JScriptでは文字コードにUnicodeをサポートする。Shift-JIS等への変換は単体ではできない。
※VBSは双方変換が可能である
27:nobodyさん
03/08/08 22:06 EIK+Pm9d
28:nobodyさん
03/08/08 22:07 EIK+Pm9d
>>26
URLリンク(www.microsoft.com)
29:nobodyさん
03/08/13 23:40 q7lOxmnU
AGE
30:nobodyさん
03/08/14 00:06
JScript.NETはナシ?
31:山崎 渉
03/08/15 22:33
(⌒V⌒)
│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
32:1
03/08/28 01:06
すまんね
サンプル面倒でw
チャットはまともなもんやると長くなるしなぁw
>>28
多分FSOはMSがバージョンアップするかわからんな
スクリプトで利用可能のdllでもベクターで公開望むw
>>30
.NETはコンパイラを使うしWSHとは共存できるが別物なので別スレ、このスレはWSHスクリプトベースの旧テクでできる範囲を今更模索するw
33:
03/09/18 18:07
わたしはWindows Server 2003とASPとASP.NETとSQL Serverを使っているので快適だ。ハハハー
もちろん光!
34:nobodyさん
03/12/17 00:39
今更レスしてもなんだけど
>>30
JScript.NETでCGI作って見ました。
でもこのスレの趣旨には合わないよね。
35:nobodyさん
04/01/25 01:36
hellow vbscriptができません。
どうして?
36:nobodyさん
04/01/25 01:52
w が・・・・。
逝きます。
37:nobodyさん
04/01/26 11:42
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 b4IBORXj
ここの>>1の頑張りはすごいな。感動した。
39:nobodyさん
04/01/30 16:11
>>38は>>1の自作自演ですた
40:nobodyさん
04/01/31 10:26
COM書けるkら事実上できない事って無いんだけどな・・・。
41:nobodyさん
04/02/21 21:55
【結論】
ASP+IISでいいじゃん。両方OSネイティブだし。
何で機能の劣るソフトを使わなきゃいけないの?
42:nobodyさん
04/02/21 22:12
>>41
すべてに関して果てなマーク
43:nobodyさん
04/02/22 10:16
>>42
どのへんが?
44:nobodyさん
04/04/22 08:35
保守
45:nobodyさん
04/07/20 10:44
>>1
すみません、F&Qって何の略ですか?
46:nobodyさん
04/12/27 22:17:04 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 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 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 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 pbwyz1nG
これって、Windows系レンタルサーバとかでも使えるのかな?
51:nobodyさん
05/02/24 10:23:26
某スレでCGI作ることになった。
俺はCGI初挑戦。
JavaScriptが比較的得意なので、WSHで行くことにした。
何かあったら、書かせてもらう。
52:51
05/02/25 17:24:10
とりあえず、必要な処理をPerlのソース見ながら移植してたんだが、
JavaScriptだけだと、Requestのdecode出来ない事に気づいた。
内部でVBscript呼んで済ませるかな。
53:51
05/03/04 14:40:55
ネットで、VBScriptでのURLdecode処理見つけて済ました。
VBScript URL decodeでググルと3番目くらいに出た掲示板から。
54:1
05/04/12 17:15:02
かなりおひさしぶりです。懲りずに続けます。
>46-49
InternetExplorerオブジェクトですね
今さっと見ただけなので何に使うかあとで確認します。
>53
日本語デコードができないと困りますよね。ASPの組み込みオブジェクトはASP
動作でないと使えませんのでここでは当然自分でやらねばなりません。
とりあえす、1が自作したものも上げておきます。動けばいいで作成したのでバグありと前提で。
IE6、N6で昔確認しました。
55:1
05/04/12 17:41:14
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
05/04/12 17:43:48
'●シフト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
05/04/12 17:45:51
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
05/04/12 17:46:42
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
05/04/12 18:02:26
>>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さん
05/04/12 18:07:49 w/mYA2Io
なにこの気持ち悪いオナヌースレ
61:1
05/04/12 23:59:48
デコード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の続き
05/04/13 00:04:06
'●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の続き
05/04/13 00:05:49
Else '通常文字とみなす
if d="+" then
s=s & " "
else
s=s & d
end if
End if
End if
next
PF_Decode=s
End Function
64:1
05/04/13 00:28:04
>>61-63
は連続していますので、コピーして1つの.vbsファイルにして下さい。
ファイル名はとりあえず、support02.vbsとでもしておきます。
使用法は同じです。PF_Decode関数の引数にエンコード文字列を与えて呼べば、デコードされた文字列が返ります。
JScript,VBSの正規表現はPerlのものに比べると機能が貧弱です。
従ってもっと単純な方法(正規表現を使わず順に1文字づつフラグなどを使い調べていくとか)のほうが速いかも知れません。
面倒ですよねぇ(笑)
65:nobodyさん
05/04/13 02:27:56
【ちょっと一息。】
WSHに限りませんが、オブジェクト操作においての注意点を少しあげておきます。
JScriptではオブジェクトメソッドとしての実行呼び出しには引数がなくても()を付けます。
例えば >>11 のQuitメソッド や >>16 のReadAllメソッドで言えば、
WScript.Quit();
var sText=WScript.StdIn.ReadAll();
のようにします。
VBSでは引数のない場合の空カッコは通常わざわざ書く必要がありません。
使うならCallステートメント形式にします。
VBSとJScriptを両方使っているとJScriptで()を忘れることがあるかも知れません。という事でした。
66:nobodyさん
05/04/15 00:55:25
【AN HTTPD ワンポイント】
>>3のように
実際に.wsf .vbs .js の拡張子ファイルをCGIスクリプトとして登録すると、
DHTMLとしてのクライアント実行させたい.vbsと.jsファイルも設置してしまうと
クライアントがファイル要求した段階で当然サーバー上でWSHでCGI実行される事になる。
これはセキュリティ上留意して欲しい。
これを避けたい場合は、
・クライアントスクリプトはスクリプトファイルを使わずHTMLで混在記述する。
・CGIスクリプトファイルのほうを別の独自の拡張子にする。スクリプト実行のWScript.exeの指定さえ合っていればOKである。
また、これは基本だがCGI実行許可フォルダを限定する場合、許可していないフォルダに置いてしまうと当然、スクリプトファイルはCGI実行されずDLされ中身を見られてしまう。
67:nobodyさん
05/04/15 01:42:25 iiba0wU4
>>66補足
.vbsと.jsファイルを独自拡張子にしてCGI実行する場合、
例えば、Test.vbsファイルをTest.vbcgiという独自拡張子に変えて使いたい場合、
AN HTTPDには VBScriptエンジンで実行させたい拡張子をまとめて、
実行ファイルには
WScript //E:vbscript
のように指定して登録して欲しい。
※WScript.exenのパスが通っているだろうからこれでOK。
//E:実行させたい指定スクリプトエンジン名 のオプション指定を忘れないように。
68:nobodyさん
05/04/15 01:46:07
>>67訂正w
誤り箇所
※WScript.exenのパスが
訂正後→
※WScript.exeへのパスが
下書きなんかないし、ダラダラ書きで、ageちゃってるし
だって眠いんだもんw
69:nobodyさん
05/04/15 17:02:04
【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さん
05/04/15 17:06:31
【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さん
05/04/15 17:07:23
【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さん
05/04/15 17:21:38
【VBScriptサンプル02 解説1】
>>70-71 重複失礼。どちらも同じ内容なの。
>>69 訂正。
<FORM action="./sample02.wsf" method="post" name="form1" taerget="_blank">
の taerget="_blank" の taerget は誤り。
targetに直してw
73:nobodyさん
05/04/15 17:34:37
【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さん
05/07/18 02:41:24 MLViLjPO
ホス
75:nobodyさん
05/07/20 01:42:56 P18HiGG/
ホシュホシュ
76:1
05/07/24 16:43:18
保守されていたので、ネタを何か(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
05/07/24 16:51:21
>>76 思いつき書き込みしかしないから(w、またやってしまった
【訂正】
【ついでに】
>ChrやAsc関数をJScropt関数で作ったほうが速いいかなぁ?
JScropt→JScript
書き方が悪くて意味が伝わりませんね?
Chr関数自体をJScriptで作るのではなく、
JScript中でVBSのChr関数を呼び出して、JScript製のデコード関数を作ると言う意味です。
JScriptのほうが正規表現やユーザー関数の拡張性が高いからね、VBSより効率的にかけるかな。
あとでやっておきます。いつかね(w
78:nobodyさん
05/07/24 17:04:20
自age (w
みんなAN HTTPDめんどいのかなぁ
79:nobodyさん
05/09/06 02:04:33
つーか、デコードするCOMオブジェクトないの?
IEは公開してないのか?
80:nobodyさん
06/05/22 08:58:11
ほす
81:nobodyさん
06/07/08 09:15:04
このスレの内容にばちこーん興味を持ったので保守
82:nobodyさん
06/08/24 12:18:03 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
06/08/24 12:48:36
すいません板違いでした。Web製作板へ行ってきます。
84:nobodyさん
06/08/24 18:56:31
>>82-83
Web製作ではなく↓に誘導しておきます。
WSH(・∀・)スレッド!
スレリンク(tech板)l50
85:nobodyさん
06/09/27 19:51:41
いろいろなサイトを閲覧して、ローカルPCに溜まったCookieファイルを、VBScriptで定期的に自動消去する処理は、どうすれば良いでしょうか?
URLリンク(www.happy2-island.com)
ファイルの削除を参考にしてみましたが、Cookieファイルの指定がうまくできませんでした。
86:nobodyさん
06/09/28 00:09:34
>>85
IEのCOM使ったほうがいいぞ
あと↓で聞いたほうがいい
お前ら、wsh使ってますか? part6
スレリンク(win板)
87:nobodyさん
06/09/28 00:44:11 23IKIm9v
>>86
どうもありがとう。
88:nobodyさん
07/07/04 14:20:44
何にせよ、ありがとうと言いたい
89:nobodyさん
07/09/06 00:53:56 lxdRIcpr
WSH初心者ですが少し教えてください
特定のソフトを起動するためのVBSの書式を教えてください
ちなみにバッチファイルでは起動しないソフトもあったのでこちらが良いと言われました
ソフトは壷です
"C:\Program Files\2chtubo\2chtubo.exe"
通常ならこのようなバッチファイルで起動するはずなんですが
なぜか起動しませんでした
なのでVBSでやってみたいです
90:nobodyさん
07/09/06 09:46:52
>WSH初心者ですが少し教えてください
初心者だから??なに?
>特定のソフトを起動するためのVBSの書式を教えてください
ええと、、、ググリましたか?
>ちなみにバッチファイルでは起動しないソフトもあったのでこちらが良いと言われました
どちらさまに言われましたか?
>なぜか起動しませんでした。なのでVBSでやってみたいです
やりたいなら調べろよ
91:nobodyさん
07/09/06 18:20:14
>>89
Wscript.Run "C:\Program Files\2chtubo\2chtubo.exe"
92:nobodyさん
08/03/10 10:17:26 nD3TpBhG
ローカルで定型処理に VBScript を使っているのですが,
デバッガとしてフリーで使えるものって何かありませんでしょうか?
たとえばどれかの Express Edition とか.
職場では Visual Studio 2005 Professional Edition を使って
いるのですが,自宅でも作業がしたくって.
93:nobodyさん
08/03/12 22:41:47
URLリンク(www.microsoft.com)
をインストールして、cscript.exeやwscript.exeに//Dオプションを付けて
スクリプトを実行すればデバッガが使用可能になりますよ
94:nobodyさん
08/05/25 01:09:26 uDPNiz6J
JavaScript でJISエンコードが可能な、escape() 関数ライブラリ
URLリンク(nurucom-archives.hp.infoseek.co.jp)
但しサーバー運用に向いているかは未確認w
(負荷とか)