If you want to get fancy with OSD there is a way to do it using RoboBrowser (and I'm sure other solutions could be found too), although you may find that the RoboB window does interfere with your other running programs to some extent by stealing focus, or it may fail to appear in front of other windows in some cases.
The inspiration comes from the following post:
http://voxcommando.com/forum/index.php?topic=2047.0Here is XML for a group to get you started. There are two commands. The first creates a RoboBrowser, positions it, hides the frame etc. Then it navigates to an html page (we need to have one to start with but it might be better (faster and easier to lay out) for you to create a local html file to work with (I just wanted to give you a working example using XML only). Then it grabs the Body tag and rewrites the HTML.
The second command shows how you can modify just a part of the HTML page. This is probably what you would want to use if you created your own OSD layout file. In this case I am finding the 2nd heading and changing the text to display the current time.
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.2.3.5-->
<commandGroup open="True" name="RoboB OSD example" enabled="True" prefix="" priority="0" requiredProcess="" description="">
<command id="50" name="create osd" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>RoboB.Select</cmdType>
<params>
<param>myOSD</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>RoboB.Navigate</cmdType>
<params>
<param>http://blank.org/</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>RoboB.Wait</cmdType>
<params />
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>RoboB.Show</cmdType>
<params>
<param>True</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>RoboB.ShowFrame</cmdType>
<params>
<param>false</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>RoboB.SetWinSize</cmdType>
<params>
<param>400</param>
<param>180</param>
<param>33</param>
<param>33</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>RoboB.ElementByTag</cmdType>
<params>
<param>BODY</param>
<param>0</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>RoboB.SetHTML</cmdType>
<params>
<param><h1>My First Heading</h1><h2 style="background-color:rgb(0,255,0)">My second Heading</h2><h2 style="color:rgb(0,0,180)">My third Heading</h2></param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</command>
<command id="69" name="update second heading" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>RoboB.Select</cmdType>
<params>
<param>myOSD</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>RoboB.ElementByTag</cmdType>
<params>
<param>H2</param>
<param>0</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>RoboB.SetText</cmdType>
<params>
<param>time now: {ShortTime}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</command>
</commandGroup>