<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>devtrends.com &#187; Kiosk</title>
	<atom:link href="http://www.devtrends.com/index.php/category/kiosk/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.devtrends.com</link>
	<description>developing trends in information technology</description>
	<lastBuildDate>Tue, 06 Sep 2011 19:27:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Using Microsoft SteadyState as a Kiosk</title>
		<link>http://www.devtrends.com/index.php/using-microsoft-steadystate-for-a-kiosk/</link>
		<comments>http://www.devtrends.com/index.php/using-microsoft-steadystate-for-a-kiosk/#comments</comments>
		<pubDate>Thu, 26 Nov 2009 17:04:11 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[Kiosk]]></category>
		<category><![CDATA[Windows XP]]></category>
		<category><![CDATA[SteadyState]]></category>

		<guid isPermaLink="false">http://www.devtrends.com/?p=170</guid>
		<description><![CDATA[Making a publicly accessed computer safe can be a challenging project, especially if you are concerned about what web sites are allowed. Although there are quite a few methods for...]]></description>
			<content:encoded><![CDATA[<p>Making a publicly accessed computer safe can be a challenging project, especially if you are concerned about what web sites are allowed. Although there are quite a few methods for making a kiosk, such as pre-engineered hardware and software, there is always a cheaper method of accomplishing the same task. I am not here to argue that one is better than the other, only to share my experiences with creating a kiosk using products and knowledge I already had around.</p>
<p>There are a few pieces to the puzzle for any kiosk:</p>
<p>1. computer hardware, preferably equipment that can be physically locked down.<br />
2. user interface restriction software, including Internet access restriction.<br />
3. operating system state lock down.</p>
<p><strong>Piece 1</strong></p>
<p>For piece 1, I have used machines such as a Dell Optiplex and an Intel-based Apple Mac Mini. The Mini was a much better because of the size of the case and limited drives (one CD). For some public areas, I would recommend a physical enclosure for the computer case to prevent any physical access.</p>
<p><strong>Piece 2 and 3</strong></p>
<p>In some cases, the Microsoft <a title="SteadyState" href="http://www.microsoft.com/windows/products/winfamily/sharedaccess/default.mspx" target="_blank">SteadyState</a> product can handle 2 and 3. Prior to SteadyState, step 3 would require an additional product such as <a title="DeepFreeze" href="http://www.faronics.com/html/deepfreeze.asp" target="_blank">DeepFreeze</a> to &#8220;lock&#8221; the operating system state. You might be thinking, can SteadyState stand up to the 13 year old hacker that is going to break into your Kiosk? Unfortunately, I do not have the answer &#8211; however, a quick Google search might help you determine that because DeepFreeze is more popular there are more articles towards cracking it versus SteadyState.</p>
<p>Besides the disk &#8220;freezing&#8221;, SteadyState locks down the operating system using Windows policy configuration. Obviously if the computer is joined to a domain, the group policy objects (GPO) will override similar SteadyState configuration.</p>
<p><strong>More on Piece 3</strong></p>
<p>Controlling web access has been a problem in enterprises for years and a Kiosk is no exception. From a legal standpoint, you can&#8217;t fire outside users of a Kiosk if they do something inappropriate. This means that control of Internet has to be even more restricted, which can be quite difficult.</p>
<p>I would recommend the combination of two applications: (a) using a product such as NetNanny to lock down inappropriate categories; and (b) build a custom web browser such as shown in my article, <a href="http://www.devtrends.com/index.php/creating-a-custom-web-browser/" target="_self">creating your own custom web browser</a> using Microsoft Visual Studio Express 2008. The custom web browser will allow you to control functionality of Internet Explorer programmatically, such as a minimal interface, predefined control bar, et cetera.</p>
<p>As a final note, SteadyState allows the administrator to lock Internet Explorer down to specific web URLs. To save space on domain name restriction, (there is a character limit), use the following format to get the entire domain, *devtrends.com.</p>
<p><a href="http://www.developingtrends.net/wp-content/uploads/2009/11/lockdown.jpg"><img class="alignnone size-medium wp-image-481" title="lockdown" src="http://www.devtrends.com/wp-content/uploads/2009/11/lockdown-300x218.jpg" alt="lockdown" width="300" height="218" /></a></p>
<p>Have fun and do your research before you put a Kiosk out for everyone to use! As with all of my other posts, I am not responsible for your failures and guarantee nothing. Article is for educational purposes only.</p>
<p>-Aaron Gilbert</p>
]]></content:encoded>
			<wfw:commentRss>http://www.devtrends.com/index.php/using-microsoft-steadystate-for-a-kiosk/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SteadyState and Screensavers</title>
		<link>http://www.devtrends.com/index.php/steadystate-and-screensavers/</link>
		<comments>http://www.devtrends.com/index.php/steadystate-and-screensavers/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 03:19:32 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[Kiosk]]></category>
		<category><![CDATA[Windows XP]]></category>
		<category><![CDATA[Screensaver]]></category>
		<category><![CDATA[SteadyState]]></category>

		<guid isPermaLink="false">http://www.devtrends.com/?p=183</guid>
		<description><![CDATA[I had a requirement with a kiosk that required me to fade the screen 50% during any idle use. I had initially thought, great, this will be easy! However, SteadyState...]]></description>
			<content:encoded><![CDATA[<p>I had a requirement with a kiosk that required me to fade the screen 50% during any idle use. I had initially thought, great, this will be easy! However, SteadyState messes up your screensaver settings if you use the &#8220;Log off when idle (x) minutes&#8221; option. Hmm, I wonder if Microsoft cut corners and used the built-in Windows screensaver functionality as the timer for auto-log off?</p>
<p>According to a post I found on MSDN forums, SteadyState will continually change the screensaver for the user that is locked down, as configured. Although I am not certain if unchecking the &#8220;idle logoff&#8221; option will alleviate the issue, I do know that if you need a screensaver on your kiosk, you may have to conjure something unique, such as my <a href="http://www.devtrends.com/index.php/creating-a-custom-web-browser/" target="_self">custom web browser</a>.</p>
<p>I&#8217;m out&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.devtrends.com/index.php/steadystate-and-screensavers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Creating a Custom Web Browser</title>
		<link>http://www.devtrends.com/index.php/creating-a-custom-web-browser/</link>
		<comments>http://www.devtrends.com/index.php/creating-a-custom-web-browser/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 03:16:08 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[Kiosk]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[IE]]></category>

		<guid isPermaLink="false">http://www.devtrends.com/?p=175</guid>
		<description><![CDATA[As per corporate requirements, I had to create a Kiosk that would allow visitors in the front lobby access to a specific careers and job application web site. Obviously, the...]]></description>
			<content:encoded><![CDATA[<p>As per corporate requirements, I had to create a Kiosk that would allow visitors in the front lobby access to a specific careers and job application web site. Obviously, the computer had to be locked down and &#8220;frozen&#8221;, which was accomplished with Windows SteadyState (see my <a href="http://www.devtrends.com/index.php/using-microsoft-steadystate-for-a-kiosk/" target="_self">article</a>), I also had to make sure that the users could always reach the careers and job application web site without any distractions. Lastly, I had to make a custom screensaver that would fade the screen 50% during a certain time period and 100% the remainder. This was all accomplished by creating a simple .NET Windows application with a web browser object, a few timers and a couple of forms.</p>
<p>And yes, the &#8220;screensaver&#8221; fade was included in the custom web browser as well. See my article on <a href="http://www.devtrends.com/index.php/steadystate-and-screensavers/" target="_self">SteadyState and Screensavers</a> for more information on why I decided to do it that way.</p>
<p>Although the custom web browser was written in Visual Studio .NET 2005 Professional, anyone with a Windows XP + computer could download the free Microsoft Visual Studio 2008 Express  products, such as VB.NET and create the .NET application described below.</p>
<p><strong>New .NET Windows Application</strong></p>
<p>Start out by creating a new .NET Windows Application in the language of your choice. For this example, I will use Visual Basic.</p>
<p>~</p>
<p><em><span style="text-decoration: underline;">frmMain :: the Main Form</span></em><em><span style="text-decoration: underline;"><br />
</span></em></p>
<p>1. First we will modify the form, setting FormBorderStyle to None and setting WindowState to Maximized to fill the entire screen with no border.</p>
<p>2. Next lets drag a ToolStrip on the form, this will be used for navigation.</p>
<p><img class="size-full wp-image-191 alignnone" title="ToolStrip" src="http://www.developingtrends.net/wp-content/uploads/2009/08/ToolStrip.jpg" alt="ToolStrip" width="380" height="174" /></p>
<p>3. While you are dragging the ToolStrip object, drag two (2) Timer objects &#8211; we will use these later on.</p>
<p>4. Modify Timer1 to tick at 1000 millisecond intervals and Timer2 to tick at 180000 (3 minutes) intervals. Timer1 should be enabled and Timer2 disabled.</p>
<p>5. Now lets drag a WebBrowser component on to the form, this will be used for &#8230; well web browsing?</p>
<p>6. For minimal control, add just three buttons to the ToolStrip for controlling the WebBrowser: (1) Back; (2) Refresh; and (3) Back to devtrends.com. To make the buttons better looking than just text or the standard image, I&#8217;ve created custom bitmaps.</p>
<p>Modify the buttons, DisplayStyle to ImageAndText and Text to the text of the button.</p>
<p><img class="alignnone size-full wp-image-192" title="buttons" src="http://www.developingtrends.net/wp-content/uploads/2009/08/buttons.jpg" alt="buttons" width="496" height="106" /></p>
<p>On to the code&#8230;</p>
<p>1. Lets start by modifying the button actions, so double click on the Back button. Use the following code:</p>
<pre style="padding-left: 30px;">'tell the web browser to go back.
If WebBrowser1.CanGoBack = True Then
  WebBrowser1.GoBack()
End If</pre>
<p>2. Refresh button:</p>
<pre style="padding-left: 30px;">'tell the web browser to refresh the page
WebBrowser1.Refresh()</pre>
<p>3. back to devtrends.com button:</p>
<pre style="padding-left: 30px;">'tell the web browser to go to devtrends.com
WebBrowser1.Navigate("http://www.devtrends.com/")</pre>
<p>4. Now lets modify the Load statement to contain the same code as the back to devtrends.com button. This way our web page loads first everytime.</p>
<p>5. Lets make sure the user cannot close the form/application by adding the following code to the FormClosing event for the form:</p>
<pre style="padding-left: 30px;">'prevent user from closing the application
If e.CloseReason = CloseReason.UserClosing Then
  e.Cancel = True
End If</pre>
<p>6. Back at the top of the code, add the following variable statements:</p>
<pre style="padding-left: 30px;">Public mousex As Integer
Public mousey As Integer</pre>
<p>7. In the Form Load statement, add the following statements:</p>
<pre style="padding-left: 30px;">mousex = MousePosition.X
mousey = MousePosition.Y</pre>
<p>8. In Timer1 tick (double click on the Timer1 object in design view), add the following statements:</p>
<pre style="padding-left: 30px;">If mousex &lt;&gt; MousePosition.X Or mousey &lt;&gt; MousePosition.Y Then
  Timer2.Enabled = False
Else
  'the mouse has not moved... start Timer2
  Timer2.Enabled = True
End If

'set current mouse position.
mousex = MousePosition.X
mousey = MousePosition.Y</pre>
<p>9. In Timer2 tick, add the following statements:</p>
<pre style="padding-left: 30px;">Dim fadeform As New frmFader
fadeform.Show()</pre>
<p>~</p>
<p><em><span style="text-decoration: underline;">subMain :: &#8220;sub main&#8221; Module</span></em></p>
<p>This may be an old school method, however, we&#8217;ll create a module that contains a Sub main. Sub main will be the starting point for your application, which we will modify as the last step in this section.</p>
<p>Right click on your project and choose Add &gt; Module, and name the module subMain.</p>
<p>1. Add the following code to your newly created module:</p>
<pre style="padding-left: 30px;">'instantiate public form object of frmMain, which we will use to reference later on from frmFader
 Public mainfrm As New frmMain

 Sub Main()
   'display the main form.
   mainfrm.Show()

   'keep the application running...
   Application.Run()
 End Sub</pre>
<p>2. Modify the Visual Studio Project Properties, uncheck &#8220;Use Application Framework&#8221; and choose Startup object, &#8220;Sub Main&#8221;.</p>
<p><img class="alignnone size-medium wp-image-206" title="prop" src="http://www.devtrends.com/wp-content/uploads/2009/08/prop-300x216.jpg" alt="prop" width="300" height="216" /></p>
<p>~</p>
<p><em><span style="text-decoration: underline;">frmFader :: &#8220;Screensaver&#8221; Fader Form</span></em></p>
<p>Lets create the next form, frmFader. Right click on your project and choose Add &gt; Windows Form, and name the form frmFader. Immediate make the following design modifications to your new form:</p>
<p>1. Change WindowState to Maximized.</p>
<p>2. TopMost to True.</p>
<p>3. ShowInTaskbar to False.</p>
<p>4. FormBorderStyle to None.</p>
<p>5. BackColor to Black.</p>
<p>Next we&#8217;ll modify the code behind the frmFader form that will make the form 50% transparent or 0% transparent, depending on the time of day. Remember, I needed an application that would black the screen out during a certain time window.</p>
<p>1. At the top of the code, add the following statements, which will be used to watch if the mouse is moved:</p>
<pre style="padding-left: 30px;">Public mousex As Integer
Public mousey As Integer</pre>
<p>2. In the Form Load sub, add the following code:</p>
<pre style="padding-left: 30px;">'stop Timer1 and Timer2 on frmMain
mainfrm.Timer1.Enabled = False
mainfrm.Timer2.Enabled = False

'set current mouse positions
mousex = MousePosition.X
mousey = MousePosition.Y

'hide the mouse cursor
Cursor.Hide()

'get the current hour
Dim curHour As Integer
curHour = Hour(Now())

'if the time is between 8am and 5pm then use 50% otherwise 100%
If curHour &gt;= 8 And curHour &lt;= 17 Then
  Me.Opacity = 0.5
Else
  Me.Opacity = 1
End If</pre>
<p>The comment lines explain most of what the code is doing. However, in the beginning of the code, I have it stop the Timers on the calling form (frmMain). This is required otherwise you would get multiple &#8220;screensavers&#8221; appear every 3 minutes.</p>
<p>3. In the Form Closing sub, we must add the following code to ensure the screensaver will reappear (we did stop the timers and hid the mouse cursor, remember?):</p>
<pre style="padding-left: 30px;">mainfrm.Timer1.Enabled = True
Cursor.Show()</pre>
<p>4. Finally, lets watch for mouse movement on the form as we want to close the form when the mouse is moved. In the Form Mousemove sub, add the following code:</p>
<pre style="padding-left: 30px;">If mousex &lt;&gt; MousePosition.X Or mousey &lt;&gt; MousePosition.Y Then
  'the mouse moved... lets close this overlayed form
  Me.Close()
End If</pre>
<p>That&#8217;s it&#8230;I&#8217;m out. If you want to cheat, just download the source code below. And as always, use this stuff at your own risk.</p>
<p><a href="http://www.developingtrends.net/wp-content/uploads/2009/08/kiosk.zip">Download the kiosk source code</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.devtrends.com/index.php/creating-a-custom-web-browser/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

