2010年3月9日火曜日

VBScript 簡素にファイルチェック

最近はめっきりVBScriptも触っていませんが、
ソフトウェア管理支援システム開発日記も使用しなくなったので、
置いておいたら便利な分だけ引っ越してきておきます。

サンプルとしては、ファイル(フォルダ)の存在チェック、新規作成/削除や拡張子取得などですね。
進級制作で作っていたときに必要だった情報です。
Option Explicit

' フォルダ名指定
Dim fdName, flName, cMsg
fdName = "iroha"
flName = fdName & "\test.txt"

' FileSystemObject呼び出し
Dim Fso
Set Fso = CreateObject( "Scripting.FileSystemObject" )

' ◆フォルダ存在チェック
If Not Fso.FolderExists( "iroha" ) Then

 ' 無ければ作成
 Fso.CreateFolder( "iroha" )

End If


' ◆ファイル存在チェック
If Not Fso.FileExists( flName ) Then
 
 ' 無ければ作成
 Fso.CreateTextFile( flName )

End If

' ◆ファイルの拡張子のみを表示
Msgbox( "拡張子:" & Fso.GetExtensionName( flName ) )

' ◆フォルダ内ファイル数カウント
Msgbox( "ファイル数:" & Fso.GetFolder( fdName ).Files.Count )

' Msgboxの戻り値をcMsgに格納
cMsg = Msgbox( "「" & fdName & "」を削除しますか?", vbYesNo, "確認" )
' 「はい」の場合
If cMsg = vbYes Then
 ' ◆フォルダ丸ごと削除
 Fso.DeleteFolder( fdName )
End If

2009年11月18日水曜日

iTunesをVBScriptから触るためのメモ

iPhoneが愛用機になってから、音楽を聴くのはiTunesになりました。
その影響で再生する時にはいつもByursideというガジェットで操作しています。
iTunesの様に大きくなく、ガジェットバーに配置することでいつでも触れる上、
再生だけでなくループ設定やジャケット表示も出来るので、
全く不満は無いです、凄い便利。

で。
ふと考えてみると、ガジェットは基本XML+HTML+JSのはずなので、
結果iTunesはJSで触れるはずですよね。

ということで調べてみると、やはりJSで触れることが分かりました。
情報は少ないものの、十二分にデータ取得や再生処理が行えるようです。
以下が参考になりそうなサイト様です(Java含む)。

JSで触れると書きましたが、「Wscript」オブジェクトからなので、
実質VBScriptで使用することが出来ます。

ただ単に再生/一時停止するだけなら、以下のソースの様になります。
Dim iTunes

Set iTunes = WScript.CreateObject("iTunes.Application")
iTunes.PlayPause()
こんなに簡単に出来るんですね。

2009年10月31日土曜日

【自作】Sleipnir別ブラウザ表示スクリプトインストーラ 「exBrowserSleipnir」

この投稿で書いた、
Sleipnirでのアクティブページを別のブラウザで開くスクリプトを、
ダウンロードしインストールする、インストーラを作成しました。
その名も「exBrowserSleipnir」。
以下からダウンロード及び実行出来ます。
詳しい利用方法は、zip内の「Readme.txt」を参照して下さい。
exBrowserSleipnir Ver1.00 ダウンロード exBrowserSleipnir_v100.zip 直接起動はこちら。 exBrowserSleipnir.vbs
この投稿で書いていたのはFirefoxに関してですが、 このインストーラを利用すると、Chrome用も同時にインストールされます。 当然、Sleipnir及びFirefox、Chromeがインストールされていない場合、 エラーと共に終了することになります。 主に自分用なので、細かなエラーチェックもしていないのが特色(?)です。 インストーラを実行し終了した後、「スクリプトの再読み込み」を行うと、 「スクリプト」内へ以下の様に表示されます。

Sleipnir APIを利用したアクティブページ別ブラウザ表示

Sleipnirを利用している人には分かることなのですが、
標準でいくつかのスクリプトが用意されています。
その中には、内部でSleipnirAPIを使用しているモノもあります。
SleipnirAPIに関してはこちら。
タブブラウザ Sleipnir オンラインデータベース(Sleipnir.API リファレンス)

で。
SleipnirAPIを利用して、アクティブページのURLを取得し、
別のブラウザで表示するスクリプトを作成したので、以下にまとめます。

まずはソースを。
そんなに難しい内容ではないです。
' ******************************************************
' FirefoxでSleipnirアクティブページを表示
' ******************************************************
Option Explicit

Dim Pnir, WshShell, Url

' SleipnirAPI呼び出し
Set Pnir = CreateObject("Sleipnir.API")

' 現在開いているページのURL取得
Url = "firefox "
Url = Url & Pnir.URL

' 非同期で呼び出し
Set WshShell = WScript.CreateObject("WScript.Shell")
Call WshShell.Run( Url )
ソースはFirefoxで開いていますが、Chromeでも確認済です。 「名前を指定して実行」出来るブラウザに対してはいけるはずです。 ブラウザを変える場合には、12行目のブラウザ名を変更してください。 以下が使用準備・方法となります。 Sleipnirのメニューバー「スクリプト」内のスクリプトが実行出来ない場合は、 「ツール」→「Sleipnirオプション内」から、 スクリプト実行を許可する必要があります。 スクリプトが利用できるようになると、 「スクリプト」内の「スクリプトの整理」を選択できるようになるので選択。 Sleipnirのスクリプトディレクトリが表示されるので、 「Firefoxで開く.vbs」を作成し、上のソースをそのまま貼り付けて保存。 Sleipnirに戻り、先ほど作成したスクリプトファイルを表示するために、 「スクリプト」内の「スクリプトの再読み込み」を行います。 「Firefoxで開く.vbs」が表示されるので選択。 Sleipnirで開いているページが、Firefoxで表示されれば完了です。 なお、当然ながらFirefoxで開くので、 インストールされていない場合にはエラーが発生します。 何しろエラーチェックしていないもので・・・。

2009年10月17日土曜日

VBScript fakepath回避選択ファイルパス取得サンプル

IEditorを作成した時に、
程よく使いやすいサンプルが出来たのでメモ。

ソースが長いので、見づらい場合には閉じて下さい。
▼ソースを開く/たたむ
' **********************************************************
' ファイル選択ダイアログを表示し、ファイルパスを取得する
' **********************************************************
Function GetFilePath()

  ' 変数宣言
  FilePath = "" ' ファイルパス
  ExtName = "exe" ' 拡張子判断用

  ' 初期メッセージ
  Msgbox("パスを取得するファイル(." & ExtName & ")を選択して下さい。")

  ' IEオブジェクトを用意
  Set Ie = CreateObject("InternetExplorer.Application")
  Ie.Navigate( "about:blank" )
  Ie.document.getElementsByTagName("BODY")(0).innerHTML = _
    "<INPUT id=FilePath type=file><TEXTAREA id=Text></TEXTAREA>"
  Ie.document.getElementById("FilePath").click

  ' 選択ファイルパス格納
  FilePath = Ie.document.getElementById("FilePath").value

  ' 選択ファイルパスチェック
  If FilePath = "" then
    ' ファイルが選択されなかったので終了
    Msgbox("ファイルが選択されなかったので終了します。")
    Wscript.Quit
  end If

  Set Fso = CreateObject( "Scripting.FileSystemObject" )
  If Fso.GetExtensionName( FilePath ) <> ExtName then
    ' 実行ファイル(.exe)が選択されなかったので終了
    Msgbox("選択されたファイルが実行ファイル(." & ExtName & ")で無いので、終了します。")
    Wscript.Quit
  End If

  ' IE8の場合はセキュリティの関係上、
  ' 「C:\fakepath」となるので、別処理取得
  If InStr( FilePath, ":\fakepath\" ) = 2 Then
    ' コピー&ペースト用定数用意
    Const OLECMDID_COPY = 12
    Const OLECMDID_PASTE = 13
    Const OLECMDID_SELECTALL = 17 '(&H11)
    Const OLECMDEXECOPT_DODEFAULT = 0
    ' FilePathの内容をコピーし、Textへペースト
    Ie.Document.all.FilePath.focus
    Ie.ExecWB OLECMDID_SELECTALL,OLECMDEXECOPT_DODEFAULT
    Ie.ExecWB OLECMDID_COPY,OLECMDEXECOPT_DODEFAULT
    Ie.Document.all.Text.focus
    Ie.ExecWB OLECMDID_PASTE,OLECMDEXECOPT_DODEFAULT
    FilePath = Ie.Document.all.Text.value
  End If

  ' Ie破棄
  Ie.Quit
  Set Ie = Nothing

  ' 最終的にファイルパス取得
  GetFilePath = FilePath

End Function
以下参考メモ。 ソースの大本は、以下を参考にしました。 ファイル選択ダイアログを開く:SQLの窓 IEオブジェクトを作成した際にエラーチェックしていませんが、 「IEの入っていないWindows環境」を見たことがないのに加え、 Vista+IE8でも問題無く通過しているので、様子見の状態です。 このサンプルでは、 ファイルを選択した際に拡張子を判別しています。 別に無くても良いのですが、IEオブジェクトを使用するという仕様上、 ファイル選択ダイアログ時に拡張子を限定することが出来ないため、 仕方無くファイルを選択した後の判断となります。 IE8の場合、<INPUT>に格納されるファイルパスを取得した際に、 セキュリティの問題上「C:\fakepath\」となります。 その回避として、 何度も紹介させて頂いている以下のサイトを参考にしました。 IE8で、input type=fileの.valueがc:\fakepath\filenameを返す。(その2): Windows Script Programming

2009年10月16日金曜日

【更新】「IEditor Ver1.12」

さらに対象レジストリを削除するように、更新しました。
詳細は「IEditor Ver1.00」の情報を見てもらえればわかると思います。

これでひとまず、登録/修正/設定削除が行えるようになったので、
大方の機能としては完了かと。
IEditor Ver1.12 ダウンロード IEditor_v112.zip 直接起動はこちら。 IEditor.vbs

【更新】「IEditor Ver1.11」

※追記:最新版は「Ver1.12」ですので、以下からダウンロードして下さい。
【更新】「IEditor Ver1.12」
実は、Vista+IE8で開発したので、
ちゃんとした動作確認をしていませんでした。
学校のPC(XP+IE6)で見てみると、別の場所に書き込んでいました。
ちゃんと確かめればいいのに・・・。

それに対応したVer1.11へアップデートです。
IEditor Ver1.11 ダウンロード IEditor_v111.zip 直接起動はこちら。 IEditor.vbs

【更新】「IEditor Ver1.10」

※追記:最新版は「Ver1.12」ですので、以下からダウンロードして下さい。
【更新】「IEditor Ver1.12」
よく考えてみると、テキトーなバージョン管理です。
機能を一新したからといって、
バージョンを0.1も上げてしまっていいのでしょうか。

というわけで、先ほど投稿した内容を含めてのバージョンアップ版です。
IEditor Ver1.10 ダウンロード IEditor_v110.zip 直接起動はこちら。 IEditor.vbs
今回もまた、Readme.txtに詳しいことが書いてありますが、軽く。 Ver1.00時には、ただ登録するだけのツールでしたが、 IEオブジェクトによるファイル指定によって、 別エディタを登録・変更することが可能となりました。 IE8は相変わらず対象外ですが、 IE8で行われた場合の「C:\fakepath」回避も搭載しました。 以下のサイトを再び参考にさせて頂きました。 この場でなんですが、ありがとうございます。 IE8で、input type=fileの.valueがc:\fakepath\filenameを返す。(その2): Windows Script Programming IEオブジェクトを利用しての、IE8対応ファイルパス取得コードは、 また時間がある時にまとめます。

IE8 【C:\fakepath】って何なのよ

今月14日に上げた「IEditor」をバージョンアップしようと思い、
先生のサイトの「ファイル選択ダイアログを開く」を参考に、
ローカルファイルを参照しようと思ったのですが、思わぬエラーが発生です。

IE8の環境で、
「InternetExplorer.Application」を利用してパスを取得すると、
「C:\fakepath\TeraPad.exe」というパスを取得しました。
また自分のソースをちゃんと読まないクセのせいか、と思って見直しても、
もちろんそんな内容が含まれたサンプルじゃありません。

Googleで検索してみると、どうやらIE8のセキュリティ対策のようです。

リンク先の情報によれば、以下の様な対処法があるようです。
  • IEのセキュリティレベルを下げる。
  • 「信頼するサイト」に登録する。
  • ファイルパスの取得方法を変更する。
セキュリティレベルを下げるのは困りものですし、 上で挙げた、ファイル選択のための仮ページを「信頼するサイト」に登録できるわけでもなく、 パスの取得方法を変える以外、方法はなさそうです。 まぁ、今回のツールに関してのIE8は対象外なので、 そもそもIE8の場合は処理しなければ、それはそれで良いのですが。

2009年10月14日水曜日

【自作】IEソースエディタ登録ツール 「IEditor」

※追記:最新版は「Ver1.12」ですので、以下からダウンロードして下さい。
【更新】「IEditor Ver1.12」
InternetExplorerの標準ソースエディタはメモ帳ですが、
そもそもメモ帳は使いにくい上に、
Shift-JIS以外の文字コードだと化けて使い物になりません。
OSを新しく入れた際などに、IEのソースエディタを変更することが、
もうすでに自分の中でのデフォルト作業と化しています。

ということで、その手間を省くために、
IEのソースエディタに別のエディタを登録するためのツールを作成しました。
その名も「IEditor」。
以下からダウンロード出来ます。

また、本体は.vbsなので、直接「開く」ことで実行することも出来ます。
直接の場合は以下から。


zipファイルに含まれている「Readme.txt」に細かい事が書かれているので、
以下には軽く説明を。

すでに書いた通り、このツールはIEのソースエディタを「登録」するものです。
現時点(Ver1.00)では、決めうちでTerapadを対象として登録します。
さらに、Terapadでもインストーラによってインストールされたものに限ります。

IE8ではソースエディタの設定が変更になったので、IE6,7が対象となります。
すでにソースエディタが登録されている場合には、処理が終了します(何も無し)。

VBScriptでのレジストリ操作の勉強がてらに作ったので、
所々にコメントをちりばめてあります。
中身を編集して使用する場合には参考にどうぞ。
以下が「IEditor.vbs」のソースです。
' **********************************************************
' 【IEditor / IEソースエディタ登録ツール】
'
' 詳しくはReadme.txtを参照。
' エディタパスは、11行目を変更して下さい。
' **********************************************************

' WshShellオブジェクト用意
Set WshShell = WScript.CreateObject("WScript.Shell")
' エディタパス用意
EditorPath = "C:\Program Files\TeraPad\TeraPad.exe"
' レジストリパス/データ型用意
RegCheckPath = "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\View Source Editor\Editor Name\"
RegType = "REG_SZ"

' 対象レジストリ存在チェック
On Error Resume Next
WshShell.regread( RegCheckPath )
If Err.Number = 0 Then
  ' 存在するので終了
  Msgbox("すでに登録済なので、終了します。")
  Wscript.Quit
Else
  ' ソースエディタ登録確認
  cMsg = MsgBox( _
      "パス【" & EditorPath & "】として、" & VbCrLf & "IEのソースエディタを登録しますか?" _
      , vbYesNo _
      , "IEditor - IEソースエディタ設定" _
    )
  If vbNo = cMsg then
    ' 登録しないので終了
    Wscript.Quit
  Else
    ' 対象レジストリ書き込み
    WshShell.RegWrite RegCheckPath, EditorPath, RegType
    Msgbox("ソースエディタを登録しました。")
  End If
End If