C#讀取或設(shè)置ScrollLock狀態(tài)的方法
本文實(shí)例講述了C#讀取或設(shè)置ScrollLock狀態(tài)的方法。分享給大家供大家參考。具體如下:
C#讀取或者設(shè)置ScrollLock狀態(tài),允許滾動(dòng)狀態(tài)讀取或者設(shè)置
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; } } }
希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。
相關(guān)文章
基于Unity制作一個(gè)簡(jiǎn)易的計(jì)算器
今天主要和大家分享如何使用Unity制作計(jì)算器,難度中等,可以用來(lái)學(xué)習(xí),或者當(dāng)成其他項(xiàng)目的小組件導(dǎo)入。當(dāng)然,也可以導(dǎo)出來(lái),發(fā)布到網(wǎng)頁(yè)端,來(lái)做一個(gè)嵌入式工具也可以。感興趣的可以跟隨小編學(xué)習(xí)一下2022-03-03C#搜索TreeView子節(jié)點(diǎn),保留父節(jié)點(diǎn)的方法
這篇文章主要介紹了C#搜索TreeView子節(jié)點(diǎn),保留父節(jié)點(diǎn)的方法,實(shí)例分析了C#操作TreeView節(jié)點(diǎn)的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09c#?理解csredis庫(kù)實(shí)現(xiàn)分布式鎖的詳細(xì)流程
這篇文章主要介紹了c#?理解csredis實(shí)現(xiàn)分布式鎖,該庫(kù)本身已經(jīng)足夠完善,這里我畫(huà)蛇添足一下,為了方便自己的使用,本文通過(guò)實(shí)例代碼給大家詳細(xì)介紹,需要的朋友可以參考下2022-02-02C#數(shù)據(jù)結(jié)構(gòu)之順序表(SeqList)實(shí)例詳解
這篇文章主要介紹了C#數(shù)據(jù)結(jié)構(gòu)之順序表(SeqList)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了順序表的定義、原理與具體實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11Dynamic和Var的區(qū)別及dynamic使用詳解
C#中的很多關(guān)鍵詞用法比較容易混淆,var和dynamic就是其中一組,他們都可以申明動(dòng)態(tài)類(lèi)型的變量,但是本質(zhì)上他們還是有不少區(qū)別的,下面通過(guò)本文給大家介紹Dynamic和Var的區(qū)別及如何正確使用dynamic,需要的朋友參考下2016-01-01C#從文件或標(biāo)準(zhǔn)輸入設(shè)備讀取指定行的方法
這篇文章主要介紹了C#從文件或標(biāo)準(zhǔn)輸入設(shè)備讀取指定行的方法,涉及C#文件及IO操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04C# 通過(guò)Socket讀取大量數(shù)據(jù)的示例
這篇文章主要介紹了C# 通過(guò)Socket讀取大量數(shù)據(jù)的示例,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-03-03