C#读取或设置ScrollLock状态的方法
作者:work24 发布时间:2023-03-14 21:41:24
标签: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#程序设计有所帮助。
0
投稿
猜你喜欢
- 在 fluro 中,定义路由处理器 Handler 时可以指定该页面的默认转场形式,或者在使用 navigateTo 方法是可以设置页面跳转
- 一、效果图二、代码public class TextSubView extends TextView {private TextPaint
- 这两天因为要做一个随机的地图生成系统,所以一直在研究随机迷宫生成算法,好吧,算是有一点小小的成果。随机迷宫生成我自己的理解简而言之分为以下几
- 前言在上一篇普通的加载千篇一律,有趣的 loading 万里挑一 中,我们介绍了使用Path类的PathMetrics属性来控制绘制点在路径
- ArrayList类List集合的实例化:List<String> l = new ArrayList<String>
- idea的前后跳转箭头没有像eclipse一样显示在导航栏,很多时候找不到,记住快捷键:ctrl+alt+ 向左箭头或者向右箭头即可跳转。补
- 引言翻译自:towardsdev.com/mastering-e…Kotlin 作为现代的、强大的编程语言,可以给开发
- 本文实例讲述了Java使用备忘录模式实现过关类游戏功能。分享给大家供大家参考,具体如下:一.模式定义备忘录模式,在不破坏封闭的前提下,捕获一
- 线程间通信我们看下面的图我们来看线程间通信的原理:线程(Thread B)和线程(Thread A)通信, 首先线程A 必须实现同步上下文对
- 0x01. 概述SpringBoot平时我们用的爽歪歪,爽到它自己连Tomcat都自集成了,我们可以直接编写SBT启动类,然后一键开启内置的
- jdk线程池ThreadPoolExecutor的7个参数public ThreadPoolExecutor(int corePoolSiz
- WPF 实现步骤控件框架使用.NET40;Visual Studio 2019;Step 继承 ItemsControl
- 本文实例为大家分享了Android实现屏幕保持常亮的具体代码,供大家参考,具体内容如下一、需求背景当我们在玩游戏或者看视频的时候不希望app
- 前言从windows窗口的概念开始,通过对比去理解Android窗口体系,本文没有深入源码,重在理解概念代码都是抄来抄去,概念也是互相借鉴
- 一:CountdownEvent这种采用信号状态的同步基元非常适合在动态的fork,join的场景,它采用“信号计数&a
- 1. 下载myeclipse版本对应的STS插件下载地址:https://spring.io/tools/sts/all2.在myeclip
- 一. switch分支结构1. 简介switch结合case,能够判断一个变量或表达式与一系列值中的某个值是否相等,这里的每个值都被称为一个
- 具体实现过程不多说了,直接贴代码了。using System;using System.Collections.Generic;using
- 谜题在C#中,用virtual关键字修饰的方法(属性、事件)称为虚方法(属性、事件),表示该方法可以由派生类重写(override)。虚方法
- 前言初识Android PowerManagerService省电模式 让我们省电模式的概念有了初步的认识,Androi