X



★WSHでCGI★JScriptVBScript
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
垢版 |
03/08/01 22:37ID:???
【このスレの概要】
・Windows Script Host (=WSH)をCGI利用する
・JScript、又はVBScriptをCGIスクリプトとする
・自PCをサーバー稼動させる事を前提とする
・原則、Windows以外はフリーで入手できるアプリ、ツールの利用

【対象環境】
・Windows95以上及び、WSH5.6以上のインストール済み
・Webサーバーソフトにはフリー配布のAN HTTPDを前提とする
※作者:中田 昭雄氏 配布元:ttp://www.st.rim.or.jp/~nakata/
なお、このスレでの内容を直接、中田氏サイトへ質問するのはやめて頂きたい。

【お約束】
・試行は自PCで自己責任で行う
・商用実利用は前提としていない、本スレは、プログラム技術的知識、お遊び、趣味の範囲であることを理解する
0051nobodyさん
垢版 |
05/02/24 10:23:26ID:???
某スレでCGI作ることになった。
俺はCGI初挑戦。
JavaScriptが比較的得意なので、WSHで行くことにした。
何かあったら、書かせてもらう。
005251
垢版 |
05/02/25 17:24:10ID:???
とりあえず、必要な処理をPerlのソース見ながら移植してたんだが、
JavaScriptだけだと、Requestのdecode出来ない事に気づいた。
内部でVBscript呼んで済ませるかな。
005351
垢版 |
05/03/04 14:40:55ID:???
ネットで、VBScriptでのURLdecode処理見つけて済ました。
VBScript URL decodeでググルと3番目くらいに出た掲示板から。

00541
垢版 |
2005/04/12(火) 17:15:02ID:???
かなりおひさしぶりです。懲りずに続けます。
>46-49
InternetExplorerオブジェクトですね
今さっと見ただけなので何に使うかあとで確認します。
>53
日本語デコードができないと困りますよね。ASPの組み込みオブジェクトはASP
動作でないと使えませんのでここでは当然自分でやらねばなりません。
とりあえす、1が自作したものも上げておきます。動けばいいで作成したのでバグありと前提で。
IE6、N6で昔確認しました。
00551
垢版 |
2005/04/12(火) 17:41:14ID:???
Option Explicit

'●エンコード文字列分解の正規表現
Private ObjRgExDecode

Set ObjRgExDecode=New RegExp
With ObjRgExDecode
.Global=true
.Pattern="%[0-9A-F][0-9A-F]|."
.IgnoreCase=true
End With
00561
垢版 |
2005/04/12(火) 17:43:48ID:???

'●シフト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=""
00571
垢版 |
2005/04/12(火) 17:45:51ID:???
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
00581
垢版 |
2005/04/12(火) 17:46:42ID:???
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
00591
垢版 |
2005/04/12(火) 18:02:26ID:???
>>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>
0060nobodyさん
垢版 |
2005/04/12(火) 18:07:49ID:w/mYA2Io
なにこの気持ち悪いオナヌースレ
00611
垢版 |
2005/04/12(火) 23:59:48ID:???
デコード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
006261の続き
垢版 |
2005/04/13(水) 00:04:06ID:???
'●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
006362の続き
垢版 |
2005/04/13(水) 00:05:49ID:???
Else '通常文字とみなす
if d="+" then
s=s & " "
else
s=s & d
end if
End if
End if

next

PF_Decode=s

End Function
00641
垢版 |
2005/04/13(水) 00:28:04ID:???
>>61-63
は連続していますので、コピーして1つの.vbsファイルにして下さい。
ファイル名はとりあえず、support02.vbsとでもしておきます。
使用法は同じです。PF_Decode関数の引数にエンコード文字列を与えて呼べば、デコードされた文字列が返ります。
JScript,VBSの正規表現はPerlのものに比べると機能が貧弱です。
従ってもっと単純な方法(正規表現を使わず順に1文字づつフラグなどを使い調べていくとか)のほうが速いかも知れません。
面倒ですよねぇ(笑)
0065nobodyさん
垢版 |
2005/04/13(水) 02:27:56ID:???
【ちょっと一息。】
WSHに限りませんが、オブジェクト操作においての注意点を少しあげておきます。
JScriptではオブジェクトメソッドとしての実行呼び出しには引数がなくても()を付けます。
例えば >>11 のQuitメソッド や >>16 のReadAllメソッドで言えば、
WScript.Quit();
var sText=WScript.StdIn.ReadAll();
のようにします。
VBSでは引数のない場合の空カッコは通常わざわざ書く必要がありません。
使うならCallステートメント形式にします。

VBSとJScriptを両方使っているとJScriptで()を忘れることがあるかも知れません。という事でした。
0066nobodyさん
垢版 |
2005/04/15(金) 00:55:25ID:???
【AN HTTPD ワンポイント】
>>3のように
実際に.wsf .vbs .js の拡張子ファイルをCGIスクリプトとして登録すると、
DHTMLとしてのクライアント実行させたい.vbsと.jsファイルも設置してしまうと
クライアントがファイル要求した段階で当然サーバー上でWSHでCGI実行される事になる。
これはセキュリティ上留意して欲しい。
これを避けたい場合は、
・クライアントスクリプトはスクリプトファイルを使わずHTMLで混在記述する。
・CGIスクリプトファイルのほうを別の独自の拡張子にする。スクリプト実行のWScript.exeの指定さえ合っていればOKである。

また、これは基本だがCGI実行許可フォルダを限定する場合、許可していないフォルダに置いてしまうと当然、スクリプトファイルはCGI実行されずDLされ中身を見られてしまう。
0067nobodyさん
垢版 |
2005/04/15(金) 01:42:25ID:iiba0wU4
>>66補足
.vbsと.jsファイルを独自拡張子にしてCGI実行する場合、
例えば、Test.vbsファイルをTest.vbcgiという独自拡張子に変えて使いたい場合、
AN HTTPDには VBScriptエンジンで実行させたい拡張子をまとめて、
実行ファイルには
WScript //E:vbscript
のように指定して登録して欲しい。
※WScript.exenのパスが通っているだろうからこれでOK。
//E:実行させたい指定スクリプトエンジン名 のオプション指定を忘れないように。



0068nobodyさん
垢版 |
2005/04/15(金) 01:46:07ID:???
>>67訂正w
誤り箇所
※WScript.exenのパスが
訂正後→
※WScript.exeへのパスが

下書きなんかないし、ダラダラ書きで、ageちゃってるし
だって眠いんだもんw
0069nobodyさん
垢版 |
2005/04/15(金) 17:02:04ID:???
【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>
0070nobodyさん
垢版 |
2005/04/15(金) 17:06:31ID:???
【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>
0071nobodyさん
垢版 |
2005/04/15(金) 17:07:23ID:???
【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>
0072nobodyさん
垢版 |
2005/04/15(金) 17:21:38ID:???
【VBScriptサンプル02 解説1】
>>70-71 重複失礼。どちらも同じ内容なの。

>>69 訂正。
<FORM action="./sample02.wsf" method="post" name="form1" taerget="_blank">
の taerget="_blank" の taerget は誤り。
targetに直してw
 
0073nobodyさん
垢版 |
2005/04/15(金) 17:34:37ID:???
【VBScriptサンプル02 解説2】
このサンプル02は
sample02.htm >>69
sample02.wsf >>70 ※71は70と同じものなので無視。
support02.vbs >>61-63
の3つのファイルを同じフォルダに設置してください。
sample02.htmを表示して送信して下さい。フォームからのデータ取得のサンプルです。
あくまでサンプルですので、エラー処理はしていませんし、実用コードではありません。
POST、GETに対応していますが、POSTデータの場合は実際はただReadAllで読み込むの注意です。
POSTの場合、サイズが巨大なものが有り得ますので、事前サイズチェックはしましょう。
0074nobodyさん
垢版 |
2005/07/18(月) 02:41:24ID:MLViLjPO
ホス
0075nobodyさん
垢版 |
2005/07/20(水) 01:42:56ID:P18HiGG/
ホシュホシュ
00761
垢版 |
2005/07/24(日) 16:43:18ID:???
保守されていたので、ネタを何か(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
00771
垢版 |
2005/07/24(日) 16:51:21ID:???
>>76 思いつき書き込みしかしないから(w、またやってしまった
【訂正】
 【ついでに】
 >ChrやAsc関数をJScropt関数で作ったほうが速いいかなぁ?
 JScropt→JScript

書き方が悪くて意味が伝わりませんね?
Chr関数自体をJScriptで作るのではなく、
JScript中でVBSのChr関数を呼び出して、JScript製のデコード関数を作ると言う意味です。
JScriptのほうが正規表現やユーザー関数の拡張性が高いからね、VBSより効率的にかけるかな。
あとでやっておきます。いつかね(w
0078nobodyさん
垢版 |
2005/07/24(日) 17:04:20ID:???
自age (w

みんなAN HTTPDめんどいのかなぁ
0079nobodyさん
垢版 |
2005/09/06(火) 02:04:33ID:???
つーか、デコードするCOMオブジェクトないの?
IEは公開してないのか?
0081nobodyさん
垢版 |
2006/07/08(土) 09:15:04ID:???
このスレの内容にばちこーん興味を持ったので保守
0082nobodyさん
垢版 |
2006/08/24(木) 12:18:03ID: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
008382
垢版 |
2006/08/24(木) 12:48:36ID:???
すいません板違いでした。Web製作板へ行ってきます。
0085nobodyさん
垢版 |
2006/09/27(水) 19:51:41ID:???
いろいろなサイトを閲覧して、ローカルPCに溜まったCookieファイルを、VBScriptで定期的に自動消去する処理は、どうすれば良いでしょうか?
ttp://www.happy2-island.com/vbs/cafe02/capter00210.shtml
ファイルの削除を参考にしてみましたが、Cookieファイルの指定がうまくできませんでした。
0087nobodyさん
垢版 |
2006/09/28(木) 00:44:11ID:23IKIm9v
>>86
どうもありがとう。
0088nobodyさん
垢版 |
2007/07/04(水) 14:20:44ID:???
何にせよ、ありがとうと言いたい
0089nobodyさん
垢版 |
2007/09/06(木) 00:53:56ID:lxdRIcpr
WSH初心者ですが少し教えてください
特定のソフトを起動するためのVBSの書式を教えてください
ちなみにバッチファイルでは起動しないソフトもあったのでこちらが良いと言われました
ソフトは壷です
"C:\Program Files\2chtubo\2chtubo.exe"
通常ならこのようなバッチファイルで起動するはずなんですが
なぜか起動しませんでした
なのでVBSでやってみたいです
0090nobodyさん
垢版 |
2007/09/06(木) 09:46:52ID:???
>WSH初心者ですが少し教えてください
初心者だから??なに?

>特定のソフトを起動するためのVBSの書式を教えてください
ええと、、、ググリましたか?

>ちなみにバッチファイルでは起動しないソフトもあったのでこちらが良いと言われました
どちらさまに言われましたか?

>なぜか起動しませんでした。なのでVBSでやってみたいです
やりたいなら調べろよ
0091nobodyさん
垢版 |
2007/09/06(木) 18:20:14ID:???
>>89
Wscript.Run "C:\Program Files\2chtubo\2chtubo.exe"
0092nobodyさん
垢版 |
2008/03/10(月) 10:17:26ID:nD3TpBhG
ローカルで定型処理に VBScript を使っているのですが,
デバッガとしてフリーで使えるものって何かありませんでしょうか?
たとえばどれかの Express Edition とか.

職場では Visual Studio 2005 Professional Edition を使って
いるのですが,自宅でも作業がしたくって.
0093nobodyさん
垢版 |
2008/03/12(水) 22:41:47ID:???
ttp://www.microsoft.com/downloads/details.aspx?FamilyID=e606e71f-ba7f-471e-a57d-f2216d81ec3d&DisplayLang=ja
をインストールして、cscript.exeやwscript.exeに//Dオプションを付けて
スクリプトを実行すればデバッガが使用可能になりますよ
0094nobodyさん
垢版 |
2008/05/25(日) 01:09:26ID:uDPNiz6J

JavaScript でJISエンコードが可能な、escape() 関数ライブラリ

ttp://nurucom-archives.hp.infoseek.co.jp/digital/

但しサーバー運用に向いているかは未確認w
(負荷とか)
0095電脳プリオン
垢版 |
2011/12/17(土) 20:01:41.87ID:????2BP(1960)

  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/ ←>>9
 (_フ彡        /
0096nobodyさん
垢版 |
2013/07/30(火) NY:AN:NY.ANID:FAIklnka
>大阪府三島郡島本町の小学校や中学校は、暴力イジメ学校や。
島本町の学校でいじめ・暴力・脅迫・恐喝などを受け続けて、心も身体も壊されて廃人同様になってしもうた僕が言うんやから、
まちがいないで。精神病院へ行っても、ちっとも良うならへん。教師も校長も、暴力やいじめがあっても見て見ぬフリ。
そればかりか、イジメに加担する教師もおった。 誰かがイジメを苦にして自殺しても、「本校にイジメは
なかった」と言うて逃げるんやろうなあ。
島本町の学校の関係者は、僕を捜し出して口封じをするな

>島本町って町は、暴力といじめの町なんだな

>「口封じ」なんかしません。どうぞ、気が済むまでお書き込み下さい。

島本町は日本の恥!島本町は日本の迷惑!
0097nobodyさん
垢版 |
2014/02/13(木) 19:01:25.12ID:wYrEGcCV
an Httpdとjscriptでcgiするのは簡単でいいね
0099nobodyさん
垢版 |
2017/01/28(土) 01:45:45.31ID:???
Jscriptで天気予報を取得したいのですが、JSONの取り扱いで躓いています。
具体的にはJSON.parseなどメソッドが使えません。
英語版のMSDNにはあるのですが日本語版では見当たらず・・・
https://msdn.microsoft.com/en-us/library/cc836466(v=vs.84).aspx

マイナーすぎるのかもしれませんが分かる方いましたらヒントでも頂けると助かります。
0100nobodyさん
垢版 |
2017/01/30(月) 01:14:41.51ID:???
「wsh jscript json」で検索して
0101nobodyさん
垢版 |
2017/12/30(土) 13:12:06.97ID:YhlYw6jg
誰でも簡単にネットで稼げる方法など
参考までに、
⇒ 『半藤のブブイウイウレレ』 というサイトで見ることができます。

グーグル検索⇒『半藤のブブイウイウレレ』

Q5NODT0RAA
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況