★WSHでCGI★JScriptVBScript

このエントリーをはてなブックマークに追加
48nobodyさん: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
49nobodyさん: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系レンタルサーバとかでも使えるのかな?
51nobodyさん:05/02/24 10:23:26 ID:???
某スレでCGI作ることになった。
俺はCGI初挑戦。
JavaScriptが比較的得意なので、WSHで行くことにした。
何かあったら、書かせてもらう。
5251:05/02/25 17:24:10 ID:???
とりあえず、必要な処理をPerlのソース見ながら移植してたんだが、
JavaScriptだけだと、Requestのdecode出来ない事に気づいた。
内部でVBscript呼んで済ませるかな。
5351:05/03/04 14:40:55 ID:???
ネットで、VBScriptでのURLdecode処理見つけて済ました。
VBScript URL decodeでググルと3番目くらいに出た掲示板から。

541:2005/04/12(火) 17:15:02 ID:???
かなりおひさしぶりです。懲りずに続けます。
>46-49
InternetExplorerオブジェクトですね
今さっと見ただけなので何に使うかあとで確認します。
>53
日本語デコードができないと困りますよね。ASPの組み込みオブジェクトはASP
動作でないと使えませんのでここでは当然自分でやらねばなりません。
とりあえす、1が自作したものも上げておきます。動けばいいで作成したのでバグありと前提で。
IE6、N6で昔確認しました。
551: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
561: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=""
571: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
581: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
591: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>
60nobodyさん:2005/04/12(火) 18:07:49 ID:w/mYA2Io
なにこの気持ち悪いオナヌースレ
611: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
6261の続き: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
6362の続き: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
641:2005/04/13(水) 00:28:04 ID:???
>>61-63
は連続していますので、コピーして1つの.vbsファイルにして下さい。
ファイル名はとりあえず、support02.vbsとでもしておきます。
使用法は同じです。PF_Decode関数の引数にエンコード文字列を与えて呼べば、デコードされた文字列が返ります。
JScript,VBSの正規表現はPerlのものに比べると機能が貧弱です。
従ってもっと単純な方法(正規表現を使わず順に1文字づつフラグなどを使い調べていくとか)のほうが速いかも知れません。
面倒ですよねぇ(笑)
65nobodyさん: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で()を忘れることがあるかも知れません。という事でした。
66nobodyさん: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され中身を見られてしまう。
67nobodyさん: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:実行させたい指定スクリプトエンジン名 のオプション指定を忘れないように。



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

下書きなんかないし、ダラダラ書きで、ageちゃってるし
だって眠いんだもんw
69nobodyさん: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>
70nobodyさん: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>
71nobodyさん: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>
72nobodyさん: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
 
73nobodyさん: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の場合、サイズが巨大なものが有り得ますので、事前サイズチェックはしましょう。
74nobodyさん:2005/07/18(月) 02:41:24 ID:MLViLjPO
ホス
75nobodyさん:2005/07/20(水) 01:42:56 ID:P18HiGG/
ホシュホシュ
761: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
771:2005/07/24(日) 16:51:21 ID:???
>>76 思いつき書き込みしかしないから(w、またやってしまった
【訂正】
 【ついでに】
 >ChrやAsc関数をJScropt関数で作ったほうが速いいかなぁ?
 JScropt→JScript

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

みんなAN HTTPDめんどいのかなぁ
79nobodyさん:2005/09/06(火) 02:04:33 ID:???
つーか、デコードするCOMオブジェクトないの?
IEは公開してないのか?
80nobodyさん:2006/05/22(月) 08:58:11 ID:???
ほす
81nobodyさん:2006/07/08(土) 09:15:04 ID:???
このスレの内容にばちこーん興味を持ったので保守
82nobodyさん: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
8382:2006/08/24(木) 12:48:36 ID:???
すいません板違いでした。Web製作板へ行ってきます。
84nobodyさん:2006/08/24(木) 18:56:31 ID:???
>>82-83
Web製作ではなく↓に誘導しておきます。
WSH(・∀・)スレッド!
http://pc8.2ch.net/test/read.cgi/tech/1055075469/l50
85nobodyさん:2006/09/27(水) 19:51:41 ID:???
いろいろなサイトを閲覧して、ローカルPCに溜まったCookieファイルを、VBScriptで定期的に自動消去する処理は、どうすれば良いでしょうか?
ttp://www.happy2-island.com/vbs/cafe02/capter00210.shtml
ファイルの削除を参考にしてみましたが、Cookieファイルの指定がうまくできませんでした。
86nobodyさん:2006/09/28(木) 00:09:34 ID:???
>>85
IEのCOM使ったほうがいいぞ

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

お前ら、wsh使ってますか? part6
http://pc8.2ch.net/test/read.cgi/win/1155040873/
87nobodyさん:2006/09/28(木) 00:44:11 ID:23IKIm9v
>>86
どうもありがとう。
88nobodyさん:2007/07/04(水) 14:20:44 ID:???
何にせよ、ありがとうと言いたい
89nobodyさん:2007/09/06(木) 00:53:56 ID:lxdRIcpr
WSH初心者ですが少し教えてください
特定のソフトを起動するためのVBSの書式を教えてください
ちなみにバッチファイルでは起動しないソフトもあったのでこちらが良いと言われました
ソフトは壷です
"C:\Program Files\2chtubo\2chtubo.exe"
通常ならこのようなバッチファイルで起動するはずなんですが
なぜか起動しませんでした
なのでVBSでやってみたいです
90nobodyさん:2007/09/06(木) 09:46:52 ID:???
>WSH初心者ですが少し教えてください
初心者だから??なに?

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

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

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

職場では Visual Studio 2005 Professional Edition を使って
いるのですが,自宅でも作業がしたくって.
93nobodyさん: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オプションを付けて
スクリプトを実行すればデバッガが使用可能になりますよ
94nobodyさん:2008/05/25(日) 01:09:26 ID:uDPNiz6J

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

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

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

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

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

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

島本町は日本の恥!島本町は日本の迷惑!
97nobodyさん
an Httpdとjscriptでcgiするのは簡単でいいね