private void DoSendKeys( object sender, string key )
{
KeySendingEventArgs e = new KeySendingEventArgs( key );
if( KeySending != null ) KeySending( this, e );
if( !e.Cancel )
{
switch( key )
{
case "@":
Keybd.Event( VKeyCode.VK_ALTGR, (byte)VKeyCode.SC_ALTGR_FR, Keybd.KEYEVENTF.EXTENDEDKEY | 0, (UIntPtr)0 );
SendKeys.SendWait( key );
Keybd.Event( VKeyCode.VK_ALTGR, (byte)VKeyCode.SC_ALTGR_FR, Keybd.KEYEVENTF.EXTENDEDKEY | Keybd.KEYEVENTF.KEYUP, (UIntPtr)0 );
break;
case "#":
Keybd.Event( VKeyCode.VK_ALTGR, (byte)VKeyCode.SC_ALTGR_FR, Keybd.KEYEVENTF.EXTENDEDKEY | 0, (UIntPtr)0 );
SendKeys.SendWait( "#" );
Keybd.Event( VKeyCode.VK_ALTGR, (byte)VKeyCode.SC_ALTGR_FR, Keybd.KEYEVENTF.EXTENDEDKEY | Keybd.KEYEVENTF.KEYUP, (UIntPtr)0 );
break;
case "{BACKSLASH}":
Keybd.Event( VKeyCode.VK_ALTGR, (byte)VKeyCode.SC_ALTGR_FR, Keybd.KEYEVENTF.EXTENDEDKEY | 0, (UIntPtr)0 );
SendKeys.SendWait( "{\\}" );
Keybd.Event( VKeyCode.VK_ALTGR, (byte)VKeyCode.SC_ALTGR_FR, Keybd.KEYEVENTF.EXTENDEDKEY | Keybd.KEYEVENTF.KEYUP, (UIntPtr)0 );
break;
case "{dbquote}":
SendKeys.SendWait( "\"" );
break;
case "(":
case ")":
case "{":
case "}":
case "+":
SendKeys.SendWait( "{" + key + "}" );
break;
case "^":
Keybd.Event( VKeyCode.VK_CARET, (byte)0, Keybd.KEYEVENTF.KEYDOWN, UIntPtr.Zero );
Keybd.Event( VKeyCode.VK_CARET, (byte)0, Keybd.KEYEVENTF.KEYUP, UIntPtr.Zero );
SendKeys.SendWait( " " );
break;
case "%":
Keybd.Event( VKeyCode.VK_RSHIFT, (byte)0, Keybd.KEYEVENTF.EXTENDEDKEY, UIntPtr.Zero );
Keybd.Event( VKeyCode.VK_PERCENT, (byte)0, Keybd.KEYEVENTF.EXTENDEDKEY, UIntPtr.Zero );
Keybd.Event( VKeyCode.VK_PERCENT, (byte)0, Keybd.KEYEVENTF.EXTENDEDKEY | Keybd.KEYEVENTF.KEYUP, UIntPtr.Zero );
Keybd.Event( VKeyCode.VK_RSHIFT, (byte)0, Keybd.KEYEVENTF.EXTENDEDKEY | Keybd.KEYEVENTF.KEYUP, UIntPtr.Zero );
break;
case "~":
case "¨":
case "`":
SendKeys.SendWait( "{" + key + "}" );
SendKeys.SendWait( " " );
break;
default:
SendKeys.SendWait( key );
break;
}
if( KeySent != null ) KeySent( this, new KeySentEventArgs( key ) );
}
}