软件编程
位置:首页>> 软件编程>> C#编程>> C#读取或设置ScrollLock状态的方法

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

作者:work24  发布时间:2023-03-14 21:41:24 

标签:C#,ScrollLock

本文实例讲述了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#程序设计有所帮助。

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com