多くの人が指摘しているように、Bondのソリューション(VB6.exeの色テーブルを16進編集する)は機能しますが、VB6を起動するたびにオプションダイアログで色をリセットする必要があります。すべての作業を行うAutoItスクリプトを作成しました。必要に応じてSetSyntaxColoring()のすべての呼び出しが行われる場所で編集します。
Opt("WinTitleMatchMode", 2)
Opt("MouseClickDelay", 1)
Opt("MouseClickDownDelay", 1)
Opt("MouseClickDragDelay", 1)
Opt("SendKeyDelay", 1)
Opt("SendKeyDownDelay", 1)
Const $NORMALTEXT = 0
Const $SELECTIONTEXT = 1
Const $SYNTAXERRORTEXT = 2
Const $EXECUTIONPOINTTEXT = 3
Const $BREAKPOINTTEXT = 4
Const $COMMENTTEXT = 5
Const $KEYWORDTEXT = 6
Const $IDENTIFIERTEXT = 7
Const $BOOKMARKTEXT = 8
Const $CALLRETURNTEXT = 9
Const $AUTO = 0
Const $BLACK = 1
Const $DARKBLUE = 2
Const $DARKGREEN = 3
Const $DARKRED = 4
Const $DARKBABYBLUE = 5
Const $DARKPINK = 6
Const $DARKYELLOW = 7
Const $LIGHTGRAY = 8
Const $DARKGRAY = 9
Const $BLUE = 10
Const $GREEN = 11
Const $BABYBLUE = 12
Const $RED = 13
Const $PINK = 14
Const $YELLOW = 15
Const $WHITE = 16
If WinExists( "Microsoft Visual Basic" ) Then
WinActivate("Microsoft Visual Basic") ; activates the visual basic window
Send("!+to") ; opens the options menu
Sleep(10)
WinMove("Options", "", 0, 0) ; moves the options menu to the upper left corner of the screen
MouseClick("primary", 100, 50, 1, 0) ; clicks the editor tab
SetSyntaxColoring($NORMALTEXT, $WHITE, $BLACK)
SetSyntaxColoring($SELECTIONTEXT, $AUTO, $AUTO)
SetSyntaxColoring($SYNTAXERRORTEXT, $BLACK, $YELLOW)
SetSyntaxColoring($EXECUTIONPOINTTEXT, $AUTO, $YELLOW)
SetSyntaxColoring($BREAKPOINTTEXT, $WHITE, $DARKRED)
SetSyntaxColoring($COMMENTTEXT, $DARKGREEN, $BLACK)
SetSyntaxColoring($KEYWORDTEXT, $GREEN, $BLACK)
SetSyntaxColoring($IDENTIFIERTEXT, $WHITE, $BLACK)
SetSyntaxColoring($BOOKMARKTEXT, $WHITE, $BLACK)
SetSyntaxColoring($CALLRETURNTEXT, $WHITE, $GREEN)
MouseClick("primary", 210, 340, 1, 0) ; hit the ok button to apply the changes
EndIf
Func SetSyntaxColoring($syntax, $forecolor, $backcolor)
SelectSyntax($syntax)
SelectForecolor($forecolor)
SelectBackcolor($backcolor)
EndFunc
Func SelectSyntax($syntax)
ResetSyntaxList()
RptSend("{DOWN}", $syntax)
EndFunc
Func SelectForecolor($color)
ResetForecolorCbo()
RptSend("{DOWN}", $color)
EndFunc
Func SelectBackcolor($color)
ResetBackcolorCbo()
RptSend("{DOWN}", $color)
EndFunc
Func ResetSyntaxList()
MouseClick("primary", 50, 95, 1, 0)
RptSend("{UP}", 9)
EndFunc
Func ResetForecolorCbo()
MouseClick("primary", 50, 235, 1, 0)
MouseClick("primary", 50, 235, 1, 0)
RptSend("{UP}", 16)
EndFunc
Func ResetBackcolorCbo()
MouseClick("primary", 125, 235, 1, 0)
MouseClick("primary", 125, 235, 1, 0)
RptSend("{UP}", 16)
EndFunc
Func RptSend($text, $rpt)
For $i = 1 To $rpt
Send($text)
Next
EndFunc
デスクトップに保存するだけで、vb6を開く必要があるときはいつでもダブルクリックするだけで、構文の色付けが制御できるようになります。
編集1:スクリプトを少し最適化して、実行時間を短縮しました。VB6.EXEを自動的に編集して色の選択を容易にするプログラムをまとめることを考えています。VS用のプラグインを作成してAutoItスクリプトを捨てる方法があるのだろうか?
編集2:16進エディタを使用せずにexeの色を編集できるユーティリティを作成しました:VbClassicColorEditor。そのリンクは、bitbucketの公開リポジトリに移動します。