(AHK)(AutoHotkey)(ruby)(安易に ruby版の ラッパーexeも 作ってみた 笑)

 前回は .ahkファイルに対する ラッパーを作ってみたんで
今回は .rb .rbw ファイルに対する ラッパーも 安易な気持ちで作ってみました 笑)

 ruby版だから .rbで書いたのを exerbで exe化したものにしようかとも思ったんですが
まぁ AutoHotkeyの方が慣れているんで AutoHotkeyで書きました 笑)

 ahkのラッパーのと同じノリで rubyスクリプト組みたいけど
修正するごとに 毎度exe化するのもめんどいし 特に人に渡すわけでもないし
って人には(居るか分からないけど 笑) 便利かも? 笑)

 対.ahk版との違いは
まず同名の .rbがあるかどうかをチェックし
あれば 新しいコマンドプロンプト を 開いて .rbを実行します
無ければ .rbwを実行します

	DQ := Chr(0x22) ; ダブルクォーテーション
	cmd := ""
	Loop
	{
		If ( %A_Index% == "" )
			Break
		cmd .= " " . DQ . %A_Index% . DQ
	}
	If ( FN2IsE(ScriptFileName := A_ScriptDir . "\" . E2F(A_ScriptName) . ".rb") )
	{
		RunEx("C:\WINDOWS\system32\cmd.exe", "/k " . DQ . DQ . ScriptFileName . DQ . " " . cmd . DQ)
		ExitApp
	}Else{
		ScriptFileName := A_ScriptDir . "\" . E2F(A_ScriptName) . ".rbw"
		RunEx(ScriptFileName, cmd)
		ExitApp
	}
E2F(Expression, BufferSize = 1000)
{
	VarSetCapacity(Buf, BufferSize, 0x00)
	DllCall("kernel32.dll\lstrcpyA", "Str", Buf, "Int", DllCall("shlwapi.dll\PathFindFileNameA", "Str", Expression) )
	DllCall("shlwapi.dll\PathRemoveExtensionA", "Str", Buf)
	Return Buf
}
E2D(Expression, BufferSize = 1000)
{
	VarSetCapacity(Buf, BufferSize, 0x00)
	Buf := Expression
	DllCall("shlwapi.dll\PathRemoveFileSpecA", "Str", Buf)
	Return Buf
}
FN2FL(FileName, BufferSize = 1000)
{
	VarSetCapacity(Buf, BufferSize, 0x00)
	DllCall("kernel32.dll\GetLongPathNameA", "Str", FileName, "Str", Buf, "UInt", BufferSize)
	DllCall("kernel32.dll\GetFullPathNameA", "Str", Buf, "UInt", BufferSize, "Str", Buf, "UInt", 0)
	Return Buf
}
FN2IsE(FileName)
{
	Return DllCall("shlwapi.dll\PathFileExistsA", "Str", FileName)
}
RunEx(ExecuteFileName, Parameter, WorkDirectory = "", SW_xxxx = 1)
{
	If ( (ExecuteFileName := FN2FL(ExecuteFileName)) == "" )
		Return 0
	If ( WorkDirectory == "" )
		WorkDirectory := E2D(ExecuteFileName) . "\"
	Return DllCall("shell32.dll\ShellExecuteA", "UInt",  0
                                                  , "Str",   "open"
                                                  , "Str",   ExecuteFileName
                                                  , "Str",   Parameter
                                                  , "Str",   WorkDirectory
                                                  , "UInt",  SW_xxxx)
}