C#读取或设置ScrollLock滚动栏状态的例子

发布时间:2020-11-26编辑:脚本学堂
c#如何读取与设置ScrollLock状态?这里分享一例c#代码,C#读取或设置ScrollLock状态,允许滚动状态读取或设置,学习下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( "uietwon'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;
  }
 }
}