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#程序设计有所帮助。

相关文章

  • 基于Unity制作一个简易的计算器

    基于Unity制作一个简易的计算器

    今天主要和大家分享如何使用Unity制作计算器,难度中等,可以用来学习,或者当成其他项目的小组件导入。当然,也可以导出来,发布到网页端,来做一个嵌入式工具也可以。感兴趣的可以跟随小编学习一下
    2022-03-03
  • C#日历样式的下拉式计算器实例讲解

    C#日历样式的下拉式计算器实例讲解

    如果我们正在做一个类似于库存控制和计费系统的项目,有些部分可能必须手动计算数值。因此,用户就不得不使用计算器得到结果,再填入到输入字段中,或者在工作窗口上单独打开一个计算器窗口。总之,各种不便和麻烦。
    2015-09-09
  • C#搜索TreeView子节点,保留父节点的方法

    C#搜索TreeView子节点,保留父节点的方法

    这篇文章主要介绍了C#搜索TreeView子节点,保留父节点的方法,实例分析了C#操作TreeView节点的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • c# 理解csredis库实现分布式锁的详细流程

    c# 理解csredis库实现分布式锁的详细流程

    这篇文章主要介绍了c# 理解csredis实现分布式锁,该库本身已经足够完善,这里我画蛇添足一下,为了方便自己的使用,本文通过实例代码给大家详细介绍,需要的朋友可以参考下
    2022-02-02
  • C#数据结构之顺序表(SeqList)实例详解

    C#数据结构之顺序表(SeqList)实例详解

    这篇文章主要介绍了C#数据结构之顺序表(SeqList)实现方法,结合实例形式较为详细的分析了顺序表的定义、原理与具体实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-11-11
  • Dynamic和Var的区别及dynamic使用详解

    Dynamic和Var的区别及dynamic使用详解

    C#中的很多关键词用法比较容易混淆,var和dynamic就是其中一组,他们都可以申明动态类型的变量,但是本质上他们还是有不少区别的,下面通过本文给大家介绍Dynamic和Var的区别及如何正确使用dynamic,需要的朋友参考下
    2016-01-01
  • C#文件后缀名的详细介绍

    C#文件后缀名的详细介绍

    这篇文章详细介绍了C#文件后缀名,有需要的朋友可以参考一下
    2013-09-09
  • C#从文件或标准输入设备读取指定行的方法

    C#从文件或标准输入设备读取指定行的方法

    这篇文章主要介绍了C#从文件或标准输入设备读取指定行的方法,涉及C#文件及IO操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • C# 通过Socket读取大量数据的示例

    C# 通过Socket读取大量数据的示例

    这篇文章主要介绍了C# 通过Socket读取大量数据的示例,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-03-03
  • C# WinForm编程获取文件物理路径的方法

    C# WinForm编程获取文件物理路径的方法

    这篇文章主要介绍了C# inForm编程获取文件物理路径的方法,获取的物理路径是软件即软件安装所在目录,需要的朋友可以参考下
    2014-08-08

最新评论