« 文字色や背景色などのコンソールテキスト属性を変更する。 | トップページ | WScript.Echo()で文字色や背景色などを変更する。 »

2009年9月14日 (月)

文字色や背景色などのコンソールテキスト属性を変更する。(その2)

VB.NETからWin32APIのSetConsoleTextAttribute()を呼び出します。

XColor.exe 属性

属性は、文字色(0~15)、背景色(&H00~&Hf0)、下線(&H8000)など。Color/?参照。
10進数または16進数(&H~)で。CMDでのエスケープは、"&H~" か ^&H~ で。

vbc XColor.VB

Public Class Class1

Private Const GENERIC_READ As Int32 = &H80000000
Private Const GENERIC_WRITE As Int32 = &H40000000
Private Const FILE_SHARE_READ As Int32 = &H00000001
Private Const FILE_SHARE_WRITE As Int32 = &H0000002
Private Const OPEN_EXISTING As Int32 = 3

Private Declare Auto Function CreateFile Lib "kernel32.dll" ( _
  ByVal lpFileName As String, ByVal dwDesiredAccess As Int32, _
  ByVal dwShareMode As Int32, ByVal lpSecurityAttributes As IntPtr, _
  ByVal dwCreationDisposition As Int32, ByVal dwFlagsAndAttributes As Int32, _
  ByVal hTemplateFile As IntPtr) As IntPtr
Private Declare Auto Function CloseHandle Lib "kernel32.dll" (ByVal hObject As IntPtr) As Boolean
Private Declare Function SetConsoleTextAttribute Lib "kernel32" (ByVal hConsoleOutput As Integer, ByVal wAttributes As Integer) As Integer

Public Shared Sub Main(ByVal Args() As String)
Dim wAttributes As Integer
If Args.Length=1 AndAlso IsNumeric(Args(0)) Then
  wAttributes = CInt(Args(0))
Else
  Console.WriteLine("Usage: XColor Attribute")
  Exit Sub
End If
Dim hConsoleOutput As Integer = CreateFile("CONOUT$", GENERIC_READ Or GENERIC_WRITE,  FILE_SHARE_READ Or FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, IntPtr.Zero, IntPtr.Zero)
SetConsoleTextAttribute(hConsoleOutput, wAttributes)
CloseHandle(hConsoleOutput)
End Sub
End Class

使用例、文字列「赤青黄」をその文字色で出します。

@echo off
xcolor 12
set <NUL /p x=赤
xcolor 9
set <NUL /p x=青
xcolor "&he"
set <NUL /p x=黄
xcolor 7

« 文字色や背景色などのコンソールテキスト属性を変更する。 | トップページ | WScript.Echo()で文字色や背景色などを変更する。 »