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

 更新时间:2015年04月18日 10:47:34   作者:work24  
这篇文章主要介绍了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( "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#中时间类的使用方法详解

    这篇文章主要介绍C#中的时间类,文中主要介绍了DateTime类,TimeSpan类,DateTimeOffset类及静态类的封装,通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • C#使用对象序列化类库MessasgePack

    C#使用对象序列化类库MessasgePack

    这篇文章介绍了C#使用对象序列化类库MessasgePack的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • C#编写SqlHelper类

    C#编写SqlHelper类

    在C#中使用ADO.NET连接数据库的时候,每次连接都要编写连接,打开,执行SQL语句的代码,很麻烦,编写一个SqlHelper类,把每次连接都要写的代码封装成方法,把要执行的SQL语句通过参数传进去,可以大大简化编码
    2017-09-09
  • C# 弹出窗口show()和showdialog()的两种方式

    C# 弹出窗口show()和showdialog()的两种方式

    本文主要介绍了C# 弹出窗口show()和showdialog()的两种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • C# 使用相同权限调用 cmd 传入命令的方法

    C# 使用相同权限调用 cmd 传入命令的方法

    本文告诉大家如何使用相同权限调用cmd并且传入命令,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-07-07
  • C#实现提高xml读写速度的方法

    C#实现提高xml读写速度的方法

    这篇文章主要介绍了C#实现提高xml读写速度的方法,并且针对各类文件的读写做了较为细致的分析,非常实用,需要的朋友可以参考下
    2014-11-11
  • 可替代log4j日志的c#简单日志类队列实现类代码分享

    可替代log4j日志的c#简单日志类队列实现类代码分享

    简单日志类队列实现。可按天周月年大小分割文件。可简单替代log4j
    2013-12-12
  • C#从实体对象集合中导出Excel的代码

    C#从实体对象集合中导出Excel的代码

    数据的导出是项目中经常要实现的功能,就拿最常见的要导出成Excel来说,网上看来看去,都是介绍从Datatable中导出
    2008-08-08
  • OpenXml读取word内容的实例

    OpenXml读取word内容的实例

    下面小编就为大家分享一篇OpenXml读取word内容的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • C#二进制序列化实例分析

    C#二进制序列化实例分析

    这篇文章主要介绍了C#二进制序列化,实例分析了C#二进制序列化的方法,代码中有较为详尽的注释说明,便于理解,需要的朋友可以参考下
    2015-05-05

最新评论