首页 > 编程 > C# > 正文

C#读取或设置ScrollLock状态的方法

2020-01-24 01:58:36
字体:
来源:转载
供稿:网友

本文实例讲述了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;  } }}

希望本文所述对大家的C#程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表