A2120


ユーザスクリプトをWindowsのマウス操作だけで実行させるには

「展開一番」のユーザスクリプトをWindowsのマウス操作だけで実行するには、'「展開一番」の利用手順'の'7.スクリプトを実行する''スクリプトの実行画面'で紹介している、フリーソフトウェアの「Apollo」などを利用する方法がありますが
ここでは、ブリコラージュの精神に則り、別の解決方法、すなわち自作の方法を考えてみます

(Rubyの)ユーザスクリプトを実行する手順は、以下のようになります
1.コマンドプロンプト画面を開く
2.ユーザスクリプトを置いているドライブに移動する
3.ユーザスクリプトを置いているディレクトリに移動する
4.コマンドをタイプ(Ruby UserScript.rb)して実行する
上記の操作を自動実行する一つの方法として「バッチ処理」が考えられます
「バッチ処理」とは、コマンドプロンプトに与える命令を処理順に列挙したテキストファイル(バッチファイル)を作成し、それを自動実行させる処理をいいます
以下は、VisualStudio.netというソフトウェアに含まれている、VisualBasic.NET(以下「VB」という)という言語を利用した例です−このソフトウェアにはアカデミーバック版があります、5千円程度ですから、学生であれば購入しておきたいソフトウェアです(Microfoftの思惑通りではありますが)−
VBの「OpenFileDialog」でファイル名を取得できます、このファイル名には、ドライブレターとパスが付いているので、上記2.と3.の情報を得ることができます、また、shell関数を利用すればコマンドプロントからバッチファイルを実行できます


VBでは、「フォーム」(実行時には1つのウィンドウとして見える)という台紙にコントロールを貼り付け、そのコントロールにコードを関連付けてプログラムを作成します
この例では、「フォーム」に3種類のコントロール、すなわち、4つのボタンとテキストボックス、ダイアログボックスを貼り付けています
なお、上記の他にToolTipコントロールが見えますが、これは各ボタンに簡単なメッセージを表示させるもので、基本機能とは直接関係がないので無視することにします
コントロールを配置したら、これを選択し、そのプロパティ画面から、ボタンの位置、大きさ、フォントの色などを自分の好みに変更します
コントロールをダブルクリックすると、コードの入力画面が表示されるので、必要な動作を行うコードを入力します



T「選択」ボタンのコード

「選択」ボタンでは、ユーザスクリプトを選択し、そのファイル名から、バッチファイル作成に必要なデータを作成します
入力するコードは以下の通りです、ただし、青字部分はシステムが自動生成するので入力の必要はありません(例によって、エラーリカバリのコードは含まれていません、以下同様)

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Button4.Click
Dim x As String
Dim p As Integer
Dim l As Integer
If (OpenFileDialog1.ShowDialog() = DialogResult.OK) Then
x = OpenFileDialog1.FileName
l = Microsoft.VisualBasic.Len(x)
p = Microsoft.VisualBasic.InStrRev(x, "\")
strDriveLetter = Microsoft.VisualBasic.Left(x, 2)
strPath = Microsoft.VisualBasic.Mid(x, 4, p - 4)
strPathFull = strDriveLetter & "\" & strPath & "\"
strUserScript = Microsoft.VisualBasic.Right(x, l - p)
TextBox2.Text = strDriveLetter & Chr(13) & Chr(10) & "cd " & strPath & _
Chr(13) & Chr(10) & "ruby " & strUserScript
End If

End Sub

OpenFileDialog1.ShowDialog...で、Windowsでお馴染みのファイル選択画面が開きます
OpenFileDialog1.FileName...で、ファイル名(ユーザスクリプト)が帰されるので、これを変数xに代入し、これから、ドライブレター(xの最初の2文字)をstrDriveLetter変数に代入し、以下、パス、ファイル名をそれぞれの変数に代入します
TextBox2.Text...で、バッチファイルの内容を、テキストボックスに書き込みます、Chr(13) & Chr(10)は改行を行うコードですから、バッチファイルは3行(上記手順の2.〜4.に対応)になります
これにより、画面上のテキストボックスに、作成されるバッチファイの内容が表示されます



U「作成」ボタンのコード

「作成」ボタンでは、バッチファイルをユーザスクリプトのフォルダに作成します
入力するコードは以下の通りです

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Button2.Click
Dim stream As System.IO.Stream = System.IO.File.Open(strPathFull & "t1_VB.bat", _
System.IO.FileMode.Create)
Dim writer As New System.IO.StreamWriter(stream)
writer.Write(strDriveLetter & Chr(13) & Chr(10) & "cd " & strPath & _
Chr(13) & Chr(10) & "ruby " & strUserScript)
writer.Close()
stream.Close()
MsgBox("バッチファイルを作成しました", MsgBoxStyle.OKOnly)

End Sub

Dim stream...Dim writer...で、ファイル作成の準備を行います、なお、ファイル名は「t1_VB.bat」としています
writer.Write...で、バッチファイルの内容を書き出しています
ファイルをクローズして、メッセージを出して終了します



V「実行」ボタンのコード

「実行」ボタンでは、作成したバッチファイルを実行します
入力するコードは以下の通りです

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Button1.Click
Shell(strPathFull & "t1_VB.bat")
MsgBox("バッチファイルを実行しました", MsgBoxStyle.OKOnly)

End Sub

shell関数を使って、コマンドプロンプトからバッチファイル「t1_VB.bat」を実行します
メッセージを出して終了します、ただし、このメッセージはバッチ処理が正常に終了したかどうかには関係なく出されることに留意してください


W「終了」ボタンのコード

「終了」ボタンで「フォーム」を閉じます
入力するコードは以下の通り、1行だけです

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Button3.Click
Form.ActiveForm.Close()
End Sub



Xその他

「フォーム」を作成すると
以下のコードが自動的に作成されます
Public Class Form1............End Class
TからWのコードはこの中に書きます(Private Sub.....End Sub はこの間に自動生成されます)
なお、共通に使われる以下の変数は、Public Class の次、最初のPrivate Subの前に定義しておきます
-----------------------------
Dim strDriveLetter As String
Dim strPath As String
Dim strPathFull As String
Dim strUserScript As String
-----------------------------




Last Update 2005/05/08