C#读取或设置ScrollLock

C#读取或者设置ScrollLock状态,允许滚动状态读取或者设置

 using System; using System.Runtime.InteropServices; using System.Windows.Forms; namespace RobvanderWoude {  public class ScrollLock  {   [DllImport( "user32.dll" )]   static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);   const int KEYEVENTF_EXTENDEDKEY = 0x1;   const int KEYEVENTF_KEYUP = 0x2;   public static int Main(string[] args)   {    try   {     bool scrollLock;     bool newState = false;     bool setState = false;     bool setVerbose = false;     bool verbose = true;     if ( args.Length > 2 )     {      return WriteError("Invalid command line argument(s).");     }     else    {      foreach ( string arg in args )      {       switch ( arg.ToUpper( ) )       {        case "/?":        case "-H":        case "/HELP":        case "-HELP":        case "--HELP":         return WriteError(string.Empty);        case "/Q":        case "-Q":        case "/QUIET":        case "-QUIET":        case "--QUIET":         if ( setVerbose )         {          return WriteError("Duplicate switch not allowed.");         }         setVerbose = true;         verbose = false;         break;        case "/V":        case "-V":        case "/VERBOSE":        case "-VERBOSE":        case "--VERBOSE":         if ( setVerbose )         {          return WriteError("Duplicate switch not allowed.");         }         setVerbose = true;         verbose = true;         break;        case "0":        case "OFF":         if ( setState )         {          return WriteError("Duplicate argument not allowed.");         }         setState = true;         newState = false;         break;        case "1":        case "ON":         if ( setState )         {          return WriteError("Duplicate argument not allowed.");         }         setState = true;         newState = true;         break;        default:         return WriteError("Invalid command line argument "+arg);       }      }     }     if ( Control.IsKeyLocked( Keys.Scroll ) )     {      scrollLock = true;      if ( setState && !newState )      {       keybd_event(0x91, 0x45, KEYEVENTF_EXTENDEDKEY, (UIntPtr) 0);       keybd_event(0x91, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, (UIntPtr) 0);      }     }     else    {      scrollLock = false;      if ( setState && newState )      {       keybd_event(0x91,0x45,KEYEVENTF_EXTENDEDKEY,(UIntPtr) 1);       keybd_event(0x91,0x45,KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,(UIntPtr) 1);      }     }     scrollLock = Control.IsKeyLocked( Keys.Scroll );     if ( verbose )     {      Console.Write( "ScrollLock = " );      Console.ForegroundColor = ConsoleColor.White;      Console.WriteLine( ( scrollLock ? "ON" : "OFF" ) );      Console.ResetColor( );     }     return ( scrollLock ? 2 : 0 );    }    catch ( Exception e )    {     return WriteError( e );    }   }   public static int WriteError( Exception e )   {    return WriteError( e == null ? null : e.Message );   }   public static int WriteError( string errorMessage )   {    if ( string.IsNullOrEmpty( errorMessage ) == false )    {     Console.Error.WriteLine( );     Console.ForegroundColor = ConsoleColor.Red;     Console.Error.Write( "ERROR: " );     Console.ForegroundColor = ConsoleColor.White;     Console.Error.WriteLine( errorMessage );     Console.ResetColor( );    }    Console.Error.WriteLine( );    Console.Error.WriteLine( "ScrollLock, Version 1.01" );    Console.Error.WriteLine( "Read or set ScrollLock key state" );    Console.Error.WriteLine( );    Console.Error.Write( "Usage: " );    Console.ForegroundColor = ConsoleColor.White;    Console.Error.WriteLine("SCROLLLOCK [ 0 | 1 | ON | OFF ] [ /Quiet | /Verbose ]");    Console.ResetColor( );    Console.Error.WriteLine( );    Console.Error.Write( "Where: " );    Console.ForegroundColor = ConsoleColor.White;    Console.Error.Write( "0" );    Console.ResetColor( );    Console.Error.Write( " or " );    Console.ForegroundColor = ConsoleColor.White;    Console.Error.Write( "OFF" );    Console.ResetColor( );    Console.Error.WriteLine( "  set ScrollLock off" );    Console.ForegroundColor = ConsoleColor.White;    Console.Error.Write( "    1" );    Console.ResetColor( );    Console.Error.Write( " or " );    Console.ForegroundColor = ConsoleColor.White;    Console.Error.Write( "ON" );    Console.ResetColor( );    Console.Error.WriteLine( "  set ScrollLock on" );    Console.ForegroundColor = ConsoleColor.White;    Console.Error.Write( "    /Q" );    Console.ResetColor( );    Console.Error.WriteLine( "uiet   won't display anything on screen" );    Console.ForegroundColor = ConsoleColor.White;    Console.Error.Write( "    /V" );    Console.ResetColor( );    Console.Error.WriteLine("erbose displays the (new) ScrollLock key state on screen (default)");    Console.Error.WriteLine();    Console.Error.WriteLine("Notes: An \"errorlevel\" 0 is returned if ScrollLock is off, 2 if");    Console.Error.WriteLine(" ScrollLock is on, or 1 in case of (command line) errors.");    Console.Error.WriteLine();    Console.Error.WriteLine("Written by Rob van der Woude");    return 1;   }  } } 

 codego.net代码提供


你可能感兴趣的:(c,public,false)