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
投稿
猜你喜欢
- 这篇文章主要介绍了java多线程加锁以及Condition类的使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参
- 文章转自公众号:Coder梁(ID:Coder_LT) 1.类常量有的时候, 我们希望能给类当中定义一些常量,可以给所有类的对象使用。比如说
- 在官方的这篇文档中为大家介绍了如何使用Java开启Azure Windows虚拟机的诊断设置这篇文章呢,为大家介绍一下如何使用Java开启L
- 谨记:Url表只储存受保护的资源,不在表里的资源说明不受保护,任何人都可以访问1、MyFilterInvocationSecurityMet
- 软件需求VS2019社区版、win10操作系统、opencv4.1.0VS2019社区版(免费) 下载地址OpenCV4.1.0 下载地址配
- MyBatis Generator简介MyBatis Generator(MBG)是MyBatis MyBatis 和iBATIS的代码生成
- Mybatis事务管理我们可以在mybatis-config.xml中配置事务管理器的实现<transactionManager ty
- 本文提纲版本约定JDK:8Servlet:4.xtomcat:9.x✍正文什么样的答案终身难忘?学生时代关于记忆经常能听见两种论调:死记硬背
- Java RandomAccessFile 指定位置实现文件读取与写入RandomAccessFile是属于随机读取类,是可以对文件本身的内
- 前言本文主要给大家介绍了关于Spring Boot应用极速部署脚本的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧
- 一、关于idea中Maven的位置idea自带一个maven,其路径大致如下C:/java/IntelliJ IDEA 2020.1/plu
- 一、概述现在大多数的电商APP的详情页长得几乎都差不多,几乎都是上面一个商品的图片,当你滑动的时候,会有Tab悬浮在上面,这样做用户体验确实
- 本文实例讲述了Java Socket实现多线程通信功能的方法。分享给大家供大家参考,具体如下:前面的文章《Java Socket实现单线程通
- 本文介绍Android中的5种数据存储方式。数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是
- 为什么要使用Lambda?可以对一个接口进行非常简洁的实现。Lambda对接口的要求?接口中定义的抽象方法有且只有一个才可以。传统实现一个接
- 1、多个线程对同一个队列进行读写操作,要注意进行读写控制,某个线程在读取的时候,不允许其它线程读、写;某个线程在写的时候,不允许其它线程进行
- 引言Java * 机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类。代理
- 我们开发一个Spring Boot项目,肯定要导入许多的静态资源,比如css,js等文件如果我们是一个web应用,我们的main下会有一个w
- 之前做过cookie实现记住密码,这次换成session记住密码又做了一遍,有很多收获。本次博客分为两部分。一部分是cookie和sessi
- 在 C# WPF开发中颜色对话框控件(ColorDialog)用于对界面中的背景、文字…(拥有颜色属性的所有控件)设置