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

前端技术 2023/09/06 C#

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

本文地址:https://www.stayed.cn/item/16005

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。