Archive for the ‘VBScript’ Category

  1. Hello, COM(VBScript) World!

    Posted on 5月 14th, 2012 by cx20

    COM(VBScript)

    COM(Component Object Model)はマイクロソフトの提唱するプログラム部品の仕様である。
    COM を用いて開発された部品であれば言語を問わず利用することができる。
    以下は VBScript による COM クライアント(実行時バインディング)の例となっている。

    ソースコード

    Option Explicit
     
    Const ssfWINDOWS = 36
     
    Call Main()
     
    Sub Main()
        Dim shell
        Set shell = CreateObject("Shell.Application")
        Dim folder
        Set folder = shell.BrowseForFolder( 0, "Hello, COM(VBScript) World!", 0, ssfWINDOWS )
        If ( Not folder Is Nothing ) Then
            Set folder = Nothing
        End If
        Set shell = Nothing
    End Sub

    実行方法

    C:¥> CScript hello.vbs

    実行結果

    +----------------------------------------+
    |Browse For Folder                    [X]|
    +----------------------------------------+
    | Hello, COM(VBScript) Wolrd!            |
    |                                        |
    | +------------------------------------+ |
    | |[Windows]                           | |
    | | +[addins]                          | |
    | | +[AppCompat]                       | |
    | | +[AppPatch]                        | |
    | | +[assembly]                        | |
    | |     :                              | |
    | |     :                              | |
    | |     :                              | |
    | +------------------------------------+ |
    | [Make New Folder]    [  OK  ] [Cancel] |
    +----------------------------------------+
  2. Hello, Win32 API(VBScript) World!

    Posted on 4月 20th, 2012 by cx20

    Win32 API(VBScript)

    Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。VBScript には Win32 API を直接呼び出す機能は存在しないが、他のコンポーネントを経由することで、呼び出すことが可能である。
    Win32 API を呼び出すことが可能なコンポーネントとしては「DynamicWrapper」「SFC mini」「Excel」等がある。
    以下は DynamicWrapper を経由した Win32 API 呼出し例である。

    ソースコード(VBScript + COM + DynamicWrapper + Win32 API)

    Option Explicit
     
    Call Main()
     
    Sub Main()
        Dim win32
        Set win32 = CreateObject("DynamicWrapper")
        win32.Register "user32.dll", "MessageBoxA", "i=hssu", "f=s", "r=l"
        win32.MessageBoxA Null, "Hello, Win32 API(VBScript) World!", "Hello, World!", 0
    End Sub

    以下は SFC mini を経由した Win32 API 呼出し例である。

    ソースコード(VBScript + COM + SFC mini + Win32 API)

    Option Explicit
     
    Call Main()
     
    Sub Main()
       Dim MessageBox
       Set MessageBox = CreateObject("SfcMini.DynaCall")
       MessageBox.Declare "user32", "MessageBoxA"
       MessageBox 0, "Hello, Win32 API(VBScript) World!", "Hello, World!", vbOkOnly
    End Sub

    以下は Excel を経由した Win32 API 呼出し例である。実際には、Excel の「Call 関数」を ExecuteExcel4Macro メソッド経由で呼び出す例となっている。

    ソースコード(VBScript + COM + Excel + Call 関数 + Win32 API)

    Option Explicit
     
    Call Main()
     
    Sub Main()
        Dim excel
        Set excel = CreateObject("Excel.Application")
        Dim strMacro
        strMacro = "CALL('user32', 'MessageBoxA', 'JJCCJ', 0, 'Hello, Win32 API(VBScript) World!', 'Hello, World!', 0)"
        strMacro = Replace( strMacro, "'", """" )
        excel.ExecuteExcel4Macro( strMacro )
    End Sub

    なお、Call 関数で使用している、”JJCCJ” のコード値は MessageBoxA 関数の戻り値ならびに各引数のデータ型に対応している。詳細は「CALL 関数と REGISTER 関数の使い方」を参照のこと。

    コード 説明 渡す方法 C 言語での宣言
    A 論理値 (FALSE = 0、TRUE = 1) short int
    B IEEE 8 バイト浮動小数点数 値 (Windows)
    参照 (Macintosh)
    double (Windows)
    double * (Macintosh)
    C 末尾が Null の文字列 (最大文字列長 = 255) 参照 char *
    D バイト数を含む文字列 (先頭バイトが文字列の長さ、最大文字列長 = 255) 参照 unsigned char *
    E IEEE 8 バイト浮動小数点数 参照 double *
    F 末尾が Null の文字列 (最大文字列長 = 255) 参照 (指定した引数の変更) char *
    G バイト数を含む文字列 (先頭バイトが文字列の長さ、最大文字列長 = 255) 参照 (指定した引数の変更) unsigned char *
    H 符号なし 2 バイト整数 unsigned short int
    I 符号付き 2 バイト整数 short int
    J 符号付き 4 バイト整数 long int
    K 配列 参照 FP *
    L 論理値 (FALSE = 0、TRUE = 1) 参照 short int *
    M 符号付き 2 バイト整数 参照 short int *
    N 符号付き 4 バイト整数 参照 long int *
    O 配列 参照 引数は次の 3 種類
    unsigned short int *
    unsigned short int *
    double [ ]
    P Excel の OPER データ構造体 参照 OPER *
    R Excel の XLOPER データ構造体 参照 XLOPER *

    実行方法

    C:¥> CSciprt hello.vbs

    実行結果

    ---------------------------
    Hello, World!
    ---------------------------
    Hello, Win32 API(VBScript) World!
    ---------------------------
    OK   
    ---------------------------
  3. Hello, oo4o World!

    Posted on 4月 2nd, 2012 by cx20

    oo4o

    oo4o(Oracle Objects for OLE)は、COM ベースの Oracle Database 接続用 API である。
    Windows 環境で VB による開発に用いられることが多い。

    ソースコード(VBScript + oo4o + Oracle)

    Option Explicit
     
    Call Main()
     
    Sub Main()
        Dim ses
        Dim db
        Dim rs
        Set ses = CreateObject("OracleInProcServer.XOraSession")
        Set db = ses.OpenDatabase( "ORCL", "scott/tiger", 0 )
        Set rs = db.CreateDynaset( "SELECT 'Hello, oo4o World!' AS Message FROM DUAL", 4)
        While NOT rs.EOF
            WScript.Echo rs(0).Name
            WScript.Echo "------------------"
            WScript.Echo rs(0).Value
            rs.MoveNext
       Wend
    End Sub

    実行方法(Windows)

    C:¥> CScript //Nologo Hello.vbs

    実行結果

    MESSAGE
    ------------------
    Hello, oo4o World!
  4. Hello, DAO World!

    Posted on 3月 22nd, 2012 by cx20

    DAO

    DAO(Data Access Object)は、マイクロソフト社が開発した COM ベースの DBMS 接続用 API である。
    主に Jet データベース(Access MDB)との接続に用いられるが、ODBC 経由で他の DBMS への接続も可能である。
    長い間 DAO は 32bit 版のみしか提供されていなかったが、DAO 12 より 64bit 版が提供されるようになった。

    クライアントアプリケーション データベースエンジン 推奨されるデータベース形式
    Access 2.0 Jet 2.0 *.mdb (Jet 2.0)
    Access 95 Jet 3.0 *.mdb (Jet 3.x)
    Access 97 Jet 3.5 *.mdb (Jet 3.x)
    Access 2000 Jet 4.0 *.mdb (Jet 4.x)
    Access 2002 Jet 4.0 *.mdb (Jet 4.x)
    Access 2003 Jet 4.0 *.mdb (Jet 4.x)
    Access 2007 ACE 12.0 (32bit) *.accdb (ACE 12.0)
    Access 2010 (32bit) ACE 12.0 (32bit) *.accdb (ACE 12.0)
    Access 2010 (64bit) ACE 12.0 (64bit) *.accdb (ACE 12.0)
    DAO 3.0 Jet 3.0 *.mdb (Jet 3.x)
    DAO 3.5 Jet 3.5 *.mdb (Jet 3.x)
    DA0 3.6 Jet 4.0 *.mdb (Jet 4.x)
    DA0 12 (32bit) ACE 12.0 (32bit) *.accdb (ACE 12.0)
    DA0 12 (64bit) ACE 12.0 (64bit) *.accdb (ACE 12.0)
    Microsoft.Jet.OLEDB.3.51 Jet 3.5 *.mdb (Jet 3.x)
    Microsoft.Jet.OLEDB.4.0 Jet 4.0 *.mdb (Jet 4.x)
    Microsoft.ACE.OLEDB.12.0 (32bit) ACE 12.0 (32bit) *.accdb (ACE 12.0)
    Microsoft.ACE.OLEDB.12.0 (64bit) ACE 12.0 (64bit) *.accdb (ACE 12.0)

    ソースコード(VBScript + DAO + Jet データベース)

    Option Explicit
     
    Call Main()
     
    Sub Main()
        Dim dbe
        Dim db
        Dim rs
     
        Set dbe = CreateObject("DAO.DBEngine.36")
        Set db = dbe.OpenDatabase("Hello.mdb")
        Set rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message")
     
        While Not rs.EOF
            WScript.Echo rs(0).Name
            WScript.Echo "-----------------"
            WScript.Echo rs(0).Value
            rs.MoveNext
        Wend
     
        rs.Close
        db.Close
    End Sub

    ソースコード(VBScript + DAO + ACE データベース)

    Option Explicit
     
    Call Main()
     
    Sub Main()
        Dim dbe
        Dim db
        Dim rs
     
        Set dbe = CreateObject("DAO.DBEngine.120")
        Set db = dbe.OpenDatabase("Hello.accdb")
        Set rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message")
     
        While Not rs.EOF
            WScript.Echo rs(0).Name
            WScript.Echo "-----------------"
            WScript.Echo rs(0).Value
            rs.MoveNext
        Wend
    End Sub

    ソースコード(VBScript + DAO + ODBC + SQL Server)

    Option Explicit
     
    Call Main()
     
    Sub Main()
        Dim dbe
        Dim db
        Dim rs
     
        Set dbe = CreateObject("DAO.DBEngine.36")
        Set db = dbe.OpenDatabase("", False, False, _
            "ODBC;Driver={SQL Server};" & _
            "SERVER=(local);DATABASE=master;" & _
            "UID=sa;PWD=P@ssW0rd;")
        Set rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message")
     
        While Not rs.EOF
            WScript.Echo rs(0).Name
            WScript.Echo "-----------------"
            WScript.Echo rs(0).Value
            rs.MoveNext
        Wend
     
        rs.Close
        db.Close
    End Sub

    ソースコード(VBScript + DAO + ODBC + Oracle)

    Option Explicit
     
    Const dbOpenSnapshot = 4
    Const dbSQLPassThrough = 64
     
    Call Main()
     
    Sub Main()
        Dim dbe
        Dim db
        Dim rs
     
        Set dbe = CreateObject("DAO.DBEngine.36")
        Set db = dbe.OpenDatabase("", False, False, _
            "ODBC;Driver={Oracle in OraDb11g_home1};" & _
            "DBQ=ORCL;" & _
            "UID=scott;PWD=tiger;")
        Set rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message")
        ' パススルークエリの例(データベース側に依存する SQL を実行する場合)
        'Set rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message FROM DUAL", dbOpenSnapshot, dbSQLPassThrough)
     
        While Not rs.EOF
            WScript.Echo rs(0).Name
            WScript.Echo "-----------------"
            WScript.Echo rs(0).Value
            rs.MoveNext
        Wend
     
        rs.Close
        db.Close
    End Sub

    実行方法(Windows)

    C:¥> CScript //Nologo Hello.vbs

    実行結果

    Message
    -----------------
    Hello, DAO World!
  5. Hello, ACE Database World!

    Posted on 3月 10th, 2012 by cx20

    ACE Database

    ACE Database Engine(Access データベースエンジン) は Jet データベースエンジンの後継の DBMS エンジンである。Access 2007 以降 のデータベース(.accdb)のエンジンとしても使用されている。

    クライアントアプリケーション データベースエンジン 推奨されるデータベース形式
    Access 2007 ACE 12.0 (32bit) *.accdb (ACE 12.0)
    Access 2010 (32bit) ACE 12.0 (32bit) *.accdb (ACE 12.0)
    Access 2010 (64bit) ACE 12.0 (64bit) *.accdb (ACE 12.0)
    DA0 12 (32bit) ACE 12.0 (32bit) *.accdb (ACE 12.0)
    DA0 12 (64bit) ACE 12.0 (64bit) *.accdb (ACE 12.0)
    Microsoft.ACE.OLEDB.12.0 (32bit) ACE 12.0 (32bit) *.accdb (ACE 12.0)
    Microsoft.ACE.OLEDB.12.0 (64bit) ACE 12.0 (64bit) *.accdb (ACE 12.0)

    ソースコード(VBScript + DAO + ACE データベース)

    Set dbe = CreateObject("DAO.DBEngine.120")
    Set db = dbe.OpenDatabase("Hello.accdb")
    Set rs = db.OpenRecordset("SELECT 'Hello, ACE Database World!' AS Message")
    WScript.Echo rs(0).Name
    WScript.Echo "--------------------------"
    WScript.Echo rs(0).Value

    ソースコード(VBScript + ADO + OLEDB + ACE データベース)

    Set cn = CreateObject("ADODB.Connection")
    cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Hello.accdb"
    Set rs = cn.Execute("SELECT 'Hello, ACE Database World!' AS Message")
    WScript.Echo rs(0).Name
    WScript.Echo "--------------------------"
    WScript.Echo rs(0).Value

    ソースコード(VBScript + ADO + ODBC + ACE データベース)

    Set cn = CreateObject("ADODB.Connection")
    cn.Open "Provider=MSDASQL;Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=.\hello.accdb"
    Set rs = cn.Execute("SELECT 'Hello, ACE Database World!' AS Message")
    WScript.Echo rs(0).Name
    WScript.Echo "--------------------------"
    WScript.Echo rs(0).Value

    実行方法(Windows)

    C:¥> CScript //Nologo Hello.vbs

    実行結果

    Message
    --------------------------
    Hello, ACE Database World!
  6. Hello, Jet Database World!

    Posted on 3月 9th, 2012 by cx20

    Jet Database

    Jet Database Engine はマイクロソフトが開発した小規模向けの DBMS エンジンである。Access データベース(.mdb)のエンジンとしても使用されている。
    通常、Jet データベースへのアクセスは、DAO(Data Access Object)または ADO(ActiveX Data Objects)といった COM ベースの API が用いられる。

    クライアントアプリケーション データベースエンジン 推奨されるデータベース形式
    Access 2.0 Jet 2.0 *.mdb (Jet 2.x)
    Access 95 Jet 3.0 *.mdb (Jet 3.x)
    Access 97 Jet 3.5 *.mdb (Jet 3.x)
    Access 2000 Jet 4.0 *.mdb (Jet 4.x)
    Access 2002 Jet 4.0 *.mdb (Jet 4.x)
    Access 2003 Jet 4.0 *.mdb (Jet 4.x)
    DAO 3.0 Jet 3.0 *.mdb (Jet 3.x)
    DAO 3.5 Jet 3.5 *.mdb (Jet 3.x)
    DA0 3.6 Jet 4.0 *.mdb (Jet 4.x)
    Microsoft.Jet.OLEDB.3.51 Jet 3.5 *.mdb (Jet 3.x)
    Microsoft.Jet.OLEDB.4.0 Jet 4.0 *.mdb (Jet 4.x)

    ソースコード(VBScript + DAO + Jet データベース)

    Set dbe = CreateObject("DAO.DBEngine.36")
    Set db = dbe.OpenDatabase("Hello.mdb")
    Set rs = db.OpenRecordset("SELECT 'Hello, Jet Database World!' AS Message")
    WScript.Echo rs(0).Name
    WScript.Echo "--------------------------"
    WScript.Echo rs(0).Value

    ソースコード(VBScript + ADO + OLEDB + Jet データベース)

    Set cn = CreateObject("ADODB.Connection")
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Hello.mdb"
    Set rs = cn.Execute("SELECT 'Hello, Jet Database World!' AS Message")
    WScript.Echo rs(0).Name
    WScript.Echo "--------------------------"
    WScript.Echo rs(0).Value

    ソースコード(VBScript + ADO + ODBC + Jet データベース)

    Set cn = CreateObject("ADODB.Connection")
    cn.Open "Provider=MSDASQL;Driver={Microsoft Access Driver (*.mdb)};DBQ=hello.mdb"
    Set rs = cn.Execute("SELECT 'Hello, Jet Database World!' AS Message")
    WScript.Echo rs(0).Name
    WScript.Echo "--------------------------"
    WScript.Echo rs(0).Value

    実行方法(Windows)

    C:¥> CScript //Nologo Hello.vbs

    実行結果

    Message
    --------------------------
    Hello, Jet Database World!
  7. Hello, ASP World!

    Posted on 2月 9th, 2012 by cx20

    ASP

    ASP(Active Server Pages)は、マイクロソフトの Web サーバー(IIS)でプログラムを動作させる技術の一つである。既定の言語として VBScript が用いられるが、JScript や Active Scripting に対応した他の言語でも記述が可能である。現在は、後継技術の ASP.NET が登場しており、ASP(レガシー ASP)はあまり使われることは無くなってきている。
    ASP の類似技術としては、Java Servlet、JSP(JavaServer Pages)、PHP 等がある。

    OS IIS 4.0 IIS 5.0 IIS 5.1 IIS 6.0 IIS 7.0 IIS 7.5
    Windows NT 4.0
    Windows 2000
    Windows XP
    Windows 2003
    Windows Vista
    Windows 2008
    Windows 7
    Windows 2008 R2

    ソースコード(VBScript)

    <%@ Language="VBScript" %>
    <html>
      <head>
        <title>Hello, World!</title>
      </head>
      <body>
        <p><% Response.Write "Hello, ASP World!" %></p>
      </body>
    </html>

    ソースコード(JScript)

    <%@ Language="JScript" %>
    <html>
      <head>
        <title>Hello, World!</title>
      </head>
      <body>
        <p><% Response.Write( "Hello, ASP World!" ); %></p>
      </body>
    </html>

    実行方法

    1. IIS の公開フォルダ に配置
    2. ブラウザで表示
       http://localhost/doc/hello.asp

    実行結果

    Hello, ASP World!
  8. Hello, VBScript World!

    Posted on 12月 24th, 2011 by cx20

    VBScript

    VBScript は Visual Basic のサブセットで Windows で動作するスクリプト言語である。
    実行環境としては Windows Script Host(WSH)、Web サーバーである IIS、Web ブラウザである IE 等がある。
    ソフトウェア部品である COM コンポーネントを操作するクライアント言語として一定の成功を収めたが、マイクロソフトが ActiveX から .NET 戦略に舵取りをしたことにより、今後は利用される機会は減っていくと見られている。
    以下は OS 毎に導入可能な VBScript のバージョン一覧となっている。IE と同時にインストールされる他、WSH 単体で提供されるケースもある。

    OS IE4.0
    (WSH1.0)
    IE5.01
    (WSH2.0/5.1)
    IE5.5
    (WSH5.5)
    IE6
    (WSH5.6)
    IE7
    (WSH5.7)
    IE8~
    (WSH5.8)
    Windows 95 VBS 3.0 VBS 5.0 VBS 5.5 VBS 5.6
    Windows NT 4.0 VBS 3.0 VBS 5.0 VBS 5.5 VBS 5.6
    Windows 98 VBS 3.0 VBS 5.0 VBS 5.5 VBS 5.6
    Windows 2000 VBS 5.0 VBS 5.5 VBS 5.6 VBS 5.7
    Windows Me VBS 5.5 VBS 5.6
    Windows XP VBS 5.6 VBS 5.7 VBS 5.8
    Windows 2003 VBS 5.6 VBS 5.7 VBS 5.8
    Windows Vista VBS 5.7 VBS 5.8
    Windows 2008 VBS 5.7 VBS 5.8
    Windows 7 VBS 5.8
    Windows 2008 R2 VBS 5.8
    Windows 8 VBS 5.8
    Windows 2012 VBS 5.8

    ソースコード

    WScript.Echo "Hello, VBScript World!"

    実行方法(Windows)

    C:¥> CScript //Nologo hello.vbs
    

    実行結果

    Hello, VBScript World!