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

所属分类: 软件编程 / C#教程 阅读数: 59
收藏 0 赞 0 分享

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

更多精彩内容其他人还在看

C#抽象类与抽象方法详解

这篇文章主要为大家详细介绍了C#抽象类与抽象方法的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C#代码实现扑克牌排序的几种方式

今天小编就为大家分享一篇关于C#代码实现扑克牌排序,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#泛型概念的简介与泛型的使用

今天小编就为大家分享一篇关于C#泛型概念的简介与泛型的使用,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C# 7.0 使用下划线忽略使用的变量的原因分析

这篇文章主要介绍了C# 7.0 使用下划线忽略使用的变量的原因浅析,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C# 中使用正则表达式匹配字符的含义

正则表达式的作用用来描述字符串的特征。本文重点给大家介绍C# 中使用正则表达式匹配字符的含义,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
收藏 0 赞 0 分享

C# Dictionary和SortedDictionary的简介

今天小编就为大家分享一篇关于C# Dictionary和SortedDictionary的简介,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#中SQL Command的基本用法

今天小编就为大家分享一篇关于C#中SQL Command的基本用法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#使用SQL DataReader访问数据的优点和实例

今天小编就为大家分享一篇关于C#使用SQL DataReader访问数据的优点和实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#使用SQL Dataset数据集代码实例

今天小编就为大家分享一篇关于的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#使用SQL DataAdapter数据适配代码实例

今天小编就为大家分享一篇关于C#使用SQL DataAdapter数据适配代码实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享
查看更多