<?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>nSonic Homepage &#187; Keyboard</title>
	<atom:link href="http://www.nsonic.de/blog/tag/keyboard/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.nsonic.de/blog</link>
	<description></description>
	<lastBuildDate>Mon, 30 Aug 2010 19:42:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<atom:link rel="next" href="http://www.nsonic.de/blog/tag/keyboard/feed/?page=2" />

		<item>
		<title>nSonic #152 &#8211; Mac &#8211; Schaltflächen mit Tastatur bedienen</title>
		<link>http://www.nsonic.de/blog/2008/04/nsonic-152-mac-schaltflachen-mit-tastatur-bedienen/</link>
		<comments>http://www.nsonic.de/blog/2008/04/nsonic-152-mac-schaltflachen-mit-tastatur-bedienen/#comments</comments>
		<pubDate>Sat, 26 Apr 2008 18:47:17 +0000</pubDate>
		<dc:creator>nSonic</dc:creator>
				<category><![CDATA[nSonic - Der Podcast]]></category>
		<category><![CDATA[Keyboard]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Maus]]></category>
		<category><![CDATA[Podcast]]></category>
		<category><![CDATA[Tastatur]]></category>

		<guid isPermaLink="false">http://www.nsonic.de/blog/2008/04/nsonic-152-mac-schaltflachen-mit-tastatur-bedienen/</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><img src='http://www.nsonic.de/blog/wp-content/uploads/2008/04/152_mac_buttonkeyboard.jpg' alt='Podcast Mac Buttons mit Tastatur bedienen' /><br />
Geht es Euch auch so? Ihr arbeitet viel mit bzw. an der Tastatur und ärgert Euch jedesmal ein wenig, wenn mal wieder ein Dialog erscheint und Ihr nun zur Maus greifen müsst um eine Schaltfläche, einen Button, zu drücken.<br />
Das muss aber nicht sein! Man kann die meisten Schaltflächen nämlich auch mit der Tastatur bedienen. Außerdem gibt es eine Einstellung mit der man dann zukünftig alle Schaltflächen (und andere Elemente in Bildschirmmasken) einfach erreichen kann. Wie das geht, das erfahrt Ihr in dieser Folge #152.</p>
<p><a href="http://www.podtrac.com/pts/redirect.m4v?http://nsonic.podplace.de/nsonic_152_mac_buttonkeyboard.m4v">Folge in voller Auflösung herunterladen</a></p>
<p>
<span id="video0" class="flashvideo">
<a href="http://www.macromedia.com/go/getflashplayer">Get the Flash Player</a> to see this player.</span>
<script type="text/javascript">
var s0 = new SWFObject("http://www.nsonic.de/blog/wp-content/flvplayer/flvplayer.swf","n0","320","285","7");
s0.addParam("allowfullscreen","true");
s0.addParam("allowscriptaccess","always");
s0.addParam("scale","noscale");
s0.addParam("salign","tl");
s0.addVariable("javascriptid","n0");
s0.addVariable("width","320");
s0.addVariable("height","285");
s0.addVariable("playerpath","http://www.nsonic.de/blog/wp-content/flvplayer");
s0.addVariable("autoplay","false");
s0.addVariable("loop","false");
s0.addVariable("autoscale","false");
s0.addVariable("videowidth","320");
s0.addVariable("videoheight","180");
s0.addVariable("preview","http://nsonic.podplace.de/nsonic_152_mac.jpg");
s0.addVariable("video","http://www.podtrac.com/pts/redirect.m4v/nsonic.podplace.de/nsonic_152_mac_buttonkeyboard.m4v");
s0.addVariable("file","http://www.nsonic.de/blog/");
s0.write("video0");
</script>
</p>
<script type="text/javascript">
var flattr_wp_ver = '0.7';
var flattr_uid = '2376';
var flattr_cat = 'text';
var flattr_tle = 'nSonic #152 &#8211; Mac &#8211; Schaltflächen mit Tastatur bedienen';
var flattr_dsc = 'Geht es Euch auch so? Ihr arbeitet viel mit bzw. an der Tastatur und ärgert Euch jedesmal ein wenig, wenn mal wieder ein Dialog erscheint und Ihr nun zur Maus greifen müsst um eine Schaltfläche, einen Button, zu drücken. Das muss aber nicht sein! Man kann die meisten Schaltflächen nämlich auch mit der Tastatur bedienen. Außerdem gibt es eine Einstellung mit der man dann zukünftig alle Schaltflächen (und andere Elemente in Bildschirmmasken) einfach erreichen kann. Wie das geht, das erfahrt Ihr in dieser Folge #152.   Folge in voller Auflösung herunterladen  [flashvideo video=http://www.podtrac.com/pts/redirect.m4v/nsonic.podplace.de/nsonic_152_mac_buttonkeyboard.m4v preview=http://nsonic.podplace.de/nsonic_152_mac.jpg /]';
var flattr_tag = 'Keyboard,Mac,Maus,Podcast,Tastatur';
var flattr_url = 'http://www.nsonic.de/blog/2008/04/nsonic-152-mac-schaltflachen-mit-tastatur-bedienen/';
var flattr_lng = 'de_DE';
</script><script src="http://api.flattr.com/button/load.js" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.nsonic.de/blog/2008/04/nsonic-152-mac-schaltflachen-mit-tastatur-bedienen/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
<enclosure url="http://www.podtrac.com/pts/redirect.m4v?http://nsonic.podplace.de/nsonic_152_mac_buttonkeyboard.m4v" length="51036116" type="text/plain" />
		</item>
		<item>
		<title>Key Codes</title>
		<link>http://www.nsonic.de/blog/2007/05/key-codes/</link>
		<comments>http://www.nsonic.de/blog/2007/05/key-codes/#comments</comments>
		<pubDate>Sat, 12 May 2007 15:16:35 +0000</pubDate>
		<dc:creator>nSonic</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Keyboard]]></category>
		<category><![CDATA[System]]></category>

		<guid isPermaLink="false"> http://www.nsonic.de/blog/2007/05/key-codes/</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>{ Virtual Keys, Standard Set }</p>
<p>  VK_LBUTTON = 1;<br />
  VK_RBUTTON = 2;<br />
  VK_CANCEL = 3;<br />
  VK_MBUTTON = 4;  { NOT contiguous with L &#038; RBUTTON }<br />
  VK_BACK = 8;<br />
  VK_TAB = 9;<br />
  VK_CLEAR = 12;<br />
  VK_RETURN = 13;<br />
  VK_SHIFT = $10;<br />
  VK_CONTROL = 17;<br />
  VK_MENU = 18;<br />
<span id="more-230"></span><br />
  VK_PAUSE = 19;<br />
  VK_CAPITAL = 20;<br />
  VK_KANA = 21;<br />
  VK_HANGUL = 21;<br />
  VK_JUNJA = 23;<br />
  VK_FINAL = 24;<br />
  VK_HANJA = 25;<br />
  VK_KANJI = 25;<br />
  VK_CONVERT = 28;<br />
  VK_NONCONVERT = 29;<br />
  VK_ACCEPT = 30;<br />
  VK_MODECHANGE = 31;<br />
  VK_ESCAPE = 27;<br />
  VK_SPACE = $20;<br />
  VK_PRIOR = 33;<br />
  VK_NEXT = 34;<br />
  VK_END = 35;<br />
  VK_HOME = 36;<br />
  VK_LEFT = 37;<br />
  VK_UP = 38;<br />
  VK_RIGHT = 39;<br />
  VK_DOWN = 40;<br />
  VK_SELECT = 41;<br />
  VK_PRINT = 42;<br />
  VK_EXECUTE = 43;<br />
  VK_SNAPSHOT = 44;<br />
  VK_INSERT = 45;<br />
  VK_DELETE = 46;<br />
  VK_HELP = 47;<br />
{ VK_0 thru VK_9 are the same as ASCII &#8216;0&#8242; thru &#8216;9&#8242; ($30 &#8211; $39) }<br />
{ VK_A thru VK_Z are the same as ASCII &#8216;A&#8217; thru &#8216;Z&#8217; ($41 &#8211; $5A) }<br />
  VK_LWIN = 91;<br />
  VK_RWIN = 92;<br />
  VK_APPS = 93;<br />
  VK_NUMPAD0 = 96;<br />
  VK_NUMPAD1 = 97;<br />
  VK_NUMPAD2 = 98;<br />
  VK_NUMPAD3 = 99;<br />
  VK_NUMPAD4 = 100;<br />
  VK_NUMPAD5 = 101;<br />
  VK_NUMPAD6 = 102;<br />
  VK_NUMPAD7 = 103;<br />
  VK_NUMPAD8 = 104;<br />
  VK_NUMPAD9 = 105;<br />
  VK_MULTIPLY = 106;<br />
  VK_ADD = 107;<br />
  VK_SEPARATOR = 108;<br />
  VK_SUBTRACT = 109;<br />
  VK_DECIMAL = 110;<br />
  VK_DIVIDE = 111;<br />
  VK_F1 = 112;<br />
  VK_F2 = 113;<br />
  VK_F3 = 114;<br />
  VK_F4 = 115;<br />
  VK_F5 = 116;<br />
  VK_F6 = 117;<br />
  VK_F7 = 118;<br />
  VK_F8 = 119;<br />
  VK_F9 = 120;<br />
  VK_F10 = 121;<br />
  VK_F11 = 122;<br />
  VK_F12 = 123;<br />
  VK_F13 = 124;<br />
  VK_F14 = 125;<br />
  VK_F15 = 126;<br />
  VK_F16 = 127;<br />
  VK_F17 = 128;<br />
  VK_F18 = 129;<br />
  VK_F19 = 130;<br />
  VK_F20 = 131;<br />
  VK_F21 = 132;<br />
  VK_F22 = 133;<br />
  VK_F23 = 134;<br />
  VK_F24 = 135;<br />
  VK_NUMLOCK = 144;<br />
  VK_SCROLL = 145;<br />
{ VK_L &#038; VK_R &#8211; left and right Alt, Ctrl and Shift virtual keys.<br />
  Used only as parameters to GetAsyncKeyState() and GetKeyState().<br />
  No other API or message will distinguish left and right keys in this way. }<br />
  VK_LSHIFT = 160;<br />
  VK_RSHIFT = 161;<br />
  VK_LCONTROL = 162;<br />
  VK_RCONTROL = 163;<br />
  VK_LMENU = 164;<br />
  VK_RMENU = 165;<br />
  VK_PROCESSKEY = 229;<br />
  VK_ATTN = 246;<br />
  VK_CRSEL = 247;<br />
  VK_EXSEL = 248;<br />
  VK_EREOF = 249;<br />
  VK_PLAY = 250;<br />
  VK_ZOOM = 251;<br />
  VK_NONAME = 252;<br />
  VK_PA1 = 253;<br />
  VK_OEM_CLEAR = 254;</p>
<p>[tags]Delphi, System, Keyboard[/tags]</p>
<script type="text/javascript">
var flattr_wp_ver = '0.7';
var flattr_uid = '2376';
var flattr_cat = 'text';
var flattr_tle = 'Key Codes';
var flattr_dsc = '{ Virtual Keys, Standard Set }    VK_LBUTTON = 1;   VK_RBUTTON = 2;   VK_CANCEL = 3;   VK_MBUTTON = 4;  { NOT contiguous with L & RBUTTON }   VK_BACK = 8;   VK_TAB = 9;   VK_CLEAR = 12;   VK_RETURN = 13;   VK_SHIFT = $10;   VK_CONTROL = 17;   VK_MENU = 18;    VK_PAUSE = 19;   VK_CAPITAL = 20;   VK_KANA = 21;   VK_HANGUL = 21;   VK_JUNJA = 23;   VK_FINAL = 24;   VK_HANJA = 25;   VK_KANJI = 25;   VK_CONVERT = 28;   VK_NONCONVERT = 29;   VK_ACCEPT = 30;   VK_MODECHANGE = 31;   VK_ESCAPE = 27;   VK_SPACE = $20;   VK_PRIOR = 33;   VK_NEXT = 34;   VK_END = 35;   VK_HOME = 36;   VK_LEFT = 37;   VK_UP = 38;   VK_RIGHT = 39;   VK_DOWN = 40;   VK_SELECT = 41;   VK_PRINT = 42;   VK_EXECUTE = 43;   VK_SNAPSHOT = 44;   VK_INSERT = 45;   VK_DELETE = 46;   VK_HELP = 47; { VK_0 thru VK_9 are the same as ASCII \'0\' thru \'9\' ($30 - $39) } { VK_A thru VK_Z are the same as ASCII \'A\' thru \'Z\' ($41 - $5A) }   VK_LWIN = 91;   VK_RWIN = 92;   VK_APPS = 93;   VK_NUMPAD0 = 96;   VK_NUMPAD1 = 97;   VK_NUMPAD2 = 98;   VK_NUMPAD3 = 99;';
var flattr_tag = 'Delphi,Keyboard,System';
var flattr_url = 'http://www.nsonic.de/blog/2007/05/key-codes/';
var flattr_lng = 'de_DE';
</script><script src="http://api.flattr.com/button/load.js" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.nsonic.de/blog/2007/05/key-codes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Keys Status</title>
		<link>http://www.nsonic.de/blog/2007/05/keys-status/</link>
		<comments>http://www.nsonic.de/blog/2007/05/keys-status/#comments</comments>
		<pubDate>Sat, 12 May 2007 15:15:52 +0000</pubDate>
		<dc:creator>nSonic</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Keyboard]]></category>
		<category><![CDATA[System]]></category>

		<guid isPermaLink="false"> http://www.nsonic.de/blog/2007/05/keys-status/</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<div class="codesnip-container" >
<div class="delphi codesnip" style="font-family:monospace;"><span class="kw1">Procedure</span> TForm1<span class="sy1">.</span><span class="me1">GetStatusInfo</span><span class="sy1">;</span><br />
<span class="kw1">const</span><br />
&nbsp; CapPanel &nbsp;<span class="sy3">=</span> <span class="nu0">1</span><span class="sy1">;</span><br />
&nbsp; NumPanel &nbsp;<span class="sy3">=</span> <span class="nu0">2</span><span class="sy1">;</span><br />
&nbsp; ScrlPanel <span class="sy3">=</span> <span class="nu0">3</span><span class="sy1">;</span><br />
&nbsp; DatePanel <span class="sy3">=</span> <span class="nu0">4</span><span class="sy1">;</span><br />
<span class="kw1">begin</span><br />
&nbsp; <span class="kw1">with</span> StatusBar1 <span class="kw1">do</span><br />
&nbsp; <span class="kw1">begin</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> GetKeyState<span class="br0">&#40;</span>VK_CAPITAL<span class="br0">&#41;</span> &lt;&gt; 0 <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; StatusBar1<span class="sy1">.</span><span class="me1">Panels</span><span class="br0">&#91;</span>CapPanel<span class="br0">&#93;</span><span class="sy1">.</span><span class="me1">Text</span> <span class="sy1">:</span><span class="sy3">=</span> <span class="st0">&#8216; CAP&#8217;</span><br />
&nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; &nbsp; StatusBar1<span class="sy1">.</span><span class="me1">Panels</span><span class="br0">&#91;</span>CapPanel<span class="br0">&#93;</span><span class="sy1">.</span><span class="me1">Text</span> <span class="sy1">:</span><span class="sy3">=</span> <span class="st0">&#8221;</span><span class="sy1">;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> GetKeyState<span class="br0">&#40;</span>VK_NUMLOCK<span class="br0">&#41;</span> &lt;&gt; 0 <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; StatusBar1<span class="sy1">.</span><span class="me1">Panels</span><span class="br0">&#91;</span>NumPanel<span class="br0">&#93;</span><span class="sy1">.</span><span class="me1">Text</span> <span class="sy1">:</span><span class="sy3">=</span> <span class="st0">&#8216; NUM&#8217;</span><br />
&nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; &nbsp; StatusBar1<span class="sy1">.</span><span class="me1">Panels</span><span class="br0">&#91;</span>NumPanel<span class="br0">&#93;</span><span class="sy1">.</span><span class="me1">Text</span> <span class="sy1">:</span><span class="sy3">=</span> <span class="st0">&#8221;</span><span class="sy1">;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> GetKeyState<span class="br0">&#40;</span>VK_SCROLL<span class="br0">&#41;</span> &lt;&gt; 0 <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; StatusBar1<span class="sy1">.</span><span class="me1">Panels</span><span class="br0">&#91;</span>ScrlPanel<span class="br0">&#93;</span><span class="sy1">.</span><span class="me1">Text</span> <span class="sy1">:</span><span class="sy3">=</span> <span class="st0">&#8216; SCRL&#8217;</span><br />
&nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; &nbsp; StatusBar1<span class="sy1">.</span><span class="me1">Panels</span><span class="br0">&#91;</span>ScrlPanel<span class="br0">&#93;</span><span class="sy1">.</span><span class="me1">Text</span> <span class="sy1">:</span><span class="sy3">=</span> <span class="st0">&#8221;</span><span class="sy1">;</span><br />
&nbsp; &nbsp;StatusBar1<span class="sy1">.</span><span class="me1">Panels</span><span class="br0">&#91;</span>DatePanel<span class="br0">&#93;</span><span class="sy1">.</span><span class="me1">Text</span> <span class="sy1">:</span><span class="sy3">=</span> <span class="kw3">FormatDateTime</span><span class="br0">&#40;</span><span class="st0">&#8216; mmmm D, YYYYY&#8217;</span><span class="sy1">,</span> <span class="kw3">now</span><span class="br0">&#41;</span><span class="sy1">;</span><br />
&nbsp; <span class="kw1">end</span><span class="sy1">;</span><br />
<span class="kw1">End</span><span class="sy1">;</span></div>
</div>
<p>[tags]Delphi, System, Keyboard[/tags]</p>
<script type="text/javascript">
var flattr_wp_ver = '0.7';
var flattr_uid = '2376';
var flattr_cat = 'text';
var flattr_tle = 'Keys Status';
var flattr_dsc = '[code lang=\"delphi\"]Procedure TForm1.GetStatusInfo; const   CapPanel  = 1;   NumPanel  = 2;   ScrlPanel = 3;   DatePanel = 4; begin   with StatusBar1 do   begin     if GetKeyState(VK_CAPITAL)  0 then       StatusBar1.Panels[CapPanel].Text := \' CAP\'     else       StatusBar1.Panels[CapPanel].Text := \'\';     if GetKeyState(VK_NUMLOCK)  0 then       StatusBar1.Panels[NumPanel].Text := \' NUM\'     else       StatusBar1.Panels[NumPanel].Text := \'\';     if GetKeyState(VK_SCROLL)  0 then       StatusBar1.Panels[ScrlPanel].Text := \' SCRL\'     else       StatusBar1.Panels[ScrlPanel].Text := \'\';    StatusBar1.Panels[DatePanel].Text := FormatDateTime(\' mmmm D, YYYYY\', now);   end; End; [/code]  [tags]Delphi, System, Keyboard[/tags]';
var flattr_tag = 'Delphi,Keyboard,System';
var flattr_url = 'http://www.nsonic.de/blog/2007/05/keys-status/';
var flattr_lng = 'de_DE';
</script><script src="http://api.flattr.com/button/load.js" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.nsonic.de/blog/2007/05/keys-status/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simulating a keystroke</title>
		<link>http://www.nsonic.de/blog/2007/05/simulating-a-keystroke/</link>
		<comments>http://www.nsonic.de/blog/2007/05/simulating-a-keystroke/#comments</comments>
		<pubDate>Sat, 12 May 2007 15:14:25 +0000</pubDate>
		<dc:creator>nSonic</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Keyboard]]></category>
		<category><![CDATA[System]]></category>

		<guid isPermaLink="false"> http://www.nsonic.de/blog/2007/05/simulating-a-keystroke/</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><em>> I know this a dumb question but how do I make the system think the user<br />
> pressed Enter from somewhere other than the onKeypress or OnKeyDown events?<br />
</em></p>
<div class="codesnip-container" >
<div class="delphi codesnip" style="font-family:monospace;"><span class="coMULTI">{Key Down}</span><br />
&nbsp; keybd_Event<span class="br0">&#40;</span>VK_RETURN<span class="sy1">,</span> 0<span class="sy1">,</span> 0<span class="sy1">,</span> 0<span class="br0">&#41;</span> <span class="sy1">;</span><br />
&nbsp; <span class="kw3">Sleep</span><span class="br0">&#40;</span>100<span class="br0">&#41;</span><span class="sy1">;</span><br />
&nbsp; <span class="coMULTI">{Key Up}</span><br />
&nbsp; keybd_Event<span class="br0">&#40;</span>VK_RETURN<span class="sy1">,</span> 0<span class="sy1">,</span> KEYEVENTF_KEYUP<span class="sy1">,</span> 0<span class="br0">&#41;</span><span class="sy1">;</span></div>
</div>
<p>[tags]Delphi, System, Keyboard[/tags]</p>
<script type="text/javascript">
var flattr_wp_ver = '0.7';
var flattr_uid = '2376';
var flattr_cat = 'text';
var flattr_tle = 'Simulating a keystroke';
var flattr_dsc = '> I know this a dumb question but how do I make the system think the user > pressed Enter from somewhere other than the onKeypress or OnKeyDown events?   [code lang=\"delphi\"] {Key Down}   keybd_Event(VK_RETURN, 0, 0, 0) ;   Sleep(100);   {Key Up}   keybd_Event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); [/code]  [tags]Delphi, System, Keyboard[/tags]';
var flattr_tag = 'Delphi,Keyboard,System';
var flattr_url = 'http://www.nsonic.de/blog/2007/05/simulating-a-keystroke/';
var flattr_lng = 'de_DE';
</script><script src="http://api.flattr.com/button/load.js" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.nsonic.de/blog/2007/05/simulating-a-keystroke/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EasterEggs</title>
		<link>http://www.nsonic.de/blog/2007/05/eastereggs/</link>
		<comments>http://www.nsonic.de/blog/2007/05/eastereggs/#comments</comments>
		<pubDate>Sat, 12 May 2007 14:50:29 +0000</pubDate>
		<dc:creator>nSonic</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Keyboard]]></category>
		<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false"> http://www.nsonic.de/blog/2007/05/eastereggs/</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><em>><br />
> How to capture ALT+T E A M in a about box?<br />
><br />
</em><br />
Hi &#8230; Set the form&#8217;s  KeyPreview property to True and then write the<br />
following code :<br />
<span id="more-189"></span></p>
<div class="codesnip-container" >
<div class="delphi codesnip" style="font-family:monospace;"><span class="kw1">var</span><br />
&nbsp; Form1<span class="sy1">:</span> TForm1<span class="sy1">;</span><br />
&nbsp; Text2 <span class="sy1">:</span> <span class="kw4">String</span><span class="sy1">;</span> <span class="co1">// Global string.</span></p>
<p><span class="kw1">implementation</span></p>
<p><span class="co2">{$R *.DFM}</span></p>
<p><span class="kw1">procedure</span> TForm1<span class="sy1">.</span><span class="me1">FormCreate</span><span class="br0">&#40;</span>Sender<span class="sy1">:</span> <span class="kw4">TObject</span><span class="br0">&#41;</span><span class="sy1">;</span><br />
<span class="kw1">begin</span><br />
&nbsp; Text2 <span class="sy1">:</span><span class="sy3">=</span> EmptyStr<span class="sy1">;</span><br />
<span class="kw1">end</span><span class="sy1">;</span></p>
<p><span class="kw1">procedure</span> TForm1<span class="sy1">.</span><span class="me1">FormKeyUp</span><span class="br0">&#40;</span>Sender<span class="sy1">:</span> <span class="kw4">TObject</span><span class="sy1">;</span> <span class="kw1">var</span> Key<span class="sy1">:</span> <span class="kw4">Word</span><span class="sy1">;</span><br />
&nbsp; Shift<span class="sy1">:</span> TShiftState<span class="br0">&#41;</span><span class="sy1">;</span><br />
<span class="kw1">begin</span><br />
&nbsp; <span class="kw1">if</span> ssAlt <span class="kw1">in</span> Shift <span class="kw1">then</span><br />
&nbsp; &nbsp;<span class="kw1">begin</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="kw3">Pos</span><span class="br0">&#40;</span>Text2 <span class="sy3">+</span> <span class="kw3">UpCase</span><span class="br0">&#40;</span><span class="kw3">Chr</span><span class="br0">&#40;</span>Key<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">,</span> <span class="st0">&#8216;TEAM&#8217;</span><span class="br0">&#41;</span> &gt; 0 <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">begin</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; Text2 <span class="sy1">:</span><span class="sy3">=</span> Text2 <span class="sy3">+</span> <span class="kw3">UpCase</span><span class="br0">&#40;</span><span class="kw3">Chr</span><span class="br0">&#40;</span>Key <span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">end</span><br />
&nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">begin</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; Text2 <span class="sy1">:</span><span class="sy3">=</span> <span class="kw3">UpCase</span><span class="br0">&#40;</span><span class="kw3">Chr</span><span class="br0">&#40;</span>Key <span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">;</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> Text2 <span class="sy3">=</span> <span class="st0">&#8216;TEAM&#8217;</span> <span class="kw1">then</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">begin</span><br />
&nbsp; &nbsp; &nbsp; Text2 <span class="sy1">:</span><span class="sy3">=</span> EmptyStr<span class="sy1">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="co1">// from here, you can write anything you&#8217;d like to be done &#8230;</span><br />
&nbsp; &nbsp; &nbsp; ShowMessage<span class="br0">&#40;</span><span class="st0">&#8216;Easter Egg!!&#8217;</span><span class="br0">&#41;</span><span class="sy1">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">;</span><br />
&nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">;</span><br />
<span class="kw1">end</span><span class="sy1">;</span></p>
<p><span class="kw1">end</span><span class="sy1">.</span></div>
</div>
<p>[tags]Delphi, Misc, Keyboard[/tags]</p>
<script type="text/javascript">
var flattr_wp_ver = '0.7';
var flattr_uid = '2376';
var flattr_cat = 'text';
var flattr_tle = 'EasterEggs';
var flattr_dsc = '> > How to capture ALT+T E A M in a about box? >  Hi ... Set the form\'s  KeyPreview property to True and then write the following code :   [code lang=\"delphi\"]var   Form1: TForm1;   Text2 : String; // Global string.  implementation  {$R *.DFM}  procedure TForm1.FormCreate(Sender: TObject); begin   Text2 := EmptyStr; end;  procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;   Shift: TShiftState); begin   if ssAlt in Shift then    begin     if Pos(Text2 + UpCase(Chr(Key)), \'TEAM\') > 0 then       begin         Text2 := Text2 + UpCase(Chr(Key ));       end     else       begin         Text2 := UpCase(Chr(Key ));       end;     if Text2 = \'TEAM\' then       begin       Text2 := EmptyStr;       // from here, you can write anything you\'d like to be done ...       ShowMessage(\'Easter Egg!!\');       end;     end; end;  end. [/code]  [tags]Delphi, Misc, Keyboard[/tags]';
var flattr_tag = 'Delphi,Keyboard,Misc';
var flattr_url = 'http://www.nsonic.de/blog/2007/05/eastereggs/';
var flattr_lng = 'de_DE';
</script><script src="http://api.flattr.com/button/load.js" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.nsonic.de/blog/2007/05/eastereggs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>nSonic Homepage</title>
		<link>http://www.nsonic.de/blog/2007/05/nsonic-homepage-2/</link>
		<comments>http://www.nsonic.de/blog/2007/05/nsonic-homepage-2/#comments</comments>
		<pubDate>Sat, 12 May 2007 14:44:15 +0000</pubDate>
		<dc:creator>nSonic</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Keyboard]]></category>
		<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false"> http://www.nsonic.de/blog/2007/05/nsonic-homepage-2/</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><em>> yes, but what is the virtual-key code for ALT+F?<br />
><br />
</em><br />
There ain&#8217;t one, this is a key *combination*, not a single keystroke.<br />
It would require several messages:</p>
<p>  wm_syskeydown for VK_MENU (alt)<br />
  wm_syskeydown for Ord(&#8216;F&#8217;)<br />
  wm_syschar    for &#8216;F&#8217;<br />
  wm_syskeyup   for Ord(&#8216;F&#8217;),<br />
  wm_syskeyup   for VM_MENU</p>
<p>The wm_syschar is not required if you use POstMessage instead of<br />
SendMessage. However, it will probably still not work if the receiver<br />
window checks for Alt down with GetKeyState instead of looking at the<br />
Alt bit in the messages lparam, sending these messages does not change<br />
the keystate array. The following procedure fixes this by changing the<br />
array manually:<br />
<span id="more-182"></span></p>
<div class="codesnip-container" >
<div class="delphi codesnip" style="font-family:monospace;"><span class="coMULTI">{************************************************************<br />
&nbsp;* Procedure PostKeyEx<br />
&nbsp;*<br />
&nbsp;* Parameters:<br />
&nbsp;* &nbsp;hWindow: target window to be send the keystroke<br />
&nbsp;* &nbsp;key &nbsp; &nbsp;: virtual keycode of the key to send. For printable<br />
&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; keys this is simply the ANSI code (Ord(character)).<br />
&nbsp;* &nbsp;shift &nbsp;: state of the modifier keys. This is a set, so you<br />
&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; can set several of these keys (shift, control, alt,<br />
&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mouse buttons) in tandem. The TShiftState type is <br />
&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; declared in the Classes Unit.<br />
&nbsp;* &nbsp;specialkey: normally this should be False. Set it to True to <br />
&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; specify a key on the numeric keypad, for example. <br />
&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; If this parameter is true, bit 24 of the lparam for<br />
&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; the posted WM_KEY* messages will be set. <br />
&nbsp;* Description:<br />
&nbsp;* &nbsp;This procedure sets up Windows key state array to correctly<br />
&nbsp;* &nbsp;reflect the requested pattern of modifier keys and then posts<br />
&nbsp;* &nbsp;a WM_KEYDOWN/WM_KEYUP message pair to the target window. Then<br />
&nbsp;* &nbsp;Application.ProcessMessages is called to process the messages<br />
&nbsp;* &nbsp;before the keyboard state is restored.<br />
&nbsp;* Error Conditions:<br />
&nbsp;* &nbsp;May fail due to lack of memory for the two key state buffers.<br />
&nbsp;* &nbsp;Will raise an exception in this case.<br />
&nbsp;* NOTE:<br />
&nbsp;* &nbsp;Setting the keyboard state will not work across applications <br />
&nbsp;* &nbsp;running in different memory spaces on Win32 unless <br />
AttachThreadInput<br />
&nbsp;* &nbsp;is used to connect to the target thread first.<br />
&nbsp;*Created: 02/21/96 16:39:00 by P. Below<br />
&nbsp;************************************************************}</span><br />
<span class="kw1">Procedure</span> PostKeyEx<span class="br0">&#40;</span> hWindow<span class="sy1">:</span> HWnd<span class="sy1">;</span> key<span class="sy1">:</span> <span class="kw4">Word</span><span class="sy1">;</span> <span class="kw1">Const</span> shift<span class="sy1">:</span> <br />
TShiftState<span class="sy1">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;specialkey<span class="sy1">:</span> <span class="kw4">Boolean</span> <span class="br0">&#41;</span><span class="sy1">;</span><br />
<span class="kw1">Type</span><br />
&nbsp; TBuffers <span class="sy3">=</span> <span class="kw1">Array</span> <span class="br0">&#91;</span>0<span class="sy1">..</span>1<span class="br0">&#93;</span> <span class="kw1">of</span> TKeyboardState<span class="sy1">;</span><br />
<span class="kw1">Var</span><br />
&nbsp; pKeyBuffers <span class="sy1">:</span> <span class="sy2">^</span>TBuffers<span class="sy1">;</span><br />
&nbsp; lparam<span class="sy1">:</span> <span class="kw4">LongInt</span><span class="sy1">;</span><br />
<span class="kw1">Begin</span><br />
&nbsp; <span class="coMULTI">(* check if the target window exists *)</span><br />
&nbsp; <span class="kw1">If</span> IsWindow<span class="br0">&#40;</span>hWindow<span class="br0">&#41;</span> <span class="kw1">Then</span> <span class="kw1">Begin</span><br />
&nbsp; &nbsp; <span class="coMULTI">(* set local variables to default values *)</span><br />
&nbsp; &nbsp; pKeyBuffers <span class="sy1">:</span><span class="sy3">=</span> <span class="kw2">Nil</span><span class="sy1">;</span><br />
&nbsp; &nbsp; lparam <span class="sy1">:</span><span class="sy3">=</span> MakeLong<span class="br0">&#40;</span>0<span class="sy1">,</span> MapVirtualKey<span class="br0">&#40;</span>key<span class="sy1">,</span> 0<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">;</span></p>
<p>&nbsp; &nbsp; <span class="coMULTI">(* modify lparam if special key requested *)</span><br />
&nbsp; &nbsp; <span class="kw1">If</span> specialkey <span class="kw1">Then</span><br />
&nbsp; &nbsp; &nbsp; lparam <span class="sy1">:</span><span class="sy3">=</span> lparam <span class="kw1">or</span> <span class="re0">$1000000</span><span class="sy1">;</span></p>
<p>&nbsp; &nbsp; <span class="coMULTI">(* allocate space for the key state buffers *)</span><br />
&nbsp; &nbsp; <span class="kw3">New</span><span class="br0">&#40;</span>pKeyBuffers<span class="br0">&#41;</span><span class="sy1">;</span><br />
&nbsp; &nbsp; <span class="kw1">try</span><br />
&nbsp; &nbsp; &nbsp; <span class="coMULTI">(* Fill buffer 1 with current state so we can later restore it. &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Null out buffer 0 to get a &quot;no key pressed&quot; state. *)</span><br />
&nbsp; &nbsp; &nbsp; GetKeyboardState<span class="br0">&#40;</span> pKeyBuffers<span class="sy2">^</span><span class="br0">&#91;</span>1<span class="br0">&#93;</span> <span class="br0">&#41;</span><span class="sy1">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw3">FillChar</span><span class="br0">&#40;</span>pKeyBuffers<span class="sy2">^</span><span class="br0">&#91;</span>0<span class="br0">&#93;</span><span class="sy1">,</span> <span class="kw3">Sizeof</span><span class="br0">&#40;</span>TKeyboardState<span class="br0">&#41;</span><span class="sy1">,</span> 0<span class="br0">&#41;</span><span class="sy1">;</span></p>
<p>&nbsp; &nbsp; &nbsp; <span class="coMULTI">(* set the requested modifier keys to &quot;down&quot; state in the buffer <br />
*)</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">If</span> ssShift <span class="kw1">In</span> shift <span class="kw1">Then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; pKeyBuffers<span class="sy2">^</span><span class="br0">&#91;</span>0<span class="br0">&#93;</span><span class="br0">&#91;</span>VK_SHIFT<span class="br0">&#93;</span> <span class="sy1">:</span><span class="sy3">=</span> <span class="re0">$80</span><span class="sy1">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">If</span> ssAlt <span class="kw1">In</span> shift <span class="kw1">Then</span> <span class="kw1">Begin</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">(* Alt needs special treatment since a bit in lparam needs also <br />
be set *)</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; pKeyBuffers<span class="sy2">^</span><span class="br0">&#91;</span>0<span class="br0">&#93;</span><span class="br0">&#91;</span>VK_MENU<span class="br0">&#93;</span> <span class="sy1">:</span><span class="sy3">=</span> <span class="re0">$80</span><span class="sy1">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; lparam <span class="sy1">:</span><span class="sy3">=</span> lparam <span class="kw1">or</span> <span class="re0">$20000000</span><span class="sy1">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">End</span><span class="sy1">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">If</span> ssCtrl <span class="kw1">In</span> shift <span class="kw1">Then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; pKeyBuffers<span class="sy2">^</span><span class="br0">&#91;</span>0<span class="br0">&#93;</span><span class="br0">&#91;</span>VK_CONTROL<span class="br0">&#93;</span> <span class="sy1">:</span><span class="sy3">=</span> <span class="re0">$80</span><span class="sy1">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">If</span> ssLeft <span class="kw1">In</span> shift <span class="kw1">Then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; pKeyBuffers<span class="sy2">^</span><span class="br0">&#91;</span>0<span class="br0">&#93;</span><span class="br0">&#91;</span>VK_LBUTTON<span class="br0">&#93;</span> <span class="sy1">:</span><span class="sy3">=</span> <span class="re0">$80</span><span class="sy1">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">If</span> ssRight <span class="kw1">In</span> shift <span class="kw1">Then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; pKeyBuffers<span class="sy2">^</span><span class="br0">&#91;</span>0<span class="br0">&#93;</span><span class="br0">&#91;</span>VK_RBUTTON<span class="br0">&#93;</span> <span class="sy1">:</span><span class="sy3">=</span> <span class="re0">$80</span><span class="sy1">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">If</span> ssMiddle <span class="kw1">In</span> shift <span class="kw1">Then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; pKeyBuffers<span class="sy2">^</span><span class="br0">&#91;</span>0<span class="br0">&#93;</span><span class="br0">&#91;</span>VK_MBUTTON<span class="br0">&#93;</span> <span class="sy1">:</span><span class="sy3">=</span> <span class="re0">$80</span><span class="sy1">;</span></p>
<p>&nbsp; &nbsp; &nbsp; <span class="coMULTI">(* make out new key state array the active key state map *)</span><br />
&nbsp; &nbsp; &nbsp; SetKeyboardState<span class="br0">&#40;</span> pKeyBuffers<span class="sy2">^</span><span class="br0">&#91;</span>0<span class="br0">&#93;</span> <span class="br0">&#41;</span><span class="sy1">;</span></p>
<p>&nbsp; &nbsp; &nbsp; <span class="coMULTI">(* post the key messages *)</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">If</span> ssAlt <span class="kw1">In</span> Shift <span class="kw1">Then</span> <span class="kw1">Begin</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; PostMessage<span class="br0">&#40;</span> hWindow<span class="sy1">,</span> WM_SYSKEYDOWN<span class="sy1">,</span> key<span class="sy1">,</span> lparam<span class="br0">&#41;</span><span class="sy1">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; PostMessage<span class="br0">&#40;</span> hWindow<span class="sy1">,</span> WM_SYSKEYUP<span class="sy1">,</span> key<span class="sy1">,</span> lparam <span class="kw1">or</span> <span class="re0">$C0000000</span><span class="br0">&#41;</span><span class="sy1">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">End</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">Else</span> <span class="kw1">Begin</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; PostMessage<span class="br0">&#40;</span> hWindow<span class="sy1">,</span> WM_KEYDOWN<span class="sy1">,</span> key<span class="sy1">,</span> lparam<span class="br0">&#41;</span><span class="sy1">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; PostMessage<span class="br0">&#40;</span> hWindow<span class="sy1">,</span> WM_KEYUP<span class="sy1">,</span> key<span class="sy1">,</span> lparam <span class="kw1">or</span> <span class="re0">$C0000000</span><span class="br0">&#41;</span><span class="sy1">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">End</span><span class="sy1">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="coMULTI">(* process the messages *)</span><br />
&nbsp; &nbsp; &nbsp; Application<span class="sy1">.</span><span class="me1">ProcessMessages</span><span class="sy1">;</span></p>
<p>&nbsp; &nbsp; &nbsp; <span class="coMULTI">(* restore the old key state map *)</span><br />
&nbsp; &nbsp; &nbsp; SetKeyboardState<span class="br0">&#40;</span> pKeyBuffers<span class="sy2">^</span><span class="br0">&#91;</span>1<span class="br0">&#93;</span> <span class="br0">&#41;</span><span class="sy1">;</span><br />
&nbsp; &nbsp; <span class="kw1">finally</span><br />
&nbsp; &nbsp; &nbsp; <span class="coMULTI">(* free the memory for the key state buffers *)</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">If</span> pKeyBuffers &lt;&gt; <span class="kw2">Nil</span> <span class="kw1">Then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">Dispose</span><span class="br0">&#40;</span> pKeyBuffers <span class="br0">&#41;</span><span class="sy1">;</span><br />
&nbsp; &nbsp; <span class="kw1">End</span><span class="sy1">;</span> <span class="coMULTI">{ If }</span><br />
&nbsp; <span class="kw1">End</span><span class="sy1">;</span><br />
<span class="kw1">End</span><span class="sy1">;</span> <span class="coMULTI">{ PostKeyEx }</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</p>
<p>PostKeyEx<span class="br0">&#40;</span> targetWnd<span class="sy1">,</span> <span class="kw3">Ord</span><span class="br0">&#40;</span><span class="st0">&#8216;F&#8217;</span><span class="br0">&#41;</span><span class="sy1">,</span> <span class="br0">&#91;</span>ssAlt<span class="br0">&#93;</span><span class="sy1">,</span> <span class="kw2">false</span> <span class="br0">&#41;</span><span class="sy1">;</span></div>
</div>
<p>would send an Alt-F. But only if the target window is in the current<br />
process. Since each thread has its own keystate array the code cannot<br />
work properly if the receiver is in another process or even another<br />
thread of the current process. In this case the only option is to make<br />
the receiver window active (SetForegroundWindow) and use keybd_event to<br />
manufacture the keystrokes.</p>
<div class="codesnip-container" >
<div class="delphi codesnip" style="font-family:monospace;"><span class="coMULTI">{************************************************************<br />
&nbsp;* Procedure PostKeyEx32<br />
&nbsp;*<br />
&nbsp;* Parameters:<br />
&nbsp;* &nbsp;key &nbsp; &nbsp;: virtual keycode of the key to send. For printable<br />
&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; keys this is simply the ANSI code (Ord(character)).<br />
&nbsp;* &nbsp;shift &nbsp;: state of the modifier keys. This is a set, so you<br />
&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; can set several of these keys (shift, control, alt,<br />
&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mouse buttons) in tandem. The TShiftState type is <br />
&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; declared in the Classes Unit.<br />
&nbsp;* &nbsp;specialkey: normally this should be False. Set it to True to <br />
&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; specify a key on the numeric keypad, for example. <br />
&nbsp;* Description:<br />
&nbsp;* &nbsp;Uses keybd_event to manufacture a series of key events matching <br />
&nbsp;* &nbsp;the passed parameters. The events go to the control with focus.<br />
&nbsp;* &nbsp;Note that for characters key is always the upper-case version of<br />
&nbsp;* &nbsp;the character. Sending without any modifier keys will result in<br />
&nbsp;* &nbsp;a lower-case character, sending it with [ssShift] will result<br />
&nbsp;* &nbsp;in an upper-case character!<br />
&nbsp;*Created: 17.7.98 by P. Below<br />
&nbsp;************************************************************}</span><br />
<span class="kw1">Procedure</span> PostKeyEx32<span class="br0">&#40;</span> key<span class="sy1">:</span> <span class="kw4">Word</span><span class="sy1">;</span> <span class="kw1">Const</span> shift<span class="sy1">:</span> TShiftState<span class="sy1">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;specialkey<span class="sy1">:</span> <span class="kw4">Boolean</span> <span class="br0">&#41;</span><span class="sy1">;</span><br />
&nbsp; <span class="kw1">Type</span><br />
&nbsp; &nbsp; TShiftKeyInfo <span class="sy3">=</span> <span class="kw1">Record</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; shift<span class="sy1">:</span> <span class="kw4">Byte</span><span class="sy1">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; vkey <span class="sy1">:</span> <span class="kw4">Byte</span><span class="sy1">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">End</span><span class="sy1">;</span><br />
&nbsp; &nbsp; byteset <span class="sy3">=</span> <span class="kw1">Set</span> <span class="kw1">of</span> 0<span class="sy1">..</span>7<span class="sy1">;</span><br />
&nbsp; <span class="kw1">Const</span><br />
&nbsp; &nbsp; shiftkeys<span class="sy1">:</span> <span class="kw1">Array</span> <span class="br0">&#91;</span>1<span class="sy1">..</span>3<span class="br0">&#93;</span> <span class="kw1">of</span> TShiftKeyInfo <span class="sy3">=</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span><span class="br0">&#40;</span>shift<span class="sy1">:</span> <span class="kw3">Ord</span><span class="br0">&#40;</span>ssCtrl<span class="br0">&#41;</span><span class="sy1">;</span> vkey<span class="sy1">:</span> VK_CONTROL <span class="br0">&#41;</span><span class="sy1">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#40;</span>shift<span class="sy1">:</span> <span class="kw3">Ord</span><span class="br0">&#40;</span>ssShift<span class="br0">&#41;</span><span class="sy1">;</span> vkey<span class="sy1">:</span> VK_SHIFT <span class="br0">&#41;</span><span class="sy1">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#40;</span>shift<span class="sy1">:</span> <span class="kw3">Ord</span><span class="br0">&#40;</span>ssAlt<span class="br0">&#41;</span><span class="sy1">;</span> vkey<span class="sy1">:</span> VK_MENU <span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">;</span><br />
&nbsp; <span class="kw1">Var</span><br />
&nbsp; &nbsp; flag<span class="sy1">:</span> <span class="kw4">DWORD</span><span class="sy1">;</span><br />
&nbsp; &nbsp; bShift<span class="sy1">:</span> ByteSet absolute shift<span class="sy1">;</span><br />
&nbsp; &nbsp; i<span class="sy1">:</span> <span class="kw4">Integer</span><span class="sy1">;</span><br />
&nbsp; <span class="kw1">Begin</span><br />
&nbsp; &nbsp; <span class="kw1">For</span> i <span class="sy1">:</span><span class="sy3">=</span> 1 <span class="kw1">To</span> 3 <span class="kw1">Do</span> <span class="kw1">Begin</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">If</span> shiftkeys<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">.</span><span class="me1">shift</span> <span class="kw1">In</span> bShift <span class="kw1">Then</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; keybd_event<span class="br0">&#40;</span> shiftkeys<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">.</span><span class="me1">vkey</span><span class="sy1">,</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MapVirtualKey<span class="br0">&#40;</span>shiftkeys<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">.</span><span class="me1">vkey</span><span class="sy1">,</span> 0<span class="br0">&#41;</span><span class="sy1">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0<span class="sy1">,</span> 0<span class="br0">&#41;</span><span class="sy1">;</span><br />
&nbsp; &nbsp; <span class="kw1">End</span><span class="sy1">;</span> <span class="coMULTI">{ For }</span><br />
&nbsp; &nbsp; <span class="kw1">If</span> specialkey <span class="kw1">Then</span> <br />
&nbsp; &nbsp; &nbsp; flag <span class="sy1">:</span><span class="sy3">=</span> KEYEVENTF_EXTENDEDKEY<br />
&nbsp; &nbsp; <span class="kw1">Else</span><br />
&nbsp; &nbsp; &nbsp; flag <span class="sy1">:</span><span class="sy3">=</span> <span class="nu0">0</span><span class="sy1">;</span></p>
<p>&nbsp; &nbsp; keybd_event<span class="br0">&#40;</span> key<span class="sy1">,</span> MapvirtualKey<span class="br0">&#40;</span> key<span class="sy1">,</span> 0 <span class="br0">&#41;</span><span class="sy1">,</span> flag<span class="sy1">,</span> 0 <span class="br0">&#41;</span><span class="sy1">;</span><br />
&nbsp; &nbsp; flag <span class="sy1">:</span><span class="sy3">=</span> flag <span class="kw1">or</span> KEYEVENTF_KEYUP<span class="sy1">;</span><br />
&nbsp; &nbsp; keybd_event<span class="br0">&#40;</span> key<span class="sy1">,</span> MapvirtualKey<span class="br0">&#40;</span> key<span class="sy1">,</span> 0 <span class="br0">&#41;</span><span class="sy1">,</span> flag<span class="sy1">,</span> 0 <span class="br0">&#41;</span><span class="sy1">;</span></p>
<p>&nbsp; &nbsp; <span class="kw1">For</span> i <span class="sy1">:</span><span class="sy3">=</span> 3 <span class="kw1">DownTo</span> 1 <span class="kw1">Do</span> <span class="kw1">Begin</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">If</span> shiftkeys<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">.</span><span class="me1">shift</span> <span class="kw1">In</span> bShift <span class="kw1">Then</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; keybd_event<span class="br0">&#40;</span> shiftkeys<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">.</span><span class="me1">vkey</span><span class="sy1">,</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MapVirtualKey<span class="br0">&#40;</span>shiftkeys<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">.</span><span class="me1">vkey</span><span class="sy1">,</span> 0<span class="br0">&#41;</span><span class="sy1">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;KEYEVENTF_KEYUP<span class="sy1">,</span> 0<span class="br0">&#41;</span><span class="sy1">;</span><br />
&nbsp; &nbsp; <span class="kw1">End</span><span class="sy1">;</span> <span class="coMULTI">{ For }</span><br />
&nbsp; <span class="kw1">End</span><span class="sy1">;</span> <span class="coMULTI">{ PostKeyEx32 }</span></div>
</div>
<p>[tags]Delphi, Misc, Keyboard[/tags]</p>
<script type="text/javascript">
var flattr_wp_ver = '0.7';
var flattr_uid = '2376';
var flattr_cat = 'text';
var flattr_tle = 'nSonic Homepage';
var flattr_dsc = '> yes, but what is the virtual-key code for ALT+F? >  There ain\'t one, this is a key *combination*, not a single keystroke.  It would require several messages:    wm_syskeydown for VK_MENU (alt)   wm_syskeydown for Ord(\'F\')   wm_syschar    for \'F\'   wm_syskeyup   for Ord(\'F\'),   wm_syskeyup   for VM_MENU    The wm_syschar is not required if you use POstMessage instead of  SendMessage. However, it will probably still not work if the receiver  window checks for Alt down with GetKeyState instead of looking at the  Alt bit in the messages lparam, sending these messages does not change  the keystate array. The following procedure fixes this by changing the  array manually:  [code lang=\"delphi\"]{************************************************************  * Procedure PostKeyEx  *  * Parameters:  *  hWindow: target window to be send the keystroke  *  key    : virtual keycode of the key to send. For printable  *           keys this is simply the ANSI code (Ord(character)).  *  shift  : state of the modifier keys. Th';
var flattr_tag = 'Delphi,Keyboard,Misc';
var flattr_url = 'http://www.nsonic.de/blog/2007/05/nsonic-homepage-2/';
var flattr_lng = 'de_DE';
</script><script src="http://api.flattr.com/button/load.js" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.nsonic.de/blog/2007/05/nsonic-homepage-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
