public static void SendKeyboardInput( Key key, bool press )
{
//CASRemoval:AutomationPermission.Demand( AutomationPermissionFlag.Input );
UnsafeNativeMethods.INPUT ki = new UnsafeNativeMethods.INPUT();
ki.type = UnsafeNativeMethods.INPUT_KEYBOARD;
ki.union.keyboardInput.wVk = (short) KeyInterop.VirtualKeyFromKey( key );
ki.union.keyboardInput.wScan = (short) UnsafeNativeMethods.MapVirtualKey( ki.union.keyboardInput.wVk, 0 );
int dwFlags = 0;
if( ki.union.keyboardInput.wScan > 0 )
dwFlags |= UnsafeNativeMethods.KEYEVENTF_SCANCODE;
if( !press )
dwFlags |= UnsafeNativeMethods.KEYEVENTF_KEYUP;
ki.union.keyboardInput.dwFlags = dwFlags;
if( IsExtendedKey( key ) )
{
ki.union.keyboardInput.dwFlags |= UnsafeNativeMethods.KEYEVENTF_EXTENDEDKEY;
}
ki.union.keyboardInput.time = 0;
ki.union.keyboardInput.dwExtraInfo = new IntPtr( 0 );
if( UnsafeNativeMethods.SendInput( 1, ref ki, Marshal.SizeOf(ki) ) == 0 )
throw new Win32Exception(Marshal.GetLastWin32Error());
}