CX's VBScript Diary

|

2010-01-28

Visual Studio は VBScript 用の最強エディタ?

00:42 | Visual Studio は VBScript 用の最強エディタ? - CX's VBScript Diary を含むブックマーク はてなブックマーク - Visual Studio は VBScript 用の最強エディタ? - CX's VBScript Diary

Visual Studio(VS2005, VS2008)を用いることで、インテリセンスによるコード補完が可能になります。

Windows Script Wiki - エディタ/VWD2005

http://winscript.s41.xrea.com/wiki/index.php?%5B%5B%A5%A8%A5%C7%A5%A3%A5%BF%2FVWD2005%5D%5D

また、Visual Studio の [ツール] - [外部ツール] で「CScript.exe //X」を登録することで *.vbs ファイルをデバッグ実行することが可能です。

タイトルVBSスクリプトのデバッグ実行(&D)
コマンドC:\WINDOWS\system32\cscript.exe
引数//X $(ItemPath)

Visual Studio の Express Edition は無償ですので利用してみてはいかがでしょうか?

(ただし、VS2008 では、SP1 を適用しないと、インテリセンスやコードの色分けが行われないようです。)

Microsoft Visual Studio 2008 Express Edition

http://www.microsoft.com/japan/msdn/vstudio/Express/

ほんだらほんだら2010/01/31 13:55なんか、これできるんなら、VB6のエンジン(に近い物)が載ってるわけで…
まだVBSもVBAも現役なわけだし、
VB6も継続サポートしたらいいのにねぇ。

cx20cx202010/02/01 00:25> VB6も継続サポートしたらいいのにねぇ。
本当にそう思います。
32bit OS が現役のうちは、まだまだ COM を使った開発が現役なのでは?と思います。
64bit 版のクライアントが普及するころ(何年後か分かりませんが)には、.NET 化が進んでいそうな気もしますけど。

2010-01-26

10 行で作る VBScript インタラクティブシェル

21:17 | 10 行で作る VBScript インタラクティブシェル - CX's VBScript Diary を含むブックマーク はてなブックマーク - 10 行で作る VBScript インタラクティブシェル - CX's VBScript Diary

次世代 Windows シェルと言われている PowerShell は対話型シェルの機能を持っていますが、昔ながらの VBScript では実現できないのでしょうか?と、思っていたら、以下のようなサンプルを見つけました。

VBScript interactive shell

http://www.kryogenix.org/days/2004/04/01/interactiveVbscript

サンプルコード

' File : console.vbs
' Usage : CScript //Nologo console.vbs
do while true
  wscript.stdout.write(">>> ")
  ln = wscript.stdin.readline
  if lcase(trim(ln)) = "exit" then exit do
  on error resume next
  err.clear
  execute ln
  if err.number <> 0 then wscript.echo(err.description)
  on error goto 0
loop
コマンド例
CScript console.vbs [Enter]
実行結果

上記のコマンドを実行すると以下のように 対話的に VBScript のコマンドを実行することが可能になります。終了は「exit」です。

>>> strMessage = "Hello" [Enter]
>>> CreateObject("SAPI.SpVoice").Speak strMessage [Enter]
>>> exit [Enter]

基本的に Execute() しているだけですが、対話型シェルっぽく動作してくれます。

ただし、関数を作成しようとすると、エラーになってしまうようです。

>>> Function Hoge()
'End' がありません。

その場合は、関数を1行に収めることで実行が可能なようです。

>>> Function Hoge() : WScript.Echo "Hello" : End Function
>>> Call Hoge()
Hello

参考情報

2009-08-13VBScript で PE ヘッダを読み込む方法

VBScript で PE ヘッダを読み込む方法

17:29 | VBScript で PE ヘッダを読み込む方法 - CX's VBScript Diary を含むブックマーク はてなブックマーク - VBScript で PE ヘッダを読み込む方法 - CX's VBScript Diary

VBScript から EXE/OCX/DLL 作成時のコンパイラのバージョンが取得できないか?と思い、調査してみました。

コンパイラのバージョンは PE ヘッダのリンカバージョンが参考になりそうです。

また、VBScript から、モジュールの PE ヘッダを読み込むには、ADO Stream オブジェクトを使用すれば可能そうです。

 ADDRESS   00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F   0123456789ABCDEF 
------------------------------------------------------------------------------
 00000000  4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00   MZ.............. 
 00000010  B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00   ク.......@....... 
 00000020  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................ 
 00000030  00 00 00 00 00 00 00 00 00 00 00 00 E0 00 00 00   ................ 
                                               ^^^^^^^^^^^ <-- PE ヘッダ相対位置
 00000040  0E 1F BA 0E 00 B4 09 CD 21 B8 01 4C CD 21 54 68   ..コ..エ.ヘ!ク.Lヘ!Th 
 00000050  69 73 20 70 72 6F 67 72 61 6D 20 63 61 6E 6E 6F   is program canno 
 00000060  74 20 62 65 20 72 75 6E 20 69 6E 20 44 4F 53 20   t be run in DOS  
 00000070  6D 6F 64 65 2E 0D 0D 0A 24 00 00 00 00 00 00 00   mode....$....... 
     :                           :                                   :
 000000E0  50 45 00 00 4C 01 03 00 87 52 02 48 00 00 00 00   PE..L...⑲.H.... 
           ^^^^^^^^^^^ PE ヘッダシグネチャ
 000000F0  00 00 00 00 E0 00 0F 01 0B 01 07 0A 00 78 00 00   .............x.. 
                                         ^^^^^ リンカバージョン
 00000100  00 8C 00 00 00 00 00 00 9D 73 00 00 00 10 00 00   ........捏...... 

と、いうことで、以下のやり方で情報を取得してみることにしました。

  1. ADO Stream にてファイル読み込み
  2. IMAGE_DOS_HEADER の e_lfanew(PE ヘッダの開始位置)を取得
  3. PE ヘッダの開始位置に移動し IMAGE_OPTIONAL_HEADER の MajorLinkerVersion を取得
  4. PE ヘッダの開始位置に移動し IMAGE_OPTIONAL_HEADER の MinorLinkerVersion を取得

サンプルコード

' File : ShowLinkerVer.vbs
' Usage : CScript ShowLinkerVer.vbs //Nologo /F:FileName[.exe|.dll|.ocx]
' Description : モジュール作成時のリンカバージョンを表示

Option Explicit

Call Main()

Sub Main()
    Dim param
    Set param = New CmdParamParser
    If param.Initialize( WScript.Arguments ) = False Then
        param.ShowUsage
        WScript.Quit
    End If

    Dim pe
    Set pe = New PEReader
    pe.Load param.FileName
    pe.Show
End Sub

Class CmdParamParser
    Private m_strFileName
    
    Public Property Get FileName
        FileName = m_strFileName
    End Property

    Public Function Initialize( objArgs )
        If objArgs.Count = 0 Then
            Initialize = False
            Exit Function
        End If
        
        m_strFileName = objArgs.Named.Item( "F" ) ' WSH 5.6 以上でのみサポート
        If Len(m_strFileName) = 0 Then
            Initialize = False
            Exit Function
        End If
    
        Initialize = True
    End Function

    Public Sub ShowUsage()
        WScript.Echo "Usage : CScript ShowLinkerVer.vbs //Nologo /F:FileName[.exe|.dll|.ocx]" & vbCrLf
    End Sub
End Class

Class PEReader
    Private m_stm
    Private m_strFileName
    Private m_szBuf
    Private m_nHeaderSize
    Private m_nMajorLinkerVer
    Private m_nMinorLinkerVer
    
    Public Property Get PEHeaderSize
        PEHeaderSize = m_nHeaderSize
    End Property
    
    Public Property Get MajorLinkerVer
        MajorLinkerVer = m_nMajorLinkerVer
    End Property
    
    Public Property Get MinorLinkerVer
        MinorLinkerVer = m_nMinorLinkerVer
    End Property
    
    Public Property Get LinkerVer
        LinkerVer = CStr(MajorLinkerVer) & "." & CStr(MinorLinkerVer)
    End Property

    Public Property Get FileName
        FileName = m_strFileName
    End Property
    
    Private Sub Class_Initialize
        Set m_stm = CreateObject("ADODB.Stream")
        m_stm.Type = 1 ' adTypeBinary
        m_stm.Open
    End Sub
    
    Private Sub Class_Terminate
        Set m_stm = Nothing
    End Sub
    
    Public Function Load( strFileName )
        On Error Resume Next
        m_strFileName = ExpandEnv( strFileName )
        m_stm.LoadFromFile m_strFileName
        If Err.Number <> 0 Then
            Load = False
            Exit Function
        End If
        m_stm.Position = 1
        m_szBuf = m_stm.Read( 512 ) ' 多めに読み込み

        m_nHeaderSize     = GetPEHeaderSize( m_szBuf )
        m_nMajorLinkerVer = GetMajorLinkerVer( m_szBuf )
        m_nMinorLinkerVer = GetMinorLinkerVer( m_szBuf )
        Load = True
    End Function
    
    Public Function ExpandEnv( strFileName )
        Dim strResult
        Dim shell
        Set shell = CreateObject("WScript.Shell")
        strResult = shell.ExpandEnvironmentStrings( strFileName )
        Set shell = Nothing
        ExpandEnv = strResult
    End Function
    
    Public Sub Show()
        WScript.Echo "FileName        = [" & Me.FileName & "]"
        WScript.Echo "PEHeaderSize    = [" & Me.PEHeaderSize & "]"
        WScript.Echo "MajorLinkerVer  = [" & Me.MajorLinkerVer & "]"
        WScript.Echo "MinorLinkerVer  = [" & Me.MinorLinkerVer & "]"
        WScript.Echo "LinkerVer       = [" & Me.LinkerVer & "]"
    End Sub

    Private Function GetPEHeaderSize( szBuf )
        Dim nResult
        Dim nPosition
        Dim nSize

        nPosition = 60 ' IMAGE_DOS_HEADER の e_lfanew の位置
        nSize = 4
        nResult = GetFieldValueFromBinary( szBuf, nPosition, nSize )

        GetPEHeaderSize = nResult
    End Function

    Private Function GetMajorLinkerVer( szBuf )
        Dim nResult
        Dim nPosition
        Dim nSize

        nPosition = GetPEHeaderSize( szBuf )
        nPosition = nPosition + 4 + 20 + 2     ' IMAGE_OPTIONAL_HEADER の MajorLinkerVersion の位置
        nSize = 1
        nResult = GetFieldValueFromBinary( szBuf, nPosition, nSize )

        GetMajorLinkerVer = nResult
    End Function

    Private Function GetMinorLinkerVer( szBuf )
        Dim nResult
        Dim nPosition
        Dim nSize

        nPosition = GetPEHeaderSize( szBuf )
        nPosition = nPosition + 4 + 20 + 2 + 1 ' IMAGE_OPTIONAL_HEADER の MinorLinkerVersion の位置
        nSize = 1
        nResult = GetFieldValueFromBinary( szBuf, nPosition, nSize )

        GetMinorLinkerVer = nResult
    End Function

    Private Function GetFieldValueFromBinary( szBuf, nPosition, nSize )
        Dim nResult

        Dim szField
        szField = MidB( szBuf, nPosition, nSize )
        nResult = ConvertBinaryToNumber( szField, nSize )

        GetFieldValueFromBinary = nResult
    End Function

    Private Function ConvertBinaryToNumber( szBuf, nSize )
        Dim nResult
        nResult = 0
        Dim ch
        Dim i
        For i = 1 To nSize
            ch = AscB( MidB( szBuf, i, 1 ) )
            nResult = nResult + ch * 256 ^ (i-1) ' リトルエンディアンを想定
        Next
        ConvertBinaryToNumber = nResult
    End Function
End Class
コマンド例
CScript ShowLinkerVer.vbs //Nologo /F:"C:\WINDOWS\SYSTEM32\notepad.exe"
実行結果
FileName        = [C:\WINDOWS\SYSTEM32\notepad.exe]
PEHeaderSize    = [224]
MajorLinkerVer  = [7]
MinorLinkerVer  = [10]
LinkerVer       = [7.10]

<リンカバージョンに対応する主な開発環境>
 5.1  … VC++5.0 (Visual Studio 97)
 6.0  … VC++6.0 (Visual Studio 6.0)
 7.0  … VC++7.0 (Visual Studio .NET 2002)
 7.10 … VC++7.1 (Visual Studio .NET 2003)
 8.0  … VC++8.0 (Visual Studio 2005)
 9.0  … VC++9.0 (Visual Studio 2008)
10.0  … VC++10.0 (Visual Studio 2010)
----------------------------------------
 2.25 … Delphi or BCB?

<不明なリンカバージョン>
 3.1  … DBGRID32.OCX, COMCT232.OCX 等
 5.12 … MSDXM.OCX 等
 5.2  … MSFLXGRD.OCX, RICHTX32.OCX, COMDLG32.OCX 等

参考情報

2009-02-14Microsoft Anna で空耳英語

Microsoft Anna で空耳英語

01:15 | Microsoft Anna で空耳英語 - CX's VBScript Diary を含むブックマーク はてなブックマーク - Microsoft Anna で空耳英語 - CX's VBScript Diary

日本語版の Windows Vista には、残念ながら日本語音声合成エンジンが搭載されていません。

そこで、無理やり空耳英語(英語の発音で日本語をしゃべらせること)で、日本語(50音)をしゃべらせてみました。

サンプルコード

' File : SoramimiSpeaker.vbs
' Usage : CScript //Nologo SoramimiSpeaker.vbs
Option Explicit

Call Main()

Sub Main()
    Dim speaker
    ' オブジェクト生成
    Set speaker = New SoramimiSpeaker
    
    ' 日本語50音
    Call SpeakJapanese50( speaker )
    
    ' 日本語サンプル(英語を含む)
    Call SpeakJapaneseNormal( speaker )
    
    ' 早口言葉
    Call SpeakJapaneseHayakuchi( speaker )
    
    ' オブジェクト破棄
    Set speaker = Nothing
End Sub

Sub SpeakJapanese50( speaker )
    speaker.Speak "あいうえお"
    speaker.Speak "かきくけこ"
    speaker.Speak "さしすせそ"
    speaker.Speak "たちつてと"
    speaker.Speak "なにぬねの"
    speaker.Speak "はひふへほ"
    speaker.Speak "まみむめも"
    speaker.Speak "やゆよ"
    speaker.Speak "らりるれろ"
    speaker.Speak "わをん"
    
'    speaker.Speak "がぎぐげご"
'    speaker.Speak "ざじずぜぞ"
'    speaker.Speak "だぢづでど"
'    speaker.Speak "ぱぴぷぺぽ"
'    
'    speaker.Speak "きゃきゅきょ"
'    speaker.Speak "しゃしゅしょ"
'    speaker.Speak "ちゃちゅちょ"
'    speaker.Speak "にゃにゅにょ"
'    speaker.Speak "ひゃひゅひょ"
'    speaker.Speak "みゃみゅみょ"
'    speaker.Speak "りゃりゅりょ"
'    speaker.Speak "ぎゃぎゅぎょ"
'    speaker.Speak "じゃじゅじょ"
'    speaker.Speak "びゃびゅびょ"
'    speaker.Speak "ぴゃぴゅぴょ"
'    
'    speaker.Speak "あんいんうんえんおん"
'    speaker.Speak "かんきんくんけんこん"
'    speaker.Speak "さんしんすんせんそん"
'    speaker.Speak "たんちんつんてんとん"
'    speaker.Speak "なんにんぬんねんのん"
'    speaker.Speak "はんひんふんへんほん"
'    speaker.Speak "まんみんむんめんもん"
'    speaker.Speak "やんゆんよん"
'    speaker.Speak "らんりんるんれんろん"
'    speaker.Speak "わんをんんん"
'    speaker.Speak "がんぎんぐんげんごん"
'    speaker.Speak "ざんじんずんぜんぞん"
'    speaker.Speak "だんぢんづんでんどん"
'    speaker.Speak "ばんびんぶんべんぼん"
'    speaker.Speak "ぱんぴんぷんぺんぽん"

End Sub

Sub SpeakJapaneseNormal( speaker )
    ' 日本語サンプル(英語を含む)
    speaker.Speak "こんにちは、せかい。"
    speaker.Speak "Japanese は、むずかしいです。"
    speaker.Speak "にほんごばんの Windows Vista には、ざんねんながら、にほんごごうせいえんじんが、とうさい、されていません。"
End Sub

Sub SpeakJapaneseHayakuchi( speaker )
    ' 早口言葉
    speaker.Speak "ばすがすばくはつ"
    speaker.Speak "あかまきがみあおまきがみきまきがみ"
    speaker.Speak "となりのきゃくは、よくかきくうきゃくだ"
End Sub

' 空耳読み上げクラス
Class SoramimiSpeaker
    Private m_dic
    Private m_sapi
    ' 初期化処理
    Sub Class_Initialize
        Set m_dic  = CreateObject("Scripting.Dictionary")
        Set m_sapi = CreateObject("SAPI.SpVoice")

        ' 辞書追加
        AppendDic "あ = i;   い = e;   う = wu;  え = a;   お = wo"
        AppendDic "か = car; き = key; く = coo; け = k;   こ = coe"
        AppendDic "さ = sar; し = she; す = su;  せ = set; そ = so"
        AppendDic "た = ta;  ち = chie;つ = two; て = tait; と = toe"
        AppendDic "な = na;  に = neet;ぬ = noon;ね = nee; の = no"
        AppendDic "は = ha;  ひ = he;  ふ = foo; へ = hey; ほ = ho"
        AppendDic "ま = my;  み = me;  む = moo; め = may; も = moe"
        AppendDic "や = yae; ゆ = you; よ = yor"
        AppendDic "ら = rar; り = lee; る = lew; れ = ray; ろ = roe"
        AppendDic "わ = war; を = wo;  ん = n"
        AppendDic "が = gat; ぎ = geek;ぐ = goo; げ = gay; ご = go"
        AppendDic "ざ = zak; じ = ji;  ず = zoo; ぜ = zee; ぞ = zlo"
        AppendDic "だ = duh; ぢ = gee; づ = zu;  で = day; ど = doe"
        AppendDic "ば = bar; び = be;  ぶ = boo; べ = baer;ぼ = bo"
        AppendDic "ぱ = par; ぴ = pea; ぷ = poor;ぺ = pe;  ぽ = po"

        AppendDic "きゃ = cat; きゅ = q;   きょ = kyo"
        AppendDic "しゃ = sha; しゅ = shu; しょ = show"
        AppendDic "ちゃ = cha; ちゅ = chu; ちょ = cho"
        AppendDic "にゃ = nia; にゅ = new; にょ = gno"
        AppendDic "ひゃ = char;ひゅ = chew;ひょ = chow"
        AppendDic "みゃ = mya; みゅ = mew; みょ = mio"
        AppendDic "りゃ = lya; りゅ = lue; りょ = low"
        AppendDic "ぎゃ = gag; ぎゅ = gue; ぎょ = gheo"
        AppendDic "じゃ = jar; じゅ = ju;  じょ = jo"
        AppendDic "びゃ = vya; びゅ = view;びょ = byung"
        AppendDic "ぴゃ = pyat;ぴゅ = pure;ぴょ = pyong"

        AppendDic "あん = an,;  いん = in;   うん = unn;  えん = en;   おん = on"
        AppendDic "かん = can;  きん = kin;  くん = kung; けん = ken;  こん = kong"
        AppendDic "さん = sun;  しん = shin; すん = seung;せん = senn; そん = song"
        AppendDic "たん = tun;  ちん = ching;つん = zun;  てん = ten;  とん = tong"
        AppendDic "なん = nan;  にん = nin;  ぬん = noon; ねん = neng; のん = non"
        AppendDic "はん = han;  ひん = hin;  ふん = hunn; へん = hen;  ほん = hon"
        AppendDic "まん = man;  みん = ming; むん = moon; めん = men;  もん = mong"
        AppendDic "やん = yang; ゆん = yung; よん = yong"
        AppendDic "らん = run;  りん = rin;  るん = rune; れん = ren;  ろん = ron"
        AppendDic "わん = wan;  をん = won;  んん = n"
        AppendDic "がん = gun;  ぎん = ginn; ぐん = goun; げん = gain; ごん = gon"
        AppendDic "ざん = xan;  じん = jin;  ずん = zun;  ぜん = zeng; ぞん = zong"
        AppendDic "だん = dunn; ぢん = zin;  づん = zun;  でん = den;  どん = don"
        AppendDic "ばん = ban;  びん = bin;  ぶん = boon; べん = ben;  ぼん = bon"
        AppendDic "ぱん = paan; ぴん = pin;  ぷん = poon; ぺん = pen;  ぽん = pong"

        AppendDic "は、= war,; は。= war."
        AppendDic "へ、= e,;   へ。= e."
        AppendDic "っ = ,; 、= ,;  。= .; ー = -; ? = ?; ! = !"
    End Sub
    ' 終了処理
    Sub Class_Terminate
        Set m_sapi = Nothing
        Set m_dic = Nothing
    End Sub
    ' 辞書追加
    Sub AppendDic( strDic )
        Dim strItems
        strItems = Split( strDic, ";" )
        Dim strItem
        For Each strItem In strItems
            Dim strKey
            Dim strValue
            Dim strKeyValueArray
            strKeyValueArray = Split( strItem, "=" )
            strKey   = Trim( strKeyValueArray(0) )
            strValue = Trim( strKeyValueArray(1) )
            m_dic.Add strKey, strValue
        Next
    End Sub
    ' 日本語読み上げ
    Sub Speak( strJapanese )
        Dim strEnglish
        ' あいうえお -> "i-e-wu-a-wo"
        strEnglish = ConvertJapaneseToEnglish( strJapanese )
        WScript.Echo "[" & strJapanese & "](Japanese) -> [" & strEnglish & "](English)"
        m_sapi.Speak strEnglish
    End Sub
    ' 空耳辞書変換
    Function ConvertJapaneseToEnglish( strJapanese )
        Dim strResult
        Dim strKey
        Dim strKey1
        Dim strKey2
        Dim strValue
        Dim bFirst
        bFirst = True
        Dim i
        For i = 1 To Len( strJapanese )
            If i = 1 Then
                bFirst = True
            Else
                bFirst = False
            End If
            strKey1 = Mid( strJapanese, i, 1 )
            strKey2 = Mid( strJapanese, i, 2 )
            If m_dic.Exists( strKey2 ) Then
                strKey = strKey2
                i = i + 1
            ElseIf m_dic.Exists( strKey1 ) Then
                strKey = strKey1
            Else
                strKey = strKey1
            End If
            
            If m_dic.Exists( strKey ) Then
                strValue = m_dic( strKey )
                If bFirst Or strValue = "," Or strValue = "." Then
                    strResult = strResult & strValue
                Else
                    strResult = strResult & " " & strValue
                End If
            Else
                strResult = strResult & strKey
            End If
        Next
        ConvertJapaneseToEnglish = strResult
    End Function
End Class

実行結果

[あいうえお](Japanese) -> [i e wu a wo](English)
[かきくけこ](Japanese) -> [car key coo k coe](English)
[さしすせそ](Japanese) -> [sar she su set so](English)
[たちつてと](Japanese) -> [ta chie two tait toe](English)
[なにぬねの](Japanese) -> [na neet noon nee no](English)
[はひふへほ](Japanese) -> [ha he foo hey ho](English)
[まみむめも](Japanese) -> [my me moo may moe](English)
[やゆよ](Japanese) -> [yae you yor](English)
[らりるれろ](Japanese) -> [rar lee lew ray roe](English)
[わをん](Japanese) -> [war won](English)
[こんにちは、せかい。](Japanese) -> [kong neet chie war, set car e.](English)
[Japanese は、むずかしいです。](Japanese) -> [Japanese  war, moo zoo car she e day su.](English)
[にほんごばんの Windows Vista には、ざんねんながら、
 にほんごごうせいえんじんが、とうさい、されていません。](Japanese) -> 
[neet hon go ban no Windows Vista  neet war, xan neng na gat rar, 
 neet hon go go wu set e en jin gat, toe wu sar e, sar ray tait e my senn.](English)
[ばすがすばくはつ](Japanese) -> [bar su gat su bar coo ha two](English)
[あかまきがみあおまきがみきまきがみ](Japanese) -> [i car my key gat me i wo my key gat me key my key gat me](English)
[となりのきゃくは、よくかきくうきゃくだ](Japanese) -> [toe na lee no cat coo war, yor coo car key coo wu cat coo duh](English)

空耳50音

iewuawo
carkeycookcoe
sarshesusetso
tachietwotaittoe
naneetnoonneeno
hahefooheyho
mymemoomaymoe
yae you yor
rarleelewrayroe
war wo
n
gatgeekgoogaygo
zakjizoozeezlo
duhgeezudaydoe
barbeboobaerbo
parpeapoorpepo
きゃcatきゅqきょkyo
しゃshaしゅshuしょshow
ちゃchaちゅchuちょcho
にゃniaにゅnewにょgno
ひゃcharひゅchewひょchow
みゃmyaみゅmewみょmio
りゃlyaりゅlueりょlow
ぎゃgagぎゅgueぎょgheo
じゃjarじゅjuじょjo
びゃvyaびゅviewびょbyung
ぴゃpyatぴゅpureぴょpyong
あんan,いんinうんunnえんenおんon
かんcanきんkinくんkungけんkenこんkong
さんsunしんshinすんseungせんsennそんsong
たんtunちんchingつんzunてんtenとんtong
なんnanにんninぬんnoonねんnengのんnon
はんhanひんhinふんhunnへんhenほんhon
まんmanみんmingむんmoonめんmenもんmong
やんyang ゆんyung よんyong
らんrunりんrinるんruneれんrenろんron
わんwan をんwon
んんn
がんgunぎんginnぐんgounげんgainごんgon
ざんxanじんjinずんzunぜんzengぞんzong
だんdunnぢんzinづんzunでんdenどんdon
ばんbanびんbinぶんboonべんbenぼんbon
ぱんpaanぴんpinぷんpoonぺんpenぽんpong

参考情報

2009-01-12IE のアドレスバーで VBScript を実行する方法

IE のアドレスバーで VBScript を実行する方法(その1)

| 20:00 | IE のアドレスバーで VBScript を実行する方法(その1) - CX's VBScript Diary を含むブックマーク はてなブックマーク - IE のアドレスバーで VBScript を実行する方法(その1) - CX's VBScript Diary

アドレスバーで JavaScript を実行する例は頻繁に紹介されますが、VBScript でも同様に実行できます。

ただし、VBScript が実行できるのは残念ながら IE のみとなります。

サンプルコード

アドレスバーに下記の内容を貼り付けて [Enter] キーを押します。

VBScript:MsgBox("Hello")

実行結果

---------------------------
VBScript
---------------------------
Hello
---------------------------
OK   
---------------------------

参考情報

IE のアドレスバーで VBScript を実行する方法(その2)

| 20:13 | IE のアドレスバーで VBScript を実行する方法(その2) - CX's VBScript Diary を含むブックマーク はてなブックマーク - IE のアドレスバーで VBScript を実行する方法(その2) - CX's VBScript Diary

概要

IE のアドレスバーで複数の命令文を1度に実行する場合は Execute() 関数を用います。

サンプルコード

アドレスバーに下記の内容を貼り付けて [Enter] キーを押します。

vbscript:Execute("For i = 1 To 3:MsgBox(i):Next")

実行結果

---------------------------
VBScript
---------------------------
1
---------------------------
OK   
---------------------------

コマンドラインで VBScript を実行する方法

| 20:30 | コマンドラインで VBScript を実行する方法 - CX's VBScript Diary を含むブックマーク はてなブックマーク - コマンドラインで VBScript を実行する方法 - CX's VBScript Diary

概要

上記の方法により IE のアドレスバーより VBScript を実行することができますが、MSHTA.exe を用いることにより、コマンドラインから、HTA 経由で VBScript を実行することが可能です。

サンプルコード

コマンドプロンプトに下記の内容を貼り付けて [Enter] キーを押します。

mshta.exe vbscript:Execute("CreateObject(""SAPI.SpVoice"").Speak ""Hello"":Close")

実行結果

「Hello」としゃべります。
|