2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

☆WSHでCGI★JScriptVBScript

1 :nobodyさん:03/08/01 22:37 ID:???.net
【このスレの概要】
・Windows Script Host (=WSH)をCGI利用する
・JScript、又はVBScriptをCGIスクリプトとする
・自PCをサーバー稼動させる事を前提とする
・原則、Windows以外はフリーで入手できるアプリ、ツールの利用

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

【お約束】
・試行は自PCで自己責任で行う
・商用実利用は前提としていない、本スレは、プログラム技術的知識、お遊び、趣味の範囲であることを理解する

51 :nobodyさん:05/02/24 10:23:26 ID:???.net
某スレでCGI作ることになった。
俺はCGI初挑戦。
JavaScriptが比較的得意なので、WSHで行くことにした。
何かあったら、書かせてもらう。


52 :51:05/02/25 17:24:10 ID:???.net
とりあえず、必要な処理をPerlのソース見ながら移植してたんだが、
JavaScriptだけだと、Requestのdecode出来ない事に気づいた。
内部でVBscript呼んで済ませるかな。


53 :51:05/03/04 14:40:55 ID:???.net
ネットで、VBScriptでのURLdecode処理見つけて済ました。
VBScript URL decodeでググルと3番目くらいに出た掲示板から。



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


55 :1:2005/04/12(火) 17:41:14 ID:???.net
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:2005/04/12(火) 17:43:48 ID:???.net

'●シフト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:2005/04/12(火) 17:45:51 ID:???.net
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:2005/04/12(火) 17:46:42 ID:???.net
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:2005/04/12(火) 18:02:26 ID:???.net
>>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.net
なにこの気持ち悪いオナヌースレ

61 :1:2005/04/12(火) 23:59:48 ID:???.net
デコード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の続き:2005/04/13(水) 00:04:06 ID:???.net
'●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の続き:2005/04/13(水) 00:05:49 ID:???.net
Else '通常文字とみなす
if d="+" then
s=s & " "
else
s=s & d
end if
End if
End if

next

PF_Decode=s

End Function


64 :1:2005/04/13(水) 00:28:04 ID:???.net
>>61-63
は連続していますので、コピーして1つの.vbsファイルにして下さい。
ファイル名はとりあえず、support02.vbsとでもしておきます。
使用法は同じです。PF_Decode関数の引数にエンコード文字列を与えて呼べば、デコードされた文字列が返ります。
JScript,VBSの正規表現はPerlのものに比べると機能が貧弱です。
従ってもっと単純な方法(正規表現を使わず順に1文字づつフラグなどを使い調べていくとか)のほうが速いかも知れません。
面倒ですよねぇ(笑)


65 :nobodyさん:2005/04/13(水) 02:27:56 ID:???.net
【ちょっと一息。】
WSHに限りませんが、オブジェクト操作においての注意点を少しあげておきます。
JScriptではオブジェクトメソッドとしての実行呼び出しには引数がなくても()を付けます。
例えば >>11 のQuitメソッド や >>16 のReadAllメソッドで言えば、
WScript.Quit();
var sText=WScript.StdIn.ReadAll();
のようにします。
VBSでは引数のない場合の空カッコは通常わざわざ書く必要がありません。
使うならCallステートメント形式にします。

VBSとJScriptを両方使っているとJScriptで()を忘れることがあるかも知れません。という事でした。


66 :nobodyさん:2005/04/15(金) 00:55:25 ID:???.net
【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.net
>>66補足
.vbsと.jsファイルを独自拡張子にしてCGI実行する場合、
例えば、Test.vbsファイルをTest.vbcgiという独自拡張子に変えて使いたい場合、
AN HTTPDには VBScriptエンジンで実行させたい拡張子をまとめて、
実行ファイルには
WScript //E:vbscript
のように指定して登録して欲しい。
※WScript.exenのパスが通っているだろうからこれでOK。
//E:実行させたい指定スクリプトエンジン名 のオプション指定を忘れないように。





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

下書きなんかないし、ダラダラ書きで、ageちゃってるし
だって眠いんだもんw

69 :nobodyさん:2005/04/15(金) 17:02:04 ID:???.net
【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さん:2005/04/15(金) 17:06:31 ID:???.net
【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さん:2005/04/15(金) 17:07:23 ID:???.net
【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さん:2005/04/15(金) 17:21:38 ID:???.net
【VBScriptサンプル02 解説1】
>>70-71 重複失礼。どちらも同じ内容なの。

>>69 訂正。
<FORM action="./sample02.wsf" method="post" name="form1" taerget="_blank">
の taerget="_blank" の taerget は誤り。
targetに直してw
 

73 :nobodyさん:2005/04/15(金) 17:34:37 ID:???.net
【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.net
ホス

75 :nobodyさん:2005/07/20(水) 01:42:56 ID:P18HiGG/.net
ホシュホシュ

76 :1:2005/07/24(日) 16:43:18 ID:???.net
保守されていたので、ネタを何か(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:2005/07/24(日) 16:51:21 ID:???.net
>>76 思いつき書き込みしかしないから(w、またやってしまった
【訂正】
 【ついでに】
 >ChrやAsc関数をJScropt関数で作ったほうが速いいかなぁ?
 JScropt→JScript

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


78 :nobodyさん:2005/07/24(日) 17:04:20 ID:???.net
自age (w

みんなAN HTTPDめんどいのかなぁ

79 :nobodyさん:2005/09/06(火) 02:04:33 ID:???.net
つーか、デコードするCOMオブジェクトないの?
IEは公開してないのか?


80 :nobodyさん:2006/05/22(月) 08:58:11 ID:???.net
ほす

81 :nobodyさん:2006/07/08(土) 09:15:04 ID:???.net
このスレの内容にばちこーん興味を持ったので保守

82 :nobodyさん:2006/08/24(木) 12:18:03 ID:UeLY+x3U.net
藁をもつかむ気持ちでお願いします。
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:2006/08/24(木) 12:48:36 ID:???.net
すいません板違いでした。Web製作板へ行ってきます。

84 :nobodyさん:2006/08/24(木) 18:56:31 ID:???.net
>>82-83
Web製作ではなく↓に誘導しておきます。
WSH(・∀・)スレッド!
http://pc8.2ch.net/test/read.cgi/tech/1055075469/l50

85 :nobodyさん:2006/09/27(水) 19:51:41 ID:???.net
いろいろなサイトを閲覧して、ローカルPCに溜まったCookieファイルを、VBScriptで定期的に自動消去する処理は、どうすれば良いでしょうか?
ttp://www.happy2-island.com/vbs/cafe02/capter00210.shtml
ファイルの削除を参考にしてみましたが、Cookieファイルの指定がうまくできませんでした。


86 :nobodyさん:2006/09/28(木) 00:09:34 ID:???.net
>>85
IEのCOM使ったほうがいいぞ

あと↓で聞いたほうがいい

お前ら、wsh使ってますか? part6
http://pc8.2ch.net/test/read.cgi/win/1155040873/

87 :nobodyさん:2006/09/28(木) 00:44:11 ID:23IKIm9v.net
>>86
どうもありがとう。


88 :nobodyさん:2007/07/04(水) 14:20:44 ID:???.net
何にせよ、ありがとうと言いたい

89 :nobodyさん:2007/09/06(木) 00:53:56 ID:lxdRIcpr.net
WSH初心者ですが少し教えてください
特定のソフトを起動するためのVBSの書式を教えてください
ちなみにバッチファイルでは起動しないソフトもあったのでこちらが良いと言われました
ソフトは壷です
"C:\Program Files\2chtubo\2chtubo.exe"
通常ならこのようなバッチファイルで起動するはずなんですが
なぜか起動しませんでした
なのでVBSでやってみたいです

90 :nobodyさん:2007/09/06(木) 09:46:52 ID:???.net
>WSH初心者ですが少し教えてください
初心者だから??なに?

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

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

>なぜか起動しませんでした。なのでVBSでやってみたいです
やりたいなら調べろよ

91 :nobodyさん:2007/09/06(木) 18:20:14 ID:???.net
>>89
Wscript.Run "C:\Program Files\2chtubo\2chtubo.exe"

92 :nobodyさん:2008/03/10(月) 10:17:26 ID:nD3TpBhG.net
ローカルで定型処理に VBScript を使っているのですが,
デバッガとしてフリーで使えるものって何かありませんでしょうか?
たとえばどれかの Express Edition とか.

職場では Visual Studio 2005 Professional Edition を使って
いるのですが,自宅でも作業がしたくって.

93 :nobodyさん:2008/03/12(水) 22:41:47 ID:???.net
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.net

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

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

但しサーバー運用に向いているかは未確認w
(負荷とか)

95 :電脳プリオン:2011/12/17(土) 20:01:41.87 ID:???.net ?2BP(1960)

  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/ ←>>9
 (_フ彡        /

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

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

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

島本町は日本の恥!島本町は日本の迷惑!

97 :nobodyさん:2014/02/13(木) 19:01:25.12 ID:wYrEGcCV.net
an Httpdとjscriptでcgiするのは簡単でいいね

98 :nobodyさん:2017/01/28(土) 01:45:45.31 ID:???.net
Jscriptで天気予報を取得したいのですが、JSONの取り扱いで躓いています。
具体的にはJSON.parseなどメソッドが使えません。
英語版のMSDNにはあるのですが日本語版では見当たらず・・・
https://msdn.microsoft.com/en-us/library/cc836466(v=vs.84).aspx

マイナーすぎるのかもしれませんが分かる方いましたらヒントでも頂けると助かります。

99 :nobodyさん:2017/01/30(月) 01:14:41.51 ID:???.net
「wsh jscript json」で検索して

100 :nobodyさん:2017/12/30(土) 13:12:06.97 ID:YhlYw6jg.net
誰でも簡単にネットで稼げる方法など
参考までに、
⇒ 『半藤のブブイウイウレレ』 というサイトで見ることができます。

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

Q5NODT0RAA

42 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :

read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★