C#读取或设置ScrollLock状态的方法
本文实例讲述了C#读取或设置ScrollLock状态的方法。分享给大家供大家参考。具体如下:
C#读取或者设置ScrollLock状态,允许滚动状态读取或者设置
usingSystem;
usingSystem.Runtime.InteropServices;
usingSystem.Windows.Forms;
namespaceRobvanderWoude
{
publicclassScrollLock
{
[DllImport("user32.dll")]
staticexternvoidkeybd_event(bytebVk,bytebScan,uintdwFlags,UIntPtrdwExtraInfo);
constintKEYEVENTF_EXTENDEDKEY=0x1;
constintKEYEVENTF_KEYUP=0x2;
publicstaticintMain(string[]args)
{
try
{
boolscrollLock;
boolnewState=false;
boolsetState=false;
boolsetVerbose=false;
boolverbose=true;
if(args.Length>2)
{
returnWriteError("Invalidcommandlineargument(s).");
}
else
{
foreach(stringarginargs)
{
switch(arg.ToUpper())
{
case"/?":
case"-H":
case"/HELP":
case"-HELP":
case"--HELP":
returnWriteError(string.Empty);
case"/Q":
case"-Q":
case"/QUIET":
case"-QUIET":
case"--QUIET":
if(setVerbose)
{
returnWriteError("Duplicateswitchnotallowed.");
}
setVerbose=true;
verbose=false;
break;
case"/V":
case"-V":
case"/VERBOSE":
case"-VERBOSE":
case"--VERBOSE":
if(setVerbose)
{
returnWriteError("Duplicateswitchnotallowed.");
}
setVerbose=true;
verbose=true;
break;
case"0":
case"OFF":
if(setState)
{
returnWriteError("Duplicateargumentnotallowed.");
}
setState=true;
newState=false;
break;
case"1":
case"ON":
if(setState)
{
returnWriteError("Duplicateargumentnotallowed.");
}
setState=true;
newState=true;
break;
default:
returnWriteError("Invalidcommandlineargument"+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(Exceptione)
{
returnWriteError(e);
}
}
publicstaticintWriteError(Exceptione)
{
returnWriteError(e==null?null:e.Message);
}
publicstaticintWriteError(stringerrorMessage)
{
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,Version1.01");
Console.Error.WriteLine("ReadorsetScrollLockkeystate");
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("setScrollLockoff");
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("setScrollLockon");
Console.ForegroundColor=ConsoleColor.White;
Console.Error.Write("/Q");
Console.ResetColor();
Console.Error.WriteLine("uietwon'tdisplayanythingonscreen");
Console.ForegroundColor=ConsoleColor.White;
Console.Error.Write("/V");
Console.ResetColor();
Console.Error.WriteLine("erbosedisplaysthe(new)ScrollLockkeystateonscreen(default)");
Console.Error.WriteLine();
Console.Error.WriteLine("Notes:An\"errorlevel\"0isreturnedifScrollLockisoff,2if");
Console.Error.WriteLine("ScrollLockison,or1incaseof(commandline)errors.");
Console.Error.WriteLine();
Console.Error.WriteLine("WrittenbyRobvanderWoude");
return1;
}
}
}
希望本文所述对大家的C#程序设计有所帮助。