2009/03/10

WindowsScriptEncoderを便利に・・・


    このログは、コチラのログ も併読してください。     

----------------- [ Update 20090317 2113 ]
このログのスクリプトのアーカイブはコチラの版に差し替えました。


通常のWindowsアプリケーションの挙動なら、その本体やショートカットを作成し、
対象ファイルをドロップすれば、ソースファイルのあるフォルダに結果を返してくれそうなものだが、
WindowsScriptEncoderは、そのままでは、長いファイル名に対応できてない上、書式がカナリ厄介。

書式)
   "[インストール先]\screnc.exe" "対象ファイル.vbs" "エンコード後のファイル.vbe"    


   screnc.exe - エンコーダ本体    
レジストリにも所在が登録されてない上、
Pathも通ってないので、起動の際は要フルパス記述。
ショートカット作成時には、作業フォルダにパスを指定しておいたほうが無難だ。

[インストール先フォルダ]
既定は "C:\Program Files\Windows Script Encoder\" だと思う、多分・・・
少なくともウチの機器ではココだった。

{"対象ファイル.vbs"}
対象ソースとなるVBScriptファイルをフルパスで指定

{"エンコード後のファイル.vbe"}
任意のファイル名に拡張子.vbeを付けてフルパス指定


まず、エンコード後の名称を、フルパスで拡張子までキッチリ指定しないと正しく動作しないってのがヘン。
また、コンソールアプリなので、スペースを含んでいたり、長いファイル名は、
[ " ]ダブルクォーテーションで囲む必要がある。

このような仕様では、どうやったって、単純にショートカットを配し、ドロップして利用・・・ とはイかないワケだワ(´ヘ`;)
最終的に、内容がエンコードされて、拡張子が変わるだけでいいのに、何故こんな指定方法なのか・・・
(安易な不正アクセスを防ぐイミでは、有効かもしれないケド・・・)
結果のファイル名.vbeを、ソース.vbsと異なるようにしたい向きを除き、とてもユーザーフレンドリーとは云いがたい・・・

今回も使い方は、以下スクリプトをコピってテキストエディタに貼り、
VBSEncodeConnection.vbs として保存後、実行スクリプト保存フォルダを任意に作成し、ソコへ放り込んで、
ショートカットをデスクトップ他、使いやすい場所に配してください。

あとは、作成した.vbsファイルをまとめてドラッグするだけで利用できます。

エンコーダのインストール先は、スクリプト中の
   Const Enc = "C:\Program Files\Windows Script Encoder\screnc.exe"    
を書き換えれば、任意に変更可能です。

今回は、組み込み関数は一切ないデスw つか、要らないと云うほうが正しいカナ。

    '***** ↓↓↓ScriptTitle↓↓↓ *********************************************************     
'VBSEncodeConnection
'- Created by LazwardFox -

'パラメータ指定、ないし、vbsファイルドロップで、
'同一フォルダ上にエンコード済みファイル(.vbe)を作成する。
'このスクリプトのショートカットに対してドロップしても有効。
'テキストエディタなどのマクロに登録しての利用も可

'単独起動 - 無効

'Update 20090309 1901 発行向けに調整
'Update 20090210 0109
'Release 20050112 1213
'DevStart 20050111 2117

'***** ↓↓↓ ObjectDecralations ↓↓↓ *************************************************
Dim Args, Wsh, Fs

Set Args = WScript.Arguments 'パラメーター取得
If Args.Count <= 0 Then
Wscript.Quit
End If
Set Wsh = WScript.CreateObject("WScript.Shell")
Set Fs = WScript.CreateObject("Scripting.FileSystemObject") 'ファイル操作

'***** ↓↓↓Decralations↓↓↓ *********************************************************
Dim vbSp, vbTc, vbCt, vbWt, vbTs, vbCs
Dim tFile, Tf, Ef, Info, pTarget

Const vbWq = """"
Const Enc = "C:\Program Files\Windows Script Encoder\screnc.exe"

vbSp = " "
vbTc = vbTab & vbCrlf
vbCt = vbCrlf & vbTab
vbWt = vbWq & vbTab
vbTs = String(2,vbTab)
vbCs = String(2,vbCrLf)

'***** ↓↓↓MainRoutine↓↓↓ *********************************************************
For iC = 0 To Args.count - 1
tFile = Args(iC)
If Fs.FileExists(tFile) then
Ext = Fs.GetExtensionName(tFile)
If Lcase(Ext) = "vbs" Then
Tf = vbWq & tFile & vbWq
Ef = Replace(Tf,"." & Ext,".vbe")
Info = "Before" & vbCrlf & vbSp & Tf & vbSp & vbCrlf & vbCrlf & _
"After" & vbCrlf & vbSp & Ef & vbSp & vbCrlf
If Msgbox(Info, vbYesNo, "VBS Encode") = vbYes then
pTarget = vbWq & Enc & vbWq & " " & Tf & " " & Ef
Wsh.Run pTarget, 0
End If
End If
End If
Next
Set Args = Nothing
Set Fs = Nothing
Set Wsh = Nothing

Wscript.Quit



ま、ソコはソレ、不便なら、問題を解消する策を講じられる位でないと、
MS製品なんて使ってられんと云うコトで・・・w


とは云え、今回は手順も面倒なので、ソースとエンコード済みのファイルをDL出来るようにしてみました、
   VBSEncodeConnection.zip    
▲ を、右クリックしてファイルとして保存してください。

----------------- [ Update 20090317 2113 ]
このアーカイブはコチラの版に差し替えました。


今までのモノも、似た対応できたんだけど、面倒だったのでw
あと、セキュリティ的に、テキストのほうが安心できる人も多いかと思ったし・・・ (^_^;

ちなみに、エンコード後のファイルはバイナリ形式な上、既にヒトが読めるカタチになってません、
修正や改変は出来ないので、ソースは大事に保管してください。

また、エンコード後のファイル.vbeは、Web環境で利用する場合、
対応している対象がIEだけらしいとのレポートを読んだ記憶があります。(未確認、誤報なら嬉しいが・・・)
あくまで、ローカルでの運用に留めた方が無難かと思われます。


-----------
次回は、FileBackUpper.vbe辺りをソース込みで うp予定。
対象ファイルの名称を "[元FileName] yyyymmdd hhnnss.[拡張子]" に 変え、コピーを取るだけのモノ。
長いこと利用しているブツで、HTML/JavaScript/VBScript etc.. 版管理に威力を発揮している。
初期起動で、ファイル/フォルダ右クリックのコンテキストメニューに、
[バックアップ作成]を追加するようレジストリ設定を行える機能の追加版を用意する予定。
乞うご期待。
<そのまま使えるVBscript WindowsScriptEncoder 容易 使い方>

0 件のコメント:

コメントを投稿